Sandler73/RE-Toolkit
GitHub: Sandler73/RE-Toolkit
面向 Kali/Debian 的逆向工程工作站配置器与自动化二进制分析流水线,一键搭建工具链并对二进制文件执行多阶段静态与动态分析,生成结构化报告。
Stars: 1 | Forks: 0
# RE-Toolkit
**适用于 Debian 和 Kali Linux 的逆向工程工作站配置器与二进制分析流水线。**
[](https://github.com/Sandler73/RE-Toolkit/actions/workflows/ci.yml)
[](https://github.com/Sandler73/RE-Toolkit/actions/workflows/codeql.yml)
[](https://github.com/Sandler73/RE-Toolkit/releases)
[](https://github.com/Sandler73/RE-Toolkit/commits/main)
[](https://github.com/Sandler73/RE-Toolkit/issues)
[](LICENSE)
[](CHANGELOG.md)
[](https://github.com/Sandler73/RE-Toolkit/wiki/Stage-Reference)
[](#supported-target-types)
[](tests/)
[](https://www.gnu.org/software/bash/)
[](https://www.python.org/downloads/)
[](#requirements)
[](tools/check-no-emdash.py)
[快速开始](#quick-start) - [安装说明](#installation) - [用法](https://github.com/Sandler73/RE-Toolkit/wiki/Usage) - [架构](https://github.com/Sandler73/RE-Toolkit/wiki/Architecture-and-Design) - [阶段参考](https://github.com/Sandler73/RE-Toolkit/wiki/Stage-Reference) - [Wiki](https://github.com/Sandler73/RE-Toolkit/wiki)
## 概述
RE-Toolkit 由协同工作的两部分组成。`install-retoolkit.sh` 负责配置完整的静态和动态分析环境:反汇编器、反编译器、格式解析器、反混淆器、签名扫描器以及它们所依赖的 Python 技术栈。然后,`analyze-binaries.sh` 会驱动这些工具,让目标文件经过一系列适合其类型的分析阶段,并生成结构化的 JSON 以及一个自包含的 HTML 报告。
其设计目标是无需人工干预即可实现深度分析。只需将分析器指向一个文件或目录树,它就会检测每个目标的类型,选择适用的阶段,在每个工具最有用的设置下运行它们,准确记录运行的内容,并将结果综合为一个可解释的结论。
## 浏览概览
| | |
| --- | --- |
| 版本 | 3.7.3 |
| 许可证 | MIT |
| 平台 | Kali Rolling 2024+, Debian 12+ |
| 分析阶段 | 46 |
| 库模块 | 7 |
| 检测到的目标类型 | 13 种主要类型,外加 Go 和 Rust 运行时子分类 |
| 分析器选项 | 90 |
| 安装器选项 | 24 |
| 安装器层级 | 0 到 12 层,每层均可独立跳过 |
| 动态分析层级 | 4 个,从模拟到完整的沙箱引爆 |
| 测试 | 167(62 个 bats,105 个 pytest) |
| 输出 | `_summary.json`,自包含的 `_report.html`,全局运行的 `index.html` |
## 目录
- [概述](#overview)
- [浏览概览](#at-a-glance)
- [为什么选择 RE-Toolkit](#why-RE-Toolkit)
- [工作原理](#how-it-works)
- [环境要求](#requirements)
- [安装说明](#installation)
- [快速开始](#quick-start)
- [输出](#output)
- [支持的目标类型](#supported-target-types)
- [动态分析](#dynamic-analysis)
- [安全模型](#safety-model)
- [文档](#documentation)
- [测试](#testing)
- [贡献指南](#contributing)
- [安全性](#security)
- [许可证](#license)
## 为什么选择 RE-Toolkit
逆向工程工具往往非常分散。读取 PE 节表的解析器与反编译 .NET 的并不是同一个,而它们两者都不能验证 Authenticode 链或提取内嵌的 AES 密钥。手动组装这套工具链很慢,而在全新的虚拟机上重新组装则更慢。
RE-Toolkit 解决了三个具体问题:
**配置具有可复现性。** 安装器是分层且幂等的。它优先使用系统发行版软件包,仅在工具确实没有被打包时才回退到官方安装器,并准确报告哪些组件解析成功,哪些没有。重新运行它是安全的。
**默认覆盖面广。** 单次运行即可应用结构解析、字符串和能力提取、来自多个独立引擎的反汇编、反编译、反混淆、签名和 IOC 分析以及加密材料恢复,并根据检测到的文件类型选择适用的子集。
**结果可解释。** 调查结果并不是不透明的分数。每一个对目标严重程度有贡献的信号都被记录为一个包含权重和支持性证据的命名元组,因此结论可以追溯到产生它的具体观察结果。
## 工作原理
```
flowchart LR
A[Target file or tree] --> B[Sandbox copy]
B --> C[Type detection]
C --> D[Stage dispatch]
D --> E[Static stages]
D --> F[Dynamic stages]
E --> G[Summary synthesis]
F --> G
G --> H[Visualization]
H --> I[HTML report and JSON]
```
在任何工具接触目标之前,分析器会先将每个目标复制到一个单次运行的沙箱目录中,检测文件类型,并分发到适用的阶段。静态阶段总是首先运行,并产生字符串、导入、签名和指标,供动态阶段稍后进行交叉引用。摘要合成会消耗所有上游结果,可视化会消耗摘要,而报告渲染则消耗前两者。
关于详细的处理方式,包括完整的阶段路由矩阵以及阶段编号为何与执行顺序不同的原因,请参阅 [架构与设计](../../wiki/Architecture-and-Design) Wiki 页面。
## 环境要求
- Kali Rolling 2024 或更高版本,或者 Debian 12 或更高版本
- `sudo` 权限,因为安装器按照设计会执行系统级安装
- 包含 Ghidra 的完整安装大约需要 20 GB 的可用磁盘空间
- 安装过程中需要网络连接
分析器本身在离线状态下运行。只有安装器需要网络访问。
## 安装说明
```
git clone https://github.com/Sandler73/RE-Toolkit.git
cd RE-Toolkit
sudo ./install-retoolkit.sh
```
安装器分层进行配置,每一层都可以独立跳过。
它将各阶段的日志写入 `/var/log/retoolkit/`,因此不会有任何失败被静默吞没,并且它会在完成时打印一个 PASS/FAIL(通过/失败)验证表。
常见用法:
```
# 验证现有安装而不进行任何更改
sudo ./install-retoolkit.sh --verify
# 仅安装 dependencies,适用于有自己的 analyzer checkout 的环境
sudo ./install-retoolkit.sh --skip-source
# 跳过 Ghidra 下载,例如在使用 private build 时
sudo ./install-retoolkit.sh --skip-ghidra
# 所有内容,包括 opt-in tiers
sudo ./install-retoolkit.sh --with-docker --with-retdec --with-redress \
--with-rustfilt --with-findaes --with-yargen-db --with-cwe-checker
```
关于逐层的完整详细信息,包括每一层安装的内容以及如何从部分安装中恢复,请参阅 [安装说明](../../wiki/Installation) Wiki 页面。
## 快速开始
分析单个二进制文件:
```
analyze-binaries.sh -t suspicious.exe -o ./out
```
分析目录树:
```
analyze-binaries.sh -t ./samples -o ./out --preserve-tree
```
打开结果:
```
xdg-open ./out/index.html
```
有用的选项:
```
# 使用 parallel targets 加速大批量任务
analyze-binaries.sh -t ./samples -o ./out -j 4
# 在快速 triage 时跳过最慢的阶段
analyze-binaries.sh -t target.exe -o ./out --no-ghidra
# 为大型或高度混淆的 target 提高 per-tool timeout
analyze-binaries.sh -t target.exe -o ./out --tool-timeout 600
# 将 target 与 known-good reference 进行比较
analyze-binaries.sh -t patched.exe -o ./out --diff-against original.exe
```
每个选项都在 [用法](../../wiki/Usage) 和 [配置](../../wiki/Configuration) Wiki 页面中进行了说明。
## 输出
每个目标在输出根目录下都有自己独立的目录,其中包含以产生它们的阶段命名的逐阶段子目录:
```
out/
├── index.html Codebase-wide index across all targets
├── _run.json Run metadata and toolchain versions
└── target.exe/
├── _input/ Sandboxed copy of the original target
├── 00-triage/ Identity, hashes, entropy, signatures
├── 10-pe/ PE structure
├── 20-dotnet/ .NET disassembly and decompilation
├── 30-ghidra/ Ghidra headless dump
├── 80-iocs/ Extracted and classified indicators
├── 89-viz/ Inline SVG visualizations
├── _summary.json Structured findings, the source of truth
├── _verdict.txt One-line human-readable verdict
└── _report.html Self-contained tabbed HTML report
```
`_summary.json` 是权威的产出物。HTML 报告是它的渲染结果,报告和可视化内容都是自包含的:内联 SVG,没有外部 CDN 引用,没有 JavaScript 库依赖,在查看时也不需要获取网络资源。
严重程度是通过加权信号计算的,而不是简单的累加。每个贡献信号都带有名称、权重及其支持性证据:
| 区间 | 分数 |
| --- | --- |
| Critical(严重) | 100 及以上 |
| High(高) | 60 到 99 |
| Medium(中) | 30 到 59 |
| Low(低) | 10 到 29 |
| Informational(信息) | 10 以下 |
[输出与报告](../../wiki/Output-and-Reports) Wiki 页面记录了完整的 `_summary.json` schema 和报告结构。
## 支持的目标类型
类型检测是有序进行的,以便更具体的签名优先匹配。例如,UPX 壳的 PE 文件会在匹配通用 PE 签名之前被识别为已加壳。
| 类型 | 检测为 | 代表性处理方式 |
| --- | --- | --- |
| Native PE | `pe-native` | 结构、导入、加固、反汇编 |
| .NET PE | `pe-dotnet` | IL 反汇编、反编译、反混淆 |
| ELF | `elf` | 节区、符号、加固姿态、DWARF |
| Mach-O | `macho` | 段、加载命令、反汇编 |
| WebAssembly | `wasm` | 验证、反汇编、反编译 |
| Python 字节码 | `pyc` | 多反编译器恢复 |
| Java 归档 | `jar` | 归档列表和反编译 |
| PDF | `pdf` | 结构和活动内容分析 |
| OLE 和 OOXML | `ole` | 宏提取和行为分析 |
| Android 包 | `apk` | 资源解码、清单、签名 |
| Dalvik 可执行文件 | `dex` | 通过多个引擎进行反编译 |
| UPX 壳 | `upx-packed` | 解包,然后重新分析解包后的镜像 |
| 配置和 XML | `config-xml` | 结构检查 |
Go 和 Rust 被检测为运行时子分类,它们与主要类型组合而不是替换它,因此 Go 编写的 ELF 文件将同时接受 ELF 阶段和特定于 Go 的处理。
## 动态分析
动态分析需通过 `--dynamic` 选项开启,它永远不会取代静态分析;而是在其基础上增加基于执行的阶段。共有四个层级可用,其保真度和风险均依次递增:
| 层级 | 机制 | 真实执行 | 门控 |
| --- | --- | --- | --- |
| 1 | 基于 Unicorn 的 qiling 模拟 | 否 | 始终可用 |
| 2 | firejail namespace 沙箱 | 是 | `--allow-real-execution`,仅限 ELF |
| 3 | Docker container | 是 | `--allow-real-execution`,需构建镜像 |
| 4 | cuckoo 沙箱 | 是 | `--allow-real-execution`,需配置 |
层级 1 不需要额外权限,因为没有发生真实执行:它是基于 Unicorn 引擎的纯 CPython 模拟器,没有任何 syscall 会到达宿主机内核。层级 2 到 4 会执行目标,因此需要显式的 `--allow-real-execution` 标志。如果仅使用 `--dynamic`,RE-Toolkit 会运行所有适用且可用的层级,并为其他层级记录明确的跳过原因。
在启用高于 1 的任何层级之前,请先阅读 [动态分析](../../wiki/Dynamic-Analysis)。
## 安全模型
RE-Toolkit 旨在分析具有敌意的输入,因此该流水线建立在假定目标具有恶意的基础之上。
- **原文件绝不会被触及。** 每个目标都会被复制到单次运行的沙箱目录中,每个阶段都在该副本上进行操作。运行结束后,会重新验证原文件的 SHA-256,以证明没有任何内容对它进行了篡改。
- **刻意排除破坏性的工具标志。** 如果某个工具提供了会修改其输入的选项,调用时将忽略该选项,并且原因会记录在调用处的源代码中。
- **工具执行是有界限的。** 每个工具都在超时限制下运行,因此具有敌意或格式错误的输入不会导致运行无限期挂起。
- **静态分析不执行目标。** 默认路径中没有任何环节会运行二进制文件。真实的执行仅发生在动态层级 2 到 4 中,并且必须显式启用标志。
[安全模型](../../wiki/Security-Model) Wiki 页面全面涵盖了信任边界。在报告漏洞之前,也请阅读 [SECURITY.md](SECURITY.md)。
## 文档
参考文档位于项目 Wiki 中:
| 页面 | 内容 |
| --- | --- |
| [主页](../../wiki/Home) | Wiki 索引和导览 |
| [安装说明](../../wiki/Installation) | 逐层安装和恢复 |
| [用法](../../wiki/Usage) | 所有选项及操作示例 |
| [架构与设计](../../wiki/Architecture-and-Design) | 组件模型、数据流、图表 |
| [阶段参考](../../wiki/Stage-Reference) | 全部 46 个阶段的详细介绍 |
| [配置](../../wiki/Configuration) | 环境变量和跳过控制 |
| [输出与报告](../../wiki/Output-and-Reports) | 输出目录树、JSON schema、报告 |
| [动态分析](../../wiki/Dynamic-Analysis) | 层级模型和风险指南 |
| [安全模型](../../wiki/Security-Model) | 信任边界和威胁模型 |
| [故障排除](../../wiki/Troubleshooting) | 症状、原因、解决方法 |
| [常见问题](../../wiki/FAQ) | 常见问题解答 |
| [开发指南](../../wiki/Development) |添加阶段和工具 |
发布历史记录在 [CHANGELOG.md](CHANGELOG.md) 中。各版本的详细信息都在那里,并且刻意没有在源文件头或 Wiki 中重复。
## 测试
```
# Shell test suite
bats tests/bats
# Python test suite
python3 -m pytest tests/python -v
# Static analysis
shellcheck analyze-binaries.sh install-retoolkit.sh lib/*.sh stages/static/*.sh
```
持续集成系统会在每次推送和拉取请求时运行 shell linting、shell 格式检查、Python linting、两个测试套件以及一个全仓库范围的 em-dash(破折号)防护检查。完整的门控列表请参阅 [开发指南](../../wiki/Development)。
## 安全性
RE-Toolkit 是一款双用途(军民两用)软件。它的构建目的是为了进行防御性分析、恶意软件研究以及针对您经授权检查的软件的安全评估。请勿将其用于您未经授权分析的系统或二进制文件。
要报告 RE-Toolkit 本身的漏洞,请遵循 [SECURITY.md](SECURITY.md) 中的流程。请勿针对安全报告开启公开的 issue。
## 许可证
MIT,附带补充条款。请参阅 [LICENSE](LICENSE)。
MIT 授权涵盖了 RE-Toolkit 自身的源代码。补充章节涵盖了双用途分析工具需要明确说明的内容:
- **按原样使用并承担风险。** 本软件在设计上会处理具有敌意的输入,并在明确启用时执行它们。您需承担此风险。
- **无担保。** 包括不对任何结论、分数、指标或报告的正确性提供担保,也不保证能够检测到威胁或避免误报和漏报。
- **责任限制。** 包括对于在本软件或正在分析的样本所在的系统上发生的任何事件的责任限制。
- **赔偿。** 涵盖未经授权的使用和违反第三方许可条款的行为。
- **第三方软件。** RE-Toolkit 仅编排众多工具,并不提供任何工具的供应。每个工具仍受其自身许可证的约束,其中几项与 MIT 存在实质性差异。审查它们是您的责任。
- **双用途和授权使用。** 本授权仅为版权许可。它不传达访问或分析属于其他任何人的任何内容的授权。标签:DAST, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 应用安全, 恶意软件分析, 自动化分析, 请求拦截, 跨站脚本, 逆向工具, 逆向工程, 静态分析