teozocchi/mh-stories-re

GitHub: teozocchi/mh-stories-re

通过对 2024 年 PC 版《怪物猎人物语》进行逆向工程,解码 Capcom MT Framework 私有二进制格式并修改骨骼缩放参数,实现了系列首个随行兽体型还原模组。

Stars: 0 | Forks: 0

# 怪物猎人物语 — 随行兽体型模组(逆向工程) 对 2024 年 PC 移植版《怪物猎人物语》进行逆向工程,以实现社区八年来 认为不可能做到的事情:让你孵化出的随行兽以其完整的、未缩小的 原始尺寸进行渲染——无论是在大世界**还是**战斗中。 其成果是系列中已知的首个可用的体型修改方案。此仓库包含**工具集和完整的技术文档**; 它有意不提供**任何游戏资产**(参见[法律声明](#legal))。一切都可以从你 自己的游戏副本中重现。 ## 问题所在 孵化出的随行兽在渲染时,与同种野生怪物相比,呈现出缩小的“Q版”比例。 社区八年来的共识认为这是游戏底层固有且不可改变的——一个“被废弃的成长机制”。 事实并非如此。它是数据。 ## 成果 - 将六种同伴种族缩放至 1.5 倍(恐暴龙、海龙、象牙海龙、 冰麒麟、千刃龙,以及剧情同伴 Ratha),实时应用且无需 重启,在战斗和跨会话中均保持有效。 - 一个 GUI 修改器,允许任何人选择任何种族并设置特定种族的 乘数,并由重构的“种族 → 资源 ID”映射表提供支持。 ## 难点所在(可迁移的经验) 这个项目实际上是一个在不确定性下进行**二进制逆向工程**的案例研究。 真正推动项目进展的技术包括: - **静态分析 (Ghidra):** 从 RTTI/反射元数据中恢复字段名;通过搜索*指令模式* (DIVSS → MULSS×3) 而不是某个具体数值来定位成长比率写入器。 - **动态调试 (x64dbg):** 条件断点和硬件断点,通过缓冲区寄存器读取 函数的字符串输出,以及通过 TLS 回调进行启动时进程 埋伏,以捕获仅限加载时发生的事件。 - **穷举证伪:** 对整个进程进行签名扫描 (在数 GB 的地址空间上使用 `VirtualQueryEx`)来*证明某个假设是死胡同*, 而不是假设它成立——这是本项目中最具决定性的工具。 - **格式逆向工程(皇冠上的明珠):** 从头开始解码两种未公开的 Capcom MT Framework 二进制格式 —— - **ARCC** 归档文件:Blowfish-ECB(带有一个前/后 4 字节字节序交换的 特性)+ 每条目 zlib + 哈希扩展名 → [`tools/arcc.py`](tools/arcc.py) - **XFS** 参数表:一种反射式、类定义的序列化格式, 对其进行解码最终生成了正确的种族映射 → [`tools/xfs.py`](tools/xfs.py) - **数据考古学击败了整个运行时战役:** 答案竟然存在于一个 2.6 MB 的 参数表 (`table.arc`) 中,而它一直以来都摆在明面上。 解码出的一张电子表格胜过了数周的内存搜寻。 ## 仓库结构 ``` tools/ arcc.py ARCC/ARC archive codec (list / find / extract) xfs.py MT Framework XFS parameter-table parser lmt.py LMT bone-scale parser + patcher (rank / scale) census.py sweep every archive -> monster resource-ID map species_data.py reconstructed species database scale_trainer_gui.py tkinter trainer: pick a team, set multipliers, apply data/ species_map.md derived species -> scale-folder / battleScale table THE_JOURNEY.md full technical post-mortem (~12 sessions) ``` ## 快速开始 ``` pip install pycryptodome # for the ARCC codec # 检查 archive 里面的内容 python tools/arcc.py list "/nativeDX11x64/archive/table.arc" buddyPath # 按物种被缩小的程度对其进行排序 python tools/lmt.py rank "/nativeDX11x64/mod/scale/mo" # 将某个物种的 model 缩放至 x1.5(编辑会被游戏实时捕获) python tools/lmt.py scale "/.../mod/scale/mo/mo346/mo346_body.lmt" 1.5 # 或者直接运行 GUI(首次使用时会对你的 vanilla 文件进行快照) python tools/scale_trainer_gui.py ``` ## 一段落简述模组工作原理 每个随行兽种族都有一个松散的 `mod\scale\mo\mo###\mo###_body.lmt` 文件,其中包含 一个静态的**单骨骼缩放**通道(这就是 Q版比例的来源)。 将该通道的数值统一放大即可在所有位置放大渲染出的模型, 并且正在运行的游戏会热重载该文件。唯一真正困难的部分是 识别*哪个* `mo###` 文件对应*哪个*屏幕上的种族—— 这些 ID 不是怪物图鉴中的编号,亚种有它们自己的 ID,而且 存在多个重叠的 ID 命名空间。该映射表是通过解码 `table.arc` 恢复出来的(参见 [`data/species_map.md`](data/species_map.md))。 ## 法律声明 本仓库仅包含原创工具和文档。它不提供**任何 游戏文件、资产或提取的数据**——这些工具作用于你自己合法 获取的游戏副本。《怪物猎人物语》版权归 © Capcom 所有;这是一个 无隶属关系的非商业研究与模组项目。风险自负; 请备份你的文件。 ## 许可协议 代码和文档在 [MIT 许可证](LICENSE) 下发布。
标签:C++, 二进制分析, 云安全运维, 云资产清单, 内存修改, 数据擦除, 游戏Mod, 自定义密码套件, 逆向工具, 逆向工程