MachineCase/blutter-macos

GitHub: MachineCase/blutter-macos

该项目提供补丁和脚本,使 Dart AOT 逆向工具 blutter 能够支持分析 macOS 独立编译的 Dart 二进制文件。

Stars: 2 | Forks: 0

# blutter-macos 用于在 macOS 独立 Dart AOT 二进制文件(`dart compile exe`)上运行 [blutter](https://github.com/worawit/blutter) 的补丁和脚本。 Blutter 支持 Android `libapp.so` 和 iOS `App.framework`。本项目将其扩展至 macOS 独立程序,在这种情况下,snapshot 作为 `LC_NOTE` 嵌入在外部二进制文件中,而不是在单独的文件中。 参见详细说明:[machinecase.github.io/posts/dart-reverse-macos](https://machinecase.github.io/posts/dart-reverse-macos/) ## 工作原理 `dart compile exe` 会生成一个单一的 Mach-O 文件,其中包含 Dart VM runtime(你在 Binary Ninja 中看到的内容)和编译好的 app snapshot(你想要分析的内容),后者作为不透明数据嵌入在名为 `__dart_app_snap` 的 `LC_NOTE` 中。 这些脚本会提取内部的 Mach-O,并将其封装在一个合成的 ELF 中,以便 blutter 可以使用其现有的 ELF 代码路径进行解析。 ## 用法 ``` # 1. 提取内部 Mach-O 并创建 ELF 包装器 python3 scripts/extract_snapshot.py ./binary /tmp/analysis/ # 2. 对 blutter 应用补丁 cd /path/to/blutter git apply /path/to/blutter-macos/patches/macos_standalone_aot.patch # 3. 运行 blutter python3 blutter.py \ /tmp/analysis/dart_snapshot.so \ /tmp/analysis/blutter_out \ --dart-version 3.11.4_macos_arm64 # 4. 甄别 grep "String:" /tmp/analysis/blutter_out/pp.txt | grep -v "dart:" # 5. 将符号导入 Binary Ninja # 打开 inner.macho,然后在 Python Console 中: exec(open('scripts/import_symbols_bn.py').read()) ``` ## 补丁 blutter 中有四个文件需要修改: - `scripts/CMakeLists.txt` — 将 `macos` 添加为有效的 `TARGET_OS` 并附带正确的定义 - `dartvm_fetch_build.py` — macOS 独立程序使用 `no-compressed-pointers` - `blutter/src/ElfHelper.cpp` — 在 Mach-O 路径之前检测 ELF magic,修复 `MH_MAGIC_64` 情况,并取消 `mach_o.h` include 的注释 - `blutter/src/Disassembler_arm64.h` — 将 `CSREG_DART_HEAP` 移至 `#ifdef DART_COMPRESSED_POINTERS` 外部 ## 测试环境 Dart 3.11.4,macOS ARM64 (Apple Silicon)。 ## 鸣谢 - [worawit/blutter](https://github.com/worawit/blutter) 原始工具 - [@m4xfr0m](https://twitter.com/m4xfr0m)
标签:Bash脚本, Binary Ninja, Dart, Mach-O, Python, 二进制分析, 云安全运维, 无后门, 逆向分析, 逆向工具