工具
darter Dart 快照解析器
用于解析二进制 Dart VM 快照(例如 Flutter 发布版应用中的 libapp.so)的 Python 模块,可把快照内容还原为带反向引用、便于浏览的 VM 对象图,连同快照中转储的内存结构一并解析。它支持旧式、AppJIT 和 AppAOT 三类快照,通常能从快照本身自动识别编译标志和设置,可从 app.so 或 .snapshot 文件中自动提取快照数据块;其 darter.asm 模块借助 Capstone 反汇编 ARM 和 ARM64 代码,查找其中对 VM 对象的引用。README 列举的用法包括提取应用的字符串表、查找某个对象在何处被使用、生成调用图和库依赖图、为 Radare2 导出元数据,以及与参考快照比对来对快照去混淆。
- 目标
- 应用 · 二进制
- 类别
- Android 工具
- 关联
- 基础工具
- 来源复核于
使用条件与局限
- README 警告该项目已经过时,由较新版本 Dart 或 Flutter 生成的快照很可能无法正确解析。解析器依据 Dart SDK 提交 1ef83b86ae 编写,info/versions.md 称唯一受支持的快照哈希为 c8562f0ee0ebc38ba217c7955956d1cb,其 Flutter 版本表显示它对应 2019 年发布的 v1.9.1+hotfix.2 至 v1.9.1+hotfix.6。解析器代码最后一次修改是在 2021 年;所审阅的 2026-02-03 master 提交只扩充了该版本表(现已列到 Flutter 3.38.9),仓库也没有发行版或标签。
- darter 是一个库,没有独立程序或命令行界面;README 推荐在 Jupyter 中使用,先看 1-introduction,再看 2-playground 两个笔记本。大部分代码没有外部依赖,但 parse_elf_snapshot 需要 pyelftools,darter.asm 需要 Capstone 及其 Python 绑定;仓库未注明 Python 版本,也没有软件包元数据。
- README 称只在 ARM 和 ARM64 的 AppAOT 产品快照上做过大量测试,在 x64 的 AppJIT 发布快照上做过少量测试,反汇编分析也只支持 ARM 和 ARM64。不支持 .dill 等 Kernel AST 快照。README 建议先用自己构建的快照练习,再分析其他快照;要研究的 libapp.so 或快照需由用户自备。
- samples/ 目录提交了 arm-app.so 和 arm64-app.so,入门笔记本称它们是默认 Flutter 应用的构建产物;笔记本中用于演示 AppJIT 输入的 samples/appjit.snapshot 并未提交。utils/ 目录提供 Radare2 元数据生成器和导入文件生成器,以及一个 Node 脚本:它通过本地 HTTPS 代理模拟过去某一日期的 pub 包仓库,为此使用仓库中提交的自签名 CA 以及 pub.dartlang.org 证书和私钥,该证书已于 2022 年过期。
- 采用 AGPL-3.0 许可。本条目未解析任何快照,所审来源也未确立与 REA 的关联。
关于此条目
说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。
一手来源
- README.md GitHub · mildsunrise/darter · 修订 a649878
- info/versions.md GitHub · mildsunrise/darter · 修订 a649878
- 1-introduction.ipynb GitHub · mildsunrise/darter · 修订 a649878
- 2-playground.ipynb GitHub · mildsunrise/darter · 修订 a649878
- darter/file.py GitHub · mildsunrise/darter · 修订 a649878
- samples GitHub · mildsunrise/darter · 修订 a649878
- utils/timemachine_pub.js GitHub · mildsunrise/darter · 修订 a649878
- LICENSE GitHub · mildsunrise/darter · 修订 a649878