android - 如何在使用 frida 的方法中挂钩 onClick 方法
问题描述
我想通过与 frida 挂钩来改变 onClick 方法的行为。我使用的代码是
Java.perform(function() {
console.log("[*] START...")
var mClass = Java.use("sg.vantagepoint.uncrackable1.MainActivity")
mClass.a.onClick.implementation=function() {
console.log("[*] Clicked ")
}
})
我收到错误
TypeError: cannot write property 'implementation' of undefined
at [anon] (../../../frida-gum/bindings/gumjs/duktape.c:57636)
at /uncrackable1.js:6
at frida/node_modules/frida-java-bridge/lib/vm.js:11
at E (frida/node_modules/frida-java-bridge/index.js:346)
at frida/node_modules/frida-java-bridge/index.js:298
at frida/node_modules/frida-java-bridge/lib/vm.js:11
at frida/node_modules/frida-java-bridge/index.js:278
at /uncrackable1.js:11
源代码是
private void a(String str) {
AlertDialog create = new AlertDialog.Builder(this).create();
create.setTitle(str);
create.setMessage("This is unacceptable. The app is now going to exit.");
create.setButton(-3, "OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialogInterface, int i) {
System.exit(0);
}
});
解决方案
您正在尝试挂钩错误的类 - 很可能是因为您使用 Jadx 来反编译错误的设置并且不了解 Java 类。
如果您使用Jadx反编译 APK 文件,请确保禁用设置内联匿名类以查看方法所属的真实类名。
该方法onClick()
属于由new DialogInterface.OnClickListener()
而不是创建的匿名内部类sg.vantagepoint.uncrackable1.MainActivity
- 因此您试图挂钩错误的类。它使用的方法a(String)
与挂钩完全无关。匿名内部类有自己的类名,基于外部类附加$
一个数字。因此,正确的类名可能是sg.vantagepoint.uncrackable1.MainActivity$1
或sg.vantagepoint.uncrackable1.MainActivity$2
,这取决于存在多少其他匿名内部类。
另外类似的事情mClass.a.onClick
是不可能的,因为方法中没有方法(a
是方法并且onClick
是方法)。
最后你可能会得到以下 frida 代码:
Java.perform(function() {
console.log("[*] START...")
var mClass = Java.use("sg.vantagepoint.uncrackable1.MainActivity$1")
mClass.onClick.implementation=function() {
console.log("[*] Clicked ")
}
})
推荐阅读
- python - 在熊猫数据框中创建父子对字典
- batch-file - 使用通配符文件夹批量复制某些文件
- php - 在 jQuery 中使用 post() 生成元素后对元素进行操作
- getuikit - 如何更改 UIkit.notification 的宽度?
- c# - 反转显示字符串的顺序
- wordpress - wp_options 中的 Wordpress cron 值太大
- java - 为什么 Java Web 应用程序是使用 Java SE SDK 开发的
- c# - 如何使用另一种形式的方法?
- semantic-ui - 语义 UI 下拉菜单显示为空
- postgresql - 我无法恢复 pg_dump 备份