如何使用 frida 挂钩方法内部的 onClick 方法
How to hook into onClick method inside a method using frida
我想通过挂钩 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);
}
});
您正在尝试挂钩错误 class - 很可能是因为您使用 Jadx 反编译错误设置并且不了解 Java classes.
如果您使用 Jadx 反编译 APK 文件,请确保 禁用 设置 内联匿名 classes 查看方法所属的真实 class 名称。
方法 onClick()
属于由 new DialogInterface.OnClickListener()
创建的匿名内部 class 而不是 sg.vantagepoint.uncrackable1.MainActivity
- 因此您试图挂钩错误的 class.它所使用的方法 a(String)
与挂钩完全无关。匿名内部 classes 有自己的 class 名称,基于外部 class 附加 $
和一个数字。
因此,正确的 class 名称可能是 sg.vantagepoint.uncrackable1.MainActivity
或 sg.vantagepoint.uncrackable1.MainActivity
,这取决于存在多少其他匿名内部 classes。
此外,像 mClass.a.onClick
这样的东西是不可能的,因为方法内部没有方法(a
是一个方法,onClick
是一个方法)。
最后你可能会得到以下 frida 代码:
Java.perform(function() {
console.log("[*] START...")
var mClass = Java.use("sg.vantagepoint.uncrackable1.MainActivity")
mClass.onClick.implementation=function() {
console.log("[*] Clicked ")
}
})
我想通过挂钩 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);
}
});
您正在尝试挂钩错误 class - 很可能是因为您使用 Jadx 反编译错误设置并且不了解 Java classes.
如果您使用 Jadx 反编译 APK 文件,请确保 禁用 设置 内联匿名 classes 查看方法所属的真实 class 名称。
方法 onClick()
属于由 new DialogInterface.OnClickListener()
创建的匿名内部 class 而不是 sg.vantagepoint.uncrackable1.MainActivity
- 因此您试图挂钩错误的 class.它所使用的方法 a(String)
与挂钩完全无关。匿名内部 classes 有自己的 class 名称,基于外部 class 附加 $
和一个数字。
因此,正确的 class 名称可能是 sg.vantagepoint.uncrackable1.MainActivity
或 sg.vantagepoint.uncrackable1.MainActivity
,这取决于存在多少其他匿名内部 classes。
此外,像 mClass.a.onClick
这样的东西是不可能的,因为方法内部没有方法(a
是一个方法,onClick
是一个方法)。
最后你可能会得到以下 frida 代码:
Java.perform(function() {
console.log("[*] START...")
var mClass = Java.use("sg.vantagepoint.uncrackable1.MainActivity")
mClass.onClick.implementation=function() {
console.log("[*] Clicked ")
}
})