android - 是否可以在 Frida 中更改钩子(Hook)函数的参数并转发它们?

标签 android android-instrumentation frida

我已经和 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/

相关文章:

android - 如何在安卓模拟器上安装应用程序?

java - 如何使用 Soot 在 APK 中创建和添加 Java 类?

android - 在没有客户端的情况下在 system_server 上运行 Frida Hook

java - 如何使用上下文作为参数获取函数的返回值?

android - Frida 生成过程在 Android 上失败

java - 必须选择好接口(interface)名称

android - 英雄动画上的 RenderFlex 溢出 - Flutter

android - 当Android MediaPlayer进入错误循环: error(-38, 0)时如何优雅地恢复

android - 使用 startInstrumentation() 启动 Instrumentation 时 UiDevice.getInstance(getInstrumentation()) 崩溃(作为空对象引用)

android - 如何使用 espresso 测试用例库单击工具栏中的菜单选项