frida -U --no-pause -l xx.js -f pkgname (or -p pid) # PrintStack 输出当前调用堆栈 var Throwable = null; Java.perform(function () { Throwable = Java.use("java.lang.Throwable"); }); function PrintStack() { var stackElements = Throwable.$new().getStackTrace(); var body = "Stack: " + stackElements[0];//method//stackElements[0].getMethodName() for (var i = 1; i < stackElements.length; i++) { body += "\n at " + stackElements[i]; } console.log("\n\n"+body); }; ##############3 #参数路径及数量 太复杂 var CoreHttpManager = Java.use('com.alipay.mobile.common.transport.http.inner.CoreHttpManager'); CoreHttpManager.a.overload('xx').implementation = function(){ var ret = this.a.apply(this, arguments); return ret } 写好函数名,参数任意,然后保存。frida打印错误会自动输出参数列表 ##### #反射 类变量只能通过类的函数进行操作,或者通过反射 var MIMCUser = Java.use('com.xiaomi.mimc.MIMCUser'); MIMCUser.sendMessage.overload('java.lang.String', '[B', 'java.lang.String', 'boolean').implementation = function(){ var clazz = Java.use("java.lang.Class"); var param = Java.cast(this.getClass(), clazz).getDeclaredField("appAccount"); param.setAccessible(true); console.log("=="+param.get(this)) //param.set(this, 'aaaaaaaaaa') var ret = this.sendMessage.apply(this, arguments); return ret; } 其中this.getClass()可以类似用于argument[n] ############### #java map to string var Map = Java.use('java.util.HashMap') var args_map = Java.cast(arguments[0], Map) var tags = args_map.toString() argument[0] 为Map等类型 ############### # output byte array function byteArr2str(ba, w){ if(w){ var string = Java.use('java.lang.String') return string.$new(ba) }else{ var array = Java.use('java.util.Arrays') return array.toString(ba) } } 调用 try{ console.log(byteArr2str(ba, true)) }catch(e){ console.log(byteArr2str(ba, false)) } arrays方式需要借助下面函数查看 //array2str function arr(arr){ if (arr != null){ var ret = '' for(var i = 0, len = arr.length; i < len; i++){ ret += String.fromCharCode(arr[i]) } return ret } } 或者借助app里面已有的函数进行转换 #################### #android 7+ ssl错误 //========android 7+ try{ var array_list = Java.use("java.util.ArrayList"); var ApiClient = Java.use('com.android.org.conscrypt.TrustManagerImpl'); ApiClient.checkTrustedRecursive.implementation = function(a1, a2, a3, a4, a5, a6) { var k = array_list.$new(); return k; } }catch (e) { //console.log('universal '+e); } ################ #找不到函数,遍历calssloader //find classloader console.log('len '+Java.enumerateClassLoadersSync().length) for(var i=0;i