Я могу подключить метод к приложению android, используя frida:
Java.perform(function () {
var targetClass = Java.use("X.0kI");
targetClass.getDoneValue.overload('java.lang.Object').implementation = function (object) {
var retval = this.getDoneValue(object);
console.log('return: ' + retval);
console.log('return: classname: ' + retval.$className);
console.log('return: success: ' + retval.success);
console.log('return: resultDataBundle: ' + retval.resultDataBundle);
console.log('return: toString(): ' + retval.toString());
};
})
Этот код предоставляет следующий журнал:
return: OperationResult success=true, resultDataString=, resultDataBundle=Bundle[{result=com.testapp.account.recovery.common.protocol.TestMethod$Result@a0a6954, resultType=1}], errorCode=NO_ERROR, errorDescription=, exception=
return: classname: com.testapp.service.OperationResult
return: success: undefined
return: resultDataBundle: undefined
return: toString(): OperationResult success=true, resultDataString=, resultDataBundle=Bundle[{result=com.testapp.account.recovery.common.protocol.TestMethod$Result@a0a6954, resultType=1}], errorCode=NO_ERROR, errorDescription=, exception=
Почему retval.success
и retval.resultDataBundle
являются undefined
несмотря на журнал из первой и последней строк?
Или, может быть, есть другой способ доступа к этим полям?
Я также пытался использовать Java.cast
:
var OperationResult = Java.use('com.testapp.service.OperationResult');
if (retval.$className === 'com.testapp.service.OperationResult') {
var result = Java.cast(retval, OperationResult);
console.log('result: success: ' + result.success);
console.log('result: resultDataBundle: ' + result.resultDataBundle);
}
с журналом:
result: success: [object Object]
result: resultDataBundle: [object Object]
JSON.stringify()
дает {}
вместо [object Object]
Также устал Java.choose()
с почти такими же undefined
результатами.
Как мне правильно получить доступ к Java полям объектов используя Frida?
* РЕДАКТИРОВАТЬ
Описание класса используя Object.getOwnPropertyNames(jClass.__proto__)
:
_name: com.testapp.service.OperationResult
_fields:
public android.os.Bundle com.testapp.service.OperationResult.resultDataBundle
public boolean com.testapp.service.OperationResult.success