s-b-repo/nfsmw-2005-re

GitHub: s-b-repo/nfsmw-2005-re

针对《极品飞车:最高通缉(2005)》的系统性逆向工程文档与工具集,提供完整的子系统映射、属性哈希破解及可用的Mod开发工具链。

Stars: 5 | Forks: 0

# NFSMW 逆向工程项目 一个针对**《极品飞车:最高通缉 (2005)》**(PC 零售版,`speed.exe`,PE32 i386,MSVC 7.10,镜像基址 `0x00400000`,26,316 个函数)的社区逆向工程、文档和 Mod 工具项目。 ## 本仓库包含的内容 ``` . ├── README.md ← you are here ├── LICENSE ← BSD-3 ├── docs/ ← Documentation, schemas, indices (the core deliverable) │ ├── ARCHITECTURE.md ← 817-line canonical reference │ ├── ANTI_RE_AND_PATTERNS.md ← 18 anti-RE techniques + how we beat each │ ├── PROGRESS.md ← Wave-by-wave session log │ ├── attribute_hashes.md ← attributes.bin schema + per-type crack tables │ ├── attribute_cracks_verified.json ← 294 hash→name pairs (re-hash verified) │ ├── sdk_addrs.json ← 181 hardcoded addresses from NFSPluginSDK │ ├── sdk_enums.json ← 65 enum definitions │ ├── sdk_structs.json ← 245 struct definitions (1,712 fields) │ ├── renames.csv ← 6,513 Ghidra-named functions │ ├── nfsplugin_sdk_mw05/ ← Mirrored BSD-3 SDK headers (berkayylmao) │ ├── GHIDRA_MCP_ENDPOINTS.md ← Tooling reference (Ghidra HTTP plugin) │ ├── DEBUGGER_PLAN.md ← Wine + gdbserver attach walkthrough │ └── plan.txt ← Project plan / status board ├── tools/ ← Linux-native CLI + scripts │ └── nfsmw-tool/ ← Pure-Python multi-command CLI │ ├── nfsmw_tool.py ← Hash, JDLZ decompress, save verify, SDK lookup, etc. │ ├── Makefile │ └── README.md └── mods/ ← Proof-of-concept mods └── infinite_trainer/ ← Working .asi (Tweak_InfiniteNOS + Tweak_InfiniteRaceBreaker) ├── nfsmw_trainer.c ├── Makefile ← Cross-compiles via i686-w64-mingw32-gcc └── README.md ``` ## 主要发现 | 发现 | 参考 | |---|---| | **bChunk hash = Bob Jenkins mix3 (1996),种子 `0xABCDEF00`** — 而非 DJB2/FNV | [`docs/ANTI_RE_AND_PATTERNS.md`](docs/ANTI_RE_AND_PATTERNS.md) §1 | | **Script VM 是原生的 Lua 5.0.2** — 已通过错误字符串匹配确认 | [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) wave-5 部分 | | **JDLZ v0x02** 算法已从 `speed.exe @ 0x64db40` 完全逆向 | [`tools/nfsmw-tool/nfsmw_tool.py`](tools/nfsmw-tool/nfsmw_tool.py) `jdlz_decompress()` | | **存档文件使用 MD5 尾部**(而非 CRC)— IV 常量已验证 | [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) §wave-5 save/load | | **过场动画使用 On2 VP6 + MAD 音频**,而非 Bink | [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) §wave-5 cutscenes | | **AI 不会尾流 drafting 也不使用氮气加速** — 所谓的“尾流(slipstream)”仅仅是橡皮筋机制(rubber-banding) | [`docs/ANTI_RE_AND_PATTERNS.md`](docs/ANTI_RE_AND_PATTERNS.md) §14 | | **漂移模式在 MW 中不存在** — 遗留的《地下狂飙》时期字符串 | [`docs/ANTI_RE_AND_PATTERNS.md`](docs/ANTI_RE_AND_PATTERNS.md) §14 | | **没有物理工作线程** — 积分器在主线程上内联运行 | [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) wave-9 勘误 | | 最初的所有 5 个神秘哈希已破解:AUTO_SIMPLIFY, BEHAVIORS, SimplePhysics, ExplosionEffect, DROPOUT | [`docs/attribute_cracks_verified.json`](docs/attribute_cracks_verified.json) | | **HUD 每帧遍历器(walker)** = `CHudWidgetArray_Tick @ 0x58ca30`(位于 vtable @ 0x8a2538 的 vt[1]);对 11 个固定槽位进行内联迭代;通过 widget[6..9] 掩码进行模式过滤 | [`docs/wave13_hud_walker.md`](docs/wave13_hud_walker.md) | | **24 个 HUD widget** 已映射到确切的 CHudWidgetArray 存储偏移量 (+0x2c0..+0x32c)。只有 10 个由 walker 驱动(ticked);14 个为 FNG 总线 / 被动类型 | [`docs/wave14_hud_slot_map.md`](docs/wave14_hud_slot_map.md) | | **BustedMeter 是一个被动 widget** — Update 操作为空(no-op);外部写入器将数据直接存入(poke) FNG 中 | [`docs/hud_widget_decomps/BustedMeter_Update.txt`](docs/hud_widget_decomps/BustedMeter_Update.txt) | ## 快速开始 ### 安装 CLI ``` cd tools/nfsmw-tool make install # symlinks ~/.local/bin/nfsmw-tool nfsmw-tool stats # show project coverage ``` ### 计算 / 查找 bChunk hash ``` $ nfsmw-tool hash MASS bChunk("MASS") = 0x4A56503D $ nfsmw-tool lookup 0xC2094707 0xC2094707 = YAW_SPEED (Float-typed attribute) ``` ### 解压 JDLZ bundle ``` $ nfsmw-tool jdlz /path/to/GLOBAL/GLOBALB.LZC Decompressed 2803648 bytes → /path/to/GLOBAL/GLOBALB.LZC.bin ``` ### 构建无限 NOS 修改器(trainer) ``` sudo pacman -S mingw-w64-gcc # or apt install gcc-mingw-w64-i686 cd mods/infinite_trainer make # produces nfsmw_trainer.asi cp nfsmw_trainer.asi /path/to/NFSMW/scripts/ ``` 运行 NFSMW,参加比赛,使用 NOS — 永不耗尽。这验证了从文档到运行时的整个链条。 ## 配套:Mod SDK 一个基于此逆向(RE)数据库构建的跨平台 header-only Mod SDK 位于其独立的仓库中:**[s-b-repo/nfsmw-2005-sdk](https://github.com/s-b-repo/nfsmw-2005-sdk)**。 支持从 Linux/Windows/macOS (MinGW-w64 i686) 构建 Mod;输出的 DLL 能够 通过单一文件在 Ultimate-ASI-Loader 和 **BepInEx 6** **两者**下加载。 其地址表是根据本仓库的 `docs/sdk_addrs.json`、 `docs/attribute_cracks_verified.json` 和 `docs/sdk_enums.json` 生成的。 ## 如何将本仓库用于你自己的 Mod 制作 1. **找到你想要修改的内容。** 使用 [`docs/attribute_hashes.md`](docs/attribute_hashes.md) 查找属性名称(例如 `MASS`、`TopSpeed`、`RubberBandGain`),或使用 [`docs/sdk_addrs.json`](docs/sdk_addrs.json) 查找全局变量(例如 `Tweak_InfiniteNOS`、`DrawCars`)。 2. **如有需要,计算哈希。** `nfsmw-tool hash ` 会提供 32 位密钥。 3. **在 Ghidra 中查找读取/写入位置。** 打开 `speed.exe`,搜索该常量。应用了我们的 460 条反汇编注释后,哈希值已经预先标注了其破解后的名称。 4. **编写 Mod。** 最简单的方法:使用 [nfsmw-2005-sdk](https://github.com/s-b-repo/nfsmw-2005-sdk)(包含 `NFSMW_PLUGIN_MAIN`、类型化全局变量、hook 辅助工具)。或者复制 `mods/infinite_trainer/` 作为一个裸 `.asi` 模板,并替换其中的地址常量。 ## 这项工作是如何完成的 在约 6 天内进行了八次逆向工程“浪潮”(并行 agent + 直接工作): | 浪潮 | 日期 | 成果 | |---|---|---| | 基线 | 2026-05-09 之前 | ~6,338 个函数被命名,JDLZ 算法,attributes.bin schema | | Wave-1 | 2026-05-09 | 映射了 10 个子系统(分配器、世界流式传输器、粒子、音频、自定义、FNG、网络、损坏、输入、回放) | | Wave-2/3/4 | 5 月中旬 | EAGL 物理锚点、Cop AI、渲染通道、动画、生涯、Script VM | | Wave-5 | 2026-05-14 | NFSPluginSDK 集成(178 个标头),确认 Lua 5.0,映射了另外 8 个子系统 | | Wave-6 | 2026-05-14 | +50 个属性破解(手动 + 复合词表) → 121 / 345 (35 %) | | Wave-7 | 2026-05-14 | 集成社区 NFS 哈希数据库(Attribulator + OpenNFSTools + nfsu2-re) → 294 / 345 (85.2 %);所有 5 个神秘哈希均被破解 | | Wave-8 | 2026-05-14 | 完整映射输入绑定系统,映射 13 个 HUD widget,更正了之前的误读 | | Wave-9 | 2026-05-14 | 构建并验证无限 NOS 修改器,EAGL 物理勘误(无工作线程),映射 event-bus API,确定 15 个哈希的语义角色 | 完整日志请参见 [`docs/PROGRESS.md`](docs/PROGRESS.md)。 ## 本仓库不包含的内容 - **不含受版权保护的游戏资源。** 不含 `speed.exe`,不含 bundles,不含音乐,不含模型。你需要一份合法获取的游戏副本才能使用这些工具。 - **不含游戏安装程序。** 请自备副本。 - **不含 PDB / 源码泄露。** 这里的所有内容均来自社区主导的净室(clean-room)逆向工程成果。 ## 许可证 BSD-3-Clause。参见 [`LICENSE`](LICENSE)。
标签:Ghidra, Homebrew安装, Python, 云资产清单, 文档, 无后门, 游戏, 游戏模组, 逆向工具, 逆向工程