是否可以在Frida中更改挂钩函数的参数并转发它们?

时间:2018-07-24 14:56:27

标签: android android-instrumentation frida

我已经和Frida玩了几天,但是我无法弄清楚我的要求是否可行。基本上,我想连接一个函数(在Android应用程序上),更改参数的值,然后在更改参数值的情况下执行原始功能。到目前为止,我已经能够连接到函数,并打印arg的值;但我无法更改其值。

例如,我的Java函数如下所示:

public void myFunction(Sometype foo) {
    ...
}

Sometype是一个接口,提供了几种访问值的方法(例如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);
            }

        });        
    });

1 个答案:

答案 0 :(得分:1)

假设“ 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);