-
-
[原创]frida无法以美元符号开头的 Java 方法进行交互。
-
发表于:
2022-11-12 22:13
7849
-
[原创]frida无法以美元符号开头的 Java 方法进行交互。
问题
使用 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]
(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
|
问题解决。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!