Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
retrokit — 用于逆向工程32位DOS和Win32游戏(1993-2010)的无头Ghidra工具包:自有LE/LX加载器、Watcom调用约定、库签名、MCP服务器 | Kitploit
工具/GitHubGitHub/nemo22/retrokit
静态分析逆向工程脚本与自动化恶意软件分析实用工具与框架二进制分析AI 辅助逆向AI 安全
GitHubnemo22/retrokit

retrokit

用于逆向工程32位DOS和Win32游戏(1993-2010)的无头Ghidra工具包:自有LE/LX加载器、Watcom调用约定、库签名、MCP服务器

查看仓库
16161天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

retro-kit – 逆向工程老游戏(无头 Ghidra)

Ghidra 单独使用 vs retro-kit:通过 COM 虚表调用 DirectDraw

一个使用无头 Ghidra 反编译大约 1993–2010 年间 32 位游戏的工具包:

  • DOS LE/LX(DOS/4GW、DOS/32A、PMODE/W、CauseWay、DOS/4G bind;还包括 OS/2 LX 和 VxD) 由 Watcom C/C++ 构建 – 自带用于 Ghidra 的 LE/LX 加载器,以及针对两种调用约定的 Watcom 编译器规格。
  • Win32 PE(通常是 MSVC):通过 COM 虚表调用的 DirectX 调用会显示其方法名, Miles/Smacker/Bink/FMOD/BASS 导入被标注类型,来自 MSVC RTTI 的 C++ 类, 以及来自 Rich 头的编译器版本。

输出是一个工作区,其中包含一个大型 .c 文件,保存所有函数以及索引 (函数、调用图、字符串、修正/指针表、导入),你可以用 grep 搜索,并在人员或 AI 代理之间拆分。 分析过程中发现的名称会回填到 Ghidra 中,并重新生成导出。

安装

先决条件:Ghidra 12.x (已解压)、JDK 21+(JAVA_HOME)、Python 3.10+。

pipx install git+https://github.com/nemo22/retrokit   # or from a checkout: pip install .  (or python -m retrokit)
retrokit doctor                                    # checks Python, Ghidra, Java, loader, cspecs
retrokit install-loader                            # once per Ghidra install (DOS LE/LX only)

Ghidra 通过 --ghidra DIR、$GHIDRA_INSTALL_DIR 或位于游戏或套件旁边的 ghidra/ghidra_* 目录找到。install-loader 使用 javac 针对该 Ghidra 编译加载器(无需 Gradle),将其安装到 Ghidra/Extensions 并注册 Watcom 编译器规格;更新 Ghidra 后再次运行它(doctor 会告诉你何时需要)。

使用

retrokit info GAME.EXE              # format, DOS extender, compiler, calling convention
retrokit analyze GAME.EXE           # full pipeline -> GAME_analysis/  (-o DIR to choose)
retrokit show GAME_analysis FUN_00012345 main
retrokit tables GAME_analysis       # function-pointer and string tables (from fixups)
retrokit names GAME_analysis        # apply notes/names_*.csv, re-export
retrokit reexport GAME_analysis     # re-run the fix-up passes + export without re-importing

analyze 会检测格式、加载器,以及——对于 Watcom——调用约定 (--cspec watcom|watcomreg 可覆盖它),并将它们存储在 GAME_analysis/retrokit.json 中; 后续命令只需要该工作区。一个工作区:

GAME_analysis/
  retrokit.json        how the binary was analysed
  decomp/              <exe>_decompiled.c, functions.csv (addr,name,size,callers,callees,cc,signature),
                       calls.txt, strings.txt, data_symbols.txt, memory_blocks.txt,
                       fixups.txt (source -> target of every pointer: the key to pointer tables
                       and to which function uses which string), imports.txt (PE)
  notes/               findings, names_<topic>.csv proposals
  ghidra_project/      the Ghidra project (open it in the Ghidra GUI too)
  logs/

AI agents:retrokit mcp GAME_analysis 是一个基于工作区的 MCP 服务器(stdio,无需额外软件包):函数、反编译代码、调用图、交叉引用、字符串、指针表、反汇编和字节、库;它记录名称提议和注释,并可以应用这些名称重新导出(按需,在后台)。Claude Code:

claude mcp add retrokit -- retrokit mcp /path/to/GAME_analysis

其他客户端的设置、每个工具以及代理应如何工作:docs/MCP.md; 面向代理的简短版本见 AGENTS.md。

命名:将提案写入 notes/names_<topic>.csv(addr,name,confidence,comment,confidence 为 V 已验证或 G 猜测);retrokit names WS 重命名函数/标签(V 优先于 G, 冲突项会加上 _<addr>)并重新导出。

