Android 弗里达是个问题。挂接静态方法调用
我正在努力学习Frida,到目前为止,我已经做了一些实验。幸好我能找到足够的例子和教程来帮助我度过难关。然而,此时此刻,我手头有一项非常具体的任务 让我们假设下面是我指的Frida钩子:Android 弗里达是个问题。挂接静态方法调用,android,security,hook,code-injection,frida,Android,Security,Hook,Code Injection,Frida,我正在努力学习Frida,到目前为止,我已经做了一些实验。幸好我能找到足够的例子和教程来帮助我度过难关。然而,此时此刻,我手头有一项非常具体的任务 让我们假设下面是我指的Frida钩子: Java.perform(() => { const TestClass = Java.use( 'com.test.TestClass', ); TestClass.testStaticMethod.overload('java.lang.String
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);
});
它不输出“intercept!”
原因可能是什么?调用
TestClass.testStaticMethod(testStr,testMap)脚本中的code>不执行钩子,而是执行原始的未钩子方法。因此,您将永远看不到输出截获代码>加载脚本时
输出<代码>截取只有当应用程序执行钩住的方法时,才会生成代码>。我对重载有疑问。您正在使用HashMap,但却重载了一个映射。从我在上所看到的,HashMap实现了Map接口,但并没有扩展它,所以您可能会输入另一个重载。您应该尝试TestClass.testStaticMethod.重载('java.lang.String'、'java.util.HashMap')
或TestClass.testStaticMethod.重载('java.lang.String'、'java.util.AbstractMap')
。丹泽尔请不要在注释中发布多行代码,因为它在那里完全不可读!相反,请编辑您的问题并在此处添加代码。