Можно ли изменить аргументы подключенной функции в 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 ответ

Предполагая, что "а" является методом, который возвращает 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);
Другие вопросы по тегам