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