如何访问对象的字段

来源:爱站网时间:2021-09-16编辑:网友分享
我能够使用frida挂钩Android应用程序上的方法:Java.perform(function(){var targetClass = Java.use(“ X.0kI”); targetClass.getDoneValue.overload('java.lang.Object') .implementation = ...

问题描述


我能够使用frida挂钩android应用上的方法:

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.successretval.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的结果几乎相同。

我应该如何使用Frida正确访问Java对象的字段?

* EDIT

使用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

解决方法:


强制转换后,使用.value访问成员的值。

console.log(success.value)

上一篇:将图像从PDImageXObject提取到文件中,而不将其加载到内存中

下一篇:将十六进制转换为INT 32并使用STRING Little Endian

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载