mcpField
R
reverse-engineering

reverse-engineering

github.com/rehan-remade开发9.2k1.7k 次安装今天更新
代码仓库

关于 reverse-engineering

reverse-engineering 是一项面向模组开发的技能,指导检查游戏代码、数据、运行状态和图形,而非凭猜测行事。它帮助开发者选择分析工具、记录已确认的信息,并依据实机行为验证文件格式改动或玩法逻辑。

主要功能

  1. 01按引擎和代码类型选择工具
  2. 02静态与运行时代码检查
  3. 03游戏数据和素材格式分析
  4. 04文件格式往返验证
  5. 05用运行轨迹核对实现逻辑

适用场景

  1. 01在反编译代码中定位玩法函数
  2. 02调试模组时检查运行时数值
  3. 03解析未公开的素材格式
  4. 04依据游戏记录检查移植逻辑

MCP 相关

该技能列出用于查询反编译代码、分析二进制文件、检查运行进程及捕获图形的 MCP 服务和工具,包括 ILSpy-MCP、GhidraMCP 和 RenderDoc MCP。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/rehan-remade/universal-modder --skill reverse-engineering

安装后在 Claude Code 中输入/reverse-engineering确认已加载。

附带文件references/ue3-packages/README.mdreferences/ue3-packages/unpack_upk.py

详细介绍

模组逆向工程

第一条规则:看实际内容,别靠猜测。 反编译代码、实际数据、实时内存视图或 GPU 捕获都是真正的规范。边研究边把发现记录到 MODLOG.md(名称、ID、偏移量、格式)。

将所有反编译输出和提取的资源都保存在模组仓库之外(例如 ~/<game>-decomp/),绝不要发布。仅限单人游戏、离线游戏或用户自己运行的服务器。不要对带有反作弊的游戏附加调试器或扫描器(参见 skills/mod-any-game/references/safety.md)。

根据代码类型选择工具(um scan 会告诉你)

托管 .NET(XNA/FNA、Unity Mono、大多数独立游戏 C#)

  • 先运行 dotnet tool install -g ilspycmd,然后运行 ilspycmd -p -o ~/<game>-decomp <Game>.exe(或 Assembly-CSharp.dll)。这会生成一个完整的 C# 项目,可供 grep 搜索。
  • dnSpyEx:使用调试器逐步执行、设置断点、编辑方法。
  • MCP:ILSpy-MCP / dnspy-mcp 可让 Agent 直接查询类型和方法。

Unity IL2CPP

  • 使用 Cpp2IL(或 Il2CppDumper)处理 GameAssembly.dll 和 global-metadata.dat,可获取类型、字段、方法签名和地址,以及供 ILSpy 使用的虚拟 DLL。
  • 方法体是原生代码:在 Ghidra/IDA 中加载 GameAssembly.dll,并应用生成的脚本为函数命名。
  • 实时查看:使用 UnityExplorer,或 il2cpp-frida-mcp。

Java(Minecraft、Slay the Spire……) 使用 Vineflower / CFR / Recaf。对于 Minecraft,使用 Loom 的 genSources 和 Mojang 映射。

原生 C/C++(自定义引擎、Unreal 游戏代码、主机游戏重编译)

  • 使用 Ghidra(免费)或 IDA,并通过 MCP 驱动,让 Agent 能够反编译、重命名、重新设定类型并追踪交叉引用:
    • Ghidra:GhidraMCP(LaurieWired)、pyghidra-mcp(无头模式,带有运行脚本工具;能编写代码的工具胜过数百个小工具)、ReVa。
    • IDA:官方 Hex-Rays IDA MCP(IDA 9.4+ Pro/Home;“code mode”运行 IDAPython),或 ida-pro-mcp。
    • Binary Ninja 和 radare2 也有 MCP 服务。
  • 工作流:
    1. 先看字符串,再看交叉引用,最后看函数。
    2. 为所有理解的内容命名并设定类型。重命名会逐步积累,最终形成可读的程序。
    3. 在基于猜测继续之前,先动态确认(见下文)。Agent 可能会自信地误判事物。
  • Unreal:先转储反射数据(使用 UE4SS dumper 或 Dumper-7);它们可以免费提供大多数游戏类和属性的名称。

动态 / 实时

  • Cheat Engine:扫描数值 → “查找哪些内容会写入此地址” → 结构体 → 所有者。也有 CheatEngine MCP 服务。
  • x64dbg:断点和跟踪(x64dbg-mcp;将其绑定到 127.0.0.1,因为有些工具默认绑定到 0.0.0.0)。
  • Frida(frida-mcp、frida-game-hacking-mcp):从 JavaScript 挂钩函数并记录参数。
  • ReClass.NET 可根据实时内存重建结构体。

图形

  • RenderDoc(renderdoc-mcp)可捕获一帧,并显示每次绘制、渲染目标、常量缓冲区(视图 / 投影矩阵)和深度缓冲区。
  • 这就是如何找到注入几何体或效果的位置(mashup-mods),以及哪个纹理包含精灵图集。

数据文件和资源格式

优先使用社区工具:

  • Unity:UABEA、AssetRipper
  • Unreal:FModel、UAssetGUI
    • 完全压缩的 UE3 .upk(UELib 显示 Exports=0):使用 Gildor 的 decompress(来自 UE Viewer)解压副本;对于 LZO 包,则使用 unpack_upk.py。
  • Bethesda:xEdit、BSArch
  • GameMaker:UndertaleModTool
  • Genie:genieutils
  • Source:VRF、Crowbar
  • FromSoft:WitchyBND、Smithbox
  • Godot:GDRE Tools

在自行逆向格式之前,先搜索社区档案。2000 年代和 2010 年代的大多数游戏格式都已在那里被研究出来:

无论来源如何(测试版、泄露的 SDK),都可以利用这些资源了解格式并寻找工具。但不要从中下载游戏文件、泄露的代码、SDK 或许可证密钥。

对于未记录的格式:

  1. 收集若干原始文件。比较大小,并对文件头进行十六进制转储(xxd | head)。查找魔数、计数、偏移量和固定大小记录表。
  2. 先推测文件头,再推测帧/记录布局,最后推测压缩方式。解析所有原始文件,确保没有错误,以此验证推测。
  3. 编写一个读取器,将数据解码成可查看的格式(PNG、JSON),然后亲自查看。
  4. 编写写入器,并用往返测试证明其正确性:解码 → 编码 → 解码,再与原始文件比较。AoE2 SLD 精灵图写入器只有在原始骑士精灵图的往返测试平均误差达到 0.9/255 时才获通过(examples/aoe2-de-civ/sld.py)。
  5. 然后再编写新文件。先用一个资源在游戏中测试,再批量转换。

将其用作验证基准

  • 移植引擎逻辑(用于模拟器、训练器或重新实现)时:从游戏中记录真实运行轨迹(每个 tick 的位置、速度),并用它们对照移植版本进行回放。在 Terraria 眼球克苏鲁的研究中,移植版本改为使用 t+1 帧应用的动作后,眼球的速度匹配率达到 99.9%。Float32 常量也很重要(0.2f ≠ 0.2)。剩余的一处不匹配最终查明是由一个隐藏增益造成的(Happy!,移动速度 ×1.21)。回放能发现阅读代码时遗漏的问题。
  • 长时间逆向工程时:
    • 使用日志文件;
    • 每次只进行小步且经过验证的操作;
    • 为每个问题设置尝试次数上限(约 3 次相同失败后,就换一种方法);
    • 每确认一项事实,就提交一次。

评论

支持 Markdown