流水线的工作内容:

  • 库(两种格式):retrokit libs(也是 info 和 analyze 的一部分 -> notes/libraries.md)可识别约 20 个该时期的库 - Miles/AIL、HMI SOS、DIGPAK、 Smacker、Bink、FMOD、BASS、DirectX、zlib、libjpeg、libpng、PKWARE DCL、Lua、... - 依据 字符串、导入和数据文件识别,并附带版本、其格式说明和移植提示。 库代码通过签名查找(已附带:Watcom C/C++ 运行时、来自 Open Watcom 的数学和 C++ 库、 zlib 1.0.4-1.2.3、libjpeg 6b;retrokit sigs build 从你拥有的库生成它们,sigs learn 从你已识别的函数生成)- 先精确匹配,然后匹配来自其他编译器版本的相似代码 - 命名,并根据 retrokit/knowledge/*.h 确定类型。
  • LE/LX:使用 LE 加载器和 Watcom cspec 导入,在指向代码的 fixup 目标处创建函数 (Watcom 游戏通过指针表调用其大部分逻辑),switch 跳转表保留在其函数内部, 错误的“无返回”标志被撤销,短字符串被定义,字符串字面量显示为 "text",参数数量来自 调用点的 ADD ESP,n 清理,原型按被调用者优先的顺序恢复,导出。
  • PE:使用 Ghidra 的 PE 加载器和自动分析导入,然后在指针表目标处以及填充之后 创建函数,直到不再出现新函数,执行相同的字符串 / 参数 / 原型处理,导出。

其他命令:classes(来自 RTTI 的 MSVC C++ 类)、libs(正在使用的库)、convert(XMIDI/HMI/HMP -> MIDI、VOC -> WAV、 Smacker/Bink/FLIC -> MP4,按内容)、sigs match|build|learn(库签名,见 docs/WORKFLOW.md)、 entries(PE:没有函数的代码地址)、modules --rules FILE (PE:通过 assert 路径将函数 → 原始源文件)、strings EXE OUT(无需 Ghidra 的 PE 字符串清单)、 match(将名称转移到相关 EXE:续作、附加内容、其他版本)、 le EXE info|dump|rec|s16|s32(在 Ghidra 地址处从 LE 读取表)、rnc(RNC ProPack)、 flic info|png|video(Autodesk FLI/FLC)。选项请使用 retrokit COMMAND --help。

详细流程、预期结果和已知陷阱见 docs/WORKFLOW.md; MCP 服务器见 docs/MCP.md;AI 代理的任务模板见 docs/AGENT_PROMPTS.md;计划 工作见 docs/ROADMAP.md;维护和发布见 docs/MAINTAINING.md。

布局

retrokit/               Python package (CLI: retrokit/cli.py)
  ghidra_scripts/       headless Ghidra scripts used by the pipelines
  tools/                standalone Python tools behind the CLI commands
  le-loader/            LE/LX loader for Ghidra (Java) + Watcom compiler specs (data/languages/)
  sigs/                 library signatures (Open Watcom C run-time)
  knowledge/            libraries.json (library catalog), library prototypes as C headers
scripts/                build_sigs.py: rebuilds the shipped signatures
tests/                  synthetic test programs, scoring against the linker map, baseline
docs/                   WORKFLOW, AGENT_PROMPTS, ROADMAP
Ghidra 脚本用途
CreateFunctionsFromFixups.javaLE:将 32 位 fixup 目标处的函数转换为代码;将代码中的 switch 表转换为代码
CreateFunctionsAtEntries.java在给定地址处创建函数(列表或 @file),可选地从代码间隙中的 fixup 或 prologue 创建
FixTruncatedCallers.java清除导致调用者被截断的错误“无返回”标记
FixAnalysis.java手动修复:noreturn:ADDR、func:ADDR
MarkStringsConstant.java定义短字符串,将可写数据中的字符串标记为 constant(反编译中的字面量)
ApplyLibraryPrototypes.java为命名库函数应用文档化的原型(knowledge/*.h),标记 LIBRARY
ApplyStackConvention.java根据调用点的 ADD ESP,n 推断参数个数 / __cdecl / 可变参数,根据 RET n 推断 __stdcall
RecoverPrototypes.java从反编译器恢复原型,按调用图层级自底向上进行
ApplyNames.java从 names_*.csv 应用名称
ExportDecompiled.java导出 .c + functions.csv、calls.txt、strings.txt、……
DumpFixups.javaLE fixup / PE 基址重定位 → fixups.txt
DumpImports.javaPE 导入和 IAT 槽 → imports.txt
DumpFunctions.java仅函数列表(在 PE 入口遍历之间)
DumpDisasm.java将函数的反汇编输出到 stdout
EnableDeepAnalysis.java开启慢速分析器(不推荐,参见 WORKFLOW)

测试

tests/ 使用 Open Watcom 构建小型合成程序(仅作为开发/CI 依赖:DOS/4GW、 DOS/32A、PMODE/W、DOS/4G bind、OS/2 LX、Win32;栈和寄存器约定),将 加载器与每个映像的独立 Python 模型进行比对,对其运行 retrokit analyze 并 根据链接器映射对结果评分(函数地址、参数个数、调用参数、 字符串字面量、被截断的函数、反编译器噪声)。参见 tests/README.md。

贡献

欢迎在 GitHub 上提交 issue 和 pull request。主仓库维护在 其他地方并镜像到 GitHub,因此 pull request 在那里合并,并在镜像同步后 在 GitHub 上显示为已合并(docs/MAINTAINING.md)。请不要附加 游戏文件或反编译的游戏代码;请改为描述二进制文件(格式、扩展器、 编译器、出了什么问题),并在可能的情况下,用 Open Watcom 构建的小程序 复现它,就像 tests/ 中的那些一样。

它是如何制作的

retro-kit 通过 Claude Code 使用 Claude(Anthropic)开发:大部分代码和 文档由 Claude 在维护者的指导下编写,维护者设定范围和 设计,在 Windows 和 Linux 上测试,并决定每个版本包含什么内容。提交记录将 Claude 列为共同作者。质量通过 tests/ 中的测试语料库进行跟踪:合成程序 根据其链接器映射评分,并在 Windows 和 Linux 的 CI 中检查基线。

许可证

Apache License 2.0(LICENSE)。该工具包的早期版本使用了 yetmorecode/ghidra-lx-loader;当前的 加载器(retrokit/le-loader)是一个新的实现。

retro-kit 不包含任何游戏文件,也不包含任何反编译的游戏代码。请仅在你拥有的软件上使用它。

下载工具