逆向目标路由法(Reverse Target Routing)
> Adapted from morluto/rea (reverse-engineer-anything) by morluto (MIT). 等价改编:剥离上游 MCP 工具依赖,重写为工具无关的路由纪律,可配任意本地工具链使用。
核心纪律:先路由,后动手
逆向最常见的浪费不是工具不行,而是路径选错:拿到 APK 就上反编译器、拿到压缩包就全文搜索。本技能要求第一步永远是把目标归类,再从该类别的最低成本路径开始。
第一步:目标路由表
按目标形态选择入口路径(每条路径从上到下按成本递增):
| 目标形态 | 首选路径 | 可用工具(本机可及) |
|---|---|---|
| 压缩/打包格式(ZIP/APK/IPA/MSIX/DMG/ASAR) | 先做成员清单,不急着解包 | Python zipfile/tarfile,7z l |
| Electron/JavaScript 应用 | 定位 ASAR → 解包后读 JS/JSON 资源 | npx asar extract 或 Python asar 解析 |
| Android APK | 清单 → dex/资源分层看,先 strings 后反编译 | aapt dump、strings、jadx(如有) |
| Windows PE / .NET 程序集 | 元数据优先:版本、依赖、资源、字符串表 | Python pefile、strings |
| 固件镜像 | 找文件系统魔数与分区边界,再提取 | binwalk(如有)、Python 魔数扫描 |
| WebAssembly (.wasm) | 保留原始字节指纹,解码 WAT 后读导出表 | wasm2wat(WABT,如有) |
| 浏览器页面(自有) | 读 DOM/网络面板,不注入目标 | DevTools、HAR 导出 |
| 抓包记录(HAR/pcap,离线) | 只读历史记录,不重放请求 | Python json(HAR 即 JSON) |
| 原生 ELF/机器码 | 布局→符号→重定位→反编译,逐级深入 | readelf、objdump、Ghidra/IDA(如有) |
路由原则:
1. 清单类操作(list/inventory)永远先于内容类操作(decompile/extract)。
2. 能用文本层证据(strings、JSON、清单)回答的问题,不进反编译层。
3. 上表找不到的目标 → 停下来问「这是什么分发格式」,而不是直接猜工具。
第二步:证据纪律(Evidence Discipline)
- 保留原始指纹:分析前记录文件的 SHA-256 与大小;所有结论可回溯到具体字节范围或记录序号。
- 区分事实与推断:字符串、导入表、清单字段是事实;函数意图、协议语义是推断。输出时明确标注。
- 不做隐式取数:不因看到 URL 就去访问它;不因看到域名就声称归属。历史记录只证明「记录中存在」。
- 版本对比先对齐基线:比较两个版本时,先建立相同提取流程,再 diff 结果;流程不同则 diff 无意义。
第三步:边界与安全
- 只分析你有权分析的目标;不运行来路不明的可执行体——静态分析优先。
- 工具链缺失时降级而非放弃:没有反编译器时,strings + 清单 + 资源提取仍可回答大量问题。
- 明确输出覆盖度:说明「看了什么、没看什么、结论置信度」,不假装全知。
输出格式约定
每次分析按四段输出:
1. 目标:文件/包的指纹与形态判断
2. 路由:选了哪条路径、为什么、跳过了什么
3. 发现:事实列表(带证据位置)+ 推断列表(带依据)
4. 局限:未覆盖区域与后续建议路径
适用与不适用
- ✅ 适用:解释闭源软件某功能如何实现、比较发布版本差异、分析包体组成、固件成分盘点、为重建提供依据。
- ❌ 不适用:手头已有完整源码的常规架构分析——那是普通代码阅读,不需要路由纪律。