【问题标题】:How to read memory on the heap with Frida?如何使用 Frida 读取堆上的内存?
【发布时间】:2019-01-31 22:17:04
【问题描述】:

我尝试使用 Frida 和位于 Android 虚拟设备(模拟)上的服务器读取堆上的内存,但我一直收到内存 access violation 错误。

首先我正在寻找一个有趣的类的实例:

Java.performNow(function() {
    Java.choose("com.example.model.interestingObject", {
        onMatch: function(instance) {
            console.log(instance.toString());                   
        }, onComplete: function() {
        }
    });
});

作为输出,我得到(我想)内存中的地址: com.example.model.interestingObject@d735e35

但是当我尝试从该地址读取时: Memory.readByteArray(ptr("0xd735e35"), 64); 然后我收到以下错误:

Error: access violation accessing 0xd735e35
    at frida/runtime/core.js:282
    at /repl18.js:26

问题是,我如何从该地址读取字节?我对弗里达很陌生,所以可能做错了什么。很高兴得到任何帮助!

【问题讨论】:

    标签: android frida


    【解决方案1】:

    我想你只需要转换你找到的实例@onMatch

    Java.cast(instance,Java.use("com.example.model.interestingObject")).toString()

    docs 的其他一切都很好;

    • Java.choose(className, callbacks):通过扫描 Java 堆枚举 className 类的活动实例,其中 callbacks 是一个指定对象:

      • onMatch: function (instance): 为每个使用现成实例找到的活动实例调用一次,就像您使用该特定实例的原始句柄调用 Java.cast() 一样。 该函数可能会返回字符串 stop 以提前取消枚举。

      • onComplete: function(): 枚举完所有实例后调用

    要打印班级成员,您可以使用Object.getOwnPropertyNames(obj.__proto__).join('\n\t')

    【讨论】:

    • 运行你的解决方案我有同样的结果。仍然不知道如何读取堆内存...
    • 请附上描述问题的截图,我相信我能解决它
    • 我的代码有一个screenshot。我知道我现在可以读取 obj 属性,但由于我的代码可见性有限(我在应用程序上执行 RE),所以我希望我能找到更多存储在内存中的数据。
    • 如果interestingObject 类实现了toString,只需使用console.log(obj),除非只打印它的每个成员.. 像普通的toString 一样
    • 打印班级成员,您可以使用Object.getOwnPropertyNames(obj.__proto__).join('\n\t')
    【解决方案2】:

    查看Java函数Object.toString()可以看到d735e35的值不是地址而是对象的哈希码:

    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
    

    因此,您正在查看错误的内存地址,从而导致您观察到 access violation

    一般而言,对于 Java/Android,您永远不应该尝试直接访问内存。请改用 Frida 的可用函数来列出所有字段及其值。

    【讨论】:

      猜你喜欢
      • 2022-12-11
      • 2023-03-07
      • 1970-01-01
      • 2018-07-06
      • 2022-07-23
      • 2021-09-15
      • 2017-12-21
      • 2020-02-10
      • 2021-01-17
      相关资源
      最近更新 更多