我已经和 Frida 玩了几天了,但我无法弄清楚我的要求是否可行。基本上,我想连接到一个函数(在 Android 应用程序上),更改参数的值,然后在更改参数值的情况下执行原始函数。到目前为止,我能够连接到函数,并打印 arg 的值;但我无法改变他们的值(value)观。
例如,我的 Java 函数如下所示:
public void myFunction(Sometype foo) {
...
}
Sometype
是一个接口(interface),它提供了一些方法来访问值(例如 getA(), getB()
)。
这是我用来连接函数的 Frida JS 脚本:
setImmediate(function () {
console.log("[*] Starting script");
// Call:
// frida -U -l scripts/myscript.js com.somepackage
Java.perform(function () {
var target = Java.use("com.somepackage.clazz");
target.myFunction.implementation = function(var1) {
// print: getA()
console.log("a:" + var1.a());
// print: getB()
console.log("b:" + var1.b());
// I tried this, but it didn't work.
var1.a = function () {
return "xxx";
}
// print: getA() again, but got the same value as before
console.log("a:" + var1.a());
this.onMessageReceived(var1);
}
});
});
最佳答案
假设“a”是返回String
的方法,试试下面的代码:
function Main() {
Java.use("com.somepackage.clazz").a.overload("java.lang.String").implementation = function(s) {
return "xxx";
};
Java.use("com.somepackage.clazz").myFunction.implementation = function(var1) {
/// ...
this.onMessageReceived(var1);
};
}
Java.perform(Main);
关于android - 是否可以在 Frida 中更改钩子(Hook)函数的参数并转发它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51501774/