零散逆向代码 → 完整可编译项目 Skill(project-rebuild-skill)
将逆向/反编译过程中得到的零散代码片段(函数片段、伪代码、跨文件碎片、混合语言)系统化重组为结构清晰、可编译运行、依赖关系完整的工程。
能力范围
| 碎片形态 | 重建策略 |
|---|---|
| 多个独立函数片段 | 按职责归类 → 模块/文件 |
| 伪代码(C/Python 混合) | 统一目标语言 → 等价实现 |
| 缺依赖/缺声明的代码 | 推导接口 → 补 stub/头文件 |
| 跨语言(C+ASM/Java+JNI) | 分层隔离 → 桥接封装 |
| 构建系统缺失 | 选型并生成构建配置 |
工作流程(6 阶段)
Stage 1:碎片盘点与分类
| 步骤 | 操作 |
|---|---|
| 1.1 | 收集所有碎片文件,记录来源(哪个二进制/函数) |
| 1.2 | 按语言、模块、依赖关系聚类 |
| 1.3 | 标注置信度(高/中/低)与缺口 |
Stage 2:接口与依赖推导
| 步骤 | 操作 |
|---|---|
| 2.1 | 提取外部调用(库函数、系统 API、未知符号) |
| 2.2 | 推导缺失的函数签名与类型 |
| 2.3 | 绘制模块依赖图 deps.dot |
Stage 3:构建系统选型
| 语言 | 推荐构建 |
|---|---|
| C/C++ | CMake / Make / Bazel |
| Java/Kotlin | Gradle |
| JS/TS | npm / pnpm + vite/tsc |
| Python | pyproject.toml / setup.py |
| 混合 | 分层 + 各自构建 + 桥接 |
Stage 4:骨架搭建
| 步骤 | 操作 | 产出 |
|---|---|---|
| 4.1 | 建立目录结构(src/ include/ lib/ tests/) |
工程骨架 |
| 4.2 | 生成构建配置与入口 | CMakeLists.txt 等 |
| 4.3 | 放置碎片到对应模块 | 模块文件 |
Stage 5:编译纠错迭代
| 步骤 | 操作 |
|---|---|
| 5.1 | 首次编译,收集错误清单 |
| 5.2 | 补齐 stub、修正类型/签名 |
| 5.3 | 循环直至通过编译/链接 |
Stage 6:运行验证与交付
| 产出 | 说明 |
|---|---|
BUILD_REPORT.md |
重建率、缺口、未还原清单 |
stubs/ |
补齐的桩函数/声明 |
| 完整工程 | 可编译/可运行的代码树 |
注意事项
- 合法性:仅用于自有/授权代码的恢复与重建。
- Stub 管理:未知依赖以声明/stub 形式补齐,标注来源避免误当真实实现。
- 行为验证:编译通过 ≠ 行为正确,需用已知输入对比输出。
- 渐进整合:先让最小子集编译通过,再逐步扩大,避免一次性大爆炸。
- 依赖图优先:以真实依赖关系组织代码,而非按逆向碎片原始顺序堆叠。