Skip to content

🗑️ HeapDump

Dalvik Java 堆快照工具,封装 android.os.Debug.dumpHprofData,将目标进程的 Java 堆以 HPROF 格式写入文件,供 MAT 等工具离线分析。

属性
源码路径HeapDump.java
类型静态工具类
所在包com.android.reverse.collecter
关键依赖android.os.Debug

🎯 职责

HeapDump 是一个极简的静态工具类,只做一件事:调用 Android 标准 API Debug.dumpHprofData(filename) 将当前进程的 Java 堆内存快照写到指定文件路径。

在 ZjDroid 的逆向场景中,这一能力用于:

  • 分析目标应用在特定时刻的对象分布,寻找解密后的字符串或密钥。
  • 配合 MAT(Memory Analyzer Tool)追踪内存中残存的敏感数据。

🔍 关键字段与方法

成员类型说明
dumpHeap(String filename)public static void将 Java 堆以 HPROF 格式写入 filename 指定的路径

🧠 关键实现

java
public static void dumpHeap(String filename) {
    try {
        Debug.dumpHprofData(filename);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

整个类仅有这一个方法,逻辑几乎完全委托给 android.os.Debug

Debug.dumpHprofData 原理

Debug.dumpHprofData 会暂停 GC,遍历 Dalvik/ART 堆中所有存活对象,以 HPROF 格式 写出。HPROF 是 Java 堆快照的标准二进制格式,可被 Eclipse MAT、Android Studio Profiler、jhat 等工具解析。

写入权限

filename 必须是目标进程有写权限的路径,通常选用 /sdcard/(需 WRITE_EXTERNAL_STORAGE)或应用私有目录(如 /data/data/<pkgname>/)。

调用链追踪

HeapDump.dumpHeap 在命令层由 DumpHeapCommandHandler 触发,命令格式为:

adb shell am broadcast -a com.android.reverse.action \
  --es cmd dumpHeap --es path /sdcard/target.hprof

🔗 调用关系

📌 小结

HeapDump 以最少的代码实现了 Java 堆采集能力。其价值在于运行在目标进程内(通过 Xposed 注入),因此可以访问所有对象,包括加密壳已在内存中展开的明文数据。

进一步阅读

基于 MIT 协议发布 · 本文档仅用于安全研究与教学目的