工具
Doldrums Flutter/Dart 快照解析器
用 Python 编写的解析器,处理 Android Flutter 应用中存放编译后 Dart 代码的 libapp.so 里的 Dart AOT 快照。它借助 pyelftools 定位 VM 与 isolate 快照符号,反序列化快照中的各个簇(cluster),并把 isolate 快照中的全部类导出为文本,列出字段、方法签名以及每个方法在 libapp.so 中的绝对代码偏移。它恢复的是声明和偏移,供进一步反汇编使用,并不反编译函数体。
- 目标
- 应用 · 二进制
- 类别
- Android 工具
- 关联
- 基础工具
- 来源复核于
使用条件与局限
- 审阅对象为 main 分支提交 7430196(2022-05-01),也是最后一次推送;仓库没有发行版,README 称该工具仍处于 beta 阶段,尚缺部分反序列化例程和类信息。main.py 只接受 Dart 2.10 和 Dart 2.12 的快照哈希,把 Dart 2.13 视为开发中而拒绝,其他 SDK 一律视为不支持,因此用更新的 Dart 版本构建的应用不在其适用范围内。
- 输入为用户有权分析的 Android Flutter 应用的 libapp.so ELF 文件,其中须带有 _kDartVmSnapshot* 与 _kDartIsolateSnapshot* 符号。tests 目录提交了一个小型示例计数器应用(包名 sandbox_flutter)的 Dart 2.10 libapp.so 构建,涵盖 arm64-v8a、armv7 和 x64,并附有 arm64 与 x64 构建的文本导出作为参考输出;仓库没有测试运行脚本。
- 运行方式为 python3 src/main.py [-v] libapp.so output,唯一依赖是 pyelftools;项目没有打包,也未声明 Python 版本。README 说明 verbose 选项只适用于 Dart 2.12 快照,并指出 darter 是针对更早的 Dart 2.5 且经过完整测试的解析器。
- 作者的博客文章记录了该解析器所依据的快照格式。仓库没有许可证文件,GitHub 也未识别出许可证,因此复用条款未予说明。本次审阅未运行任何程序,也未分析任何应用。
关于此条目
说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。
一手来源
- README.md GitHub · rscloura/Doldrums · 修订 7430196
- src/main.py GitHub · rscloura/Doldrums · 修订 7430196
- src/BaseConstants.py GitHub · rscloura/Doldrums · 修订 7430196
- src/v2_12/Snapshot.py GitHub · rscloura/Doldrums · 修订 7430196
- src/v2_12/Resolver.py GitHub · rscloura/Doldrums · 修订 7430196
- tests GitHub · rscloura/Doldrums · 修订 7430196
- https://rloura.wordpress.com/2020/12/04/reversing-flutter-for-android-wip/