Java.perform(function () {
console.log("start hooking...");
function showstack() {
var log = Java.use("android.util.Log");
var Throwable = Java.use("java.lang.Throwable");
console.log(log.getStackTraceString(Throwable.$new()))
}
// 1. HashMap的put方法
var HashMap = Java.use("java.util.HashMap");
HashMap.put.implementation = function (a, b) {
if (a.equals("username")) {//条件判断
console.log(a, " ", b)
showstack()
}
return this.put(a, b)
}
})
//额外说明:当我们最开始hook时,不能使用showstack()进行堆栈打印,因为输出量过大,会使APP崩溃。
//当我们第一次通过HashMap打印出关键字段,然后通过“equals”或者“==”进行判断继而打印
frida -U -F -l .\test.js -o stack.txt
“-o stack.txt” 即创建一个输出的文本,把日志放入其中,以方便我们查看;
hook过程中不会写入,只有当我们执行exit退出Frida hook时才会写入文本内。