首页
社区
课程
招聘
[原创]frida无法以美元符号开头的 Java 方法进行交互。
发表于: 2022-11-12 22:13 7849

[原创]frida无法以美元符号开头的 Java 方法进行交互。

2022-11-12 22:13
7849

问题

使用 Javascript API 时,无法与名称以美元符号开头的 Java 方法进行交互。

 

我创建了一个带有以下反编译代码的小示例apk

1
2
3
4
5
6
7
8
9
public class a {
    public static String $$() {
        return a();
    }
 
    private static String a() {
        return "$$";
    }
}

我用于替换这两个方法的实现的 JavaScript 如下:

1
2
3
4
5
6
7
8
9
10
11
12
Java.perform(function(){
  var classA = Java.use('xyz.barsk.fridaplayground.a')
  classA.a.implementation = function() {
    console.log("a called");
    return this.a();
  };
 
  classA.$$.implementation = function() {
    console.log("$$ called");
    return this.a();
  }
});

执行该hook,会报错:TypeError: cannot set property 'implementation' of undefined

 

这是我创建的apk来演示问题:sample-apk.zip

解决方式

在$$开头的方法前面添加"_"
例:

1
2
3
com.appsflyer.internal.c.$$a
更改为
com.appsflyer.internal.c._$$a
1
2
3
4
5
6
com.hf.af on (google: 12) [usb] # android hooking watch class_method com.appsflyer.internal.c._$$a
(agent) Attempting to watch class com.appsflyer.internal.c and method _$$a.
(agent) Hooking com.appsflyer.internal.c._$$a(java.lang.Object)
(agent) Hooking com.appsflyer.internal.c._$$a(int, char, int)
(agent) Hooking com.appsflyer.internal.c._$$a()
(agent) Registering job 635365. Type: watch-method for: com.appsflyer.internal.c._$$a

问题解决。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (1)
雪    币: 229
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
我测试失败了。
 let e = Java.use("com.appsflyer.internal.e");
e._$$c.implementation = function ( ){
2023-2-15 17:15
0
游客
登录 | 注册 方可回帖
返回
//