我正在尝试学习Frida,并进行了一些尝试。事情大部分都进行了,幸运的是我可以找到足够的示例和教程来帮助我。但是,在这个时候,我手头上有一个非常具体的任务。
所以我们在下面说的是我指的Frida钩子:
Java.perform(() => {
const TestClass = Java.use(
'com.test.TestClass',
);
TestClass.testStaticMethod.overload('java.lang.String', 'java.util.Map').implementation = function (
str,
map,
) {
console.log('intercept!');
return this.b(str, map);
};
const testStr = Java.use('java.lang.String').$new('test');
const testMap = Java.use('java.util.HashMap').$new();
});
//wait (sleep) 10-15 secs
Java.perform(() => {
// test it!
TestClass.testStaticMethod(testStr, testMap);
});
它不输出“拦截!” 可能是什么原因?
答案 0 :(得分:0)
在脚本中对TestClass.testStaticMethod(testStr, testMap);
的调用不会执行该挂钩,而是执行原始的未挂钩方法。因此,在加载脚本时,您将永远不会看到输出intercept!
。
仅当钩子方法由应用程序执行时,才会生成输出intercept!
。