Android 弗里达是个问题。挂接静态方法调用

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

我正在努力学习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);
    });
它不输出“intercept!”
原因可能是什么?

调用
TestClass.testStaticMethod(testStr,testMap)不执行钩子,而是执行原始的未钩子方法。因此,您将永远看不到输出
截获加载脚本时


输出<代码>截取

我对重载有疑问。您正在使用HashMap,但却重载了一个映射。从我在上所看到的,HashMap实现了Map接口,但并没有扩展它,所以您可能会输入另一个重载。您应该尝试
TestClass.testStaticMethod.重载('java.lang.String'、'java.util.HashMap')
TestClass.testStaticMethod.重载('java.lang.String'、'java.util.AbstractMap')
。丹泽尔请不要在注释中发布多行代码,因为它在那里完全不可读!相反,请编辑您的问题并在此处添加代码。