QuickBMS 游戏资源提取:零基础解包到模组回填全解
【免费下载链接】QuickBMSQuickBMS by aluigi - Github Mirror项目地址: https://gitcode.com/gh_mirrors/qui/QuickBMS
打开游戏的资源目录,你看到的往往是一堆 .pak、.arc 大文件——文本、模型、音频全被塞进同一个包里,用普通解包工具双击直接弹"不支持的格式"。QuickBMS 就是为这种场景做的:一款由 Luigi Auriemma 开发、采用 GPL 2.0 协议开源的跨平台游戏资源提取工具,Windows、Linux、macOS 都能跑。你只需要给它一段 .bms 脚本,它就能把包里的文件一个个解出来;改完之后,还能再写回原包。
一眼看懂:QuickBMS 能帮你做什么 🎮
先明确它能解决的三件事:
- 拆开大文件包:把游戏目录里的 .pak、.dat、.arc 还原成独立文件
- 解压缩加解密:内置 400 多种压缩和解密算法,常见游戏格式基本都有人写好了对应脚本
- 把改动写回去:修改后的文件可以回填进原始档案,不用自己重打包
| 你的需求 | 普通解包工具 | QuickBMS |
|---|---|---|
| 支持格式 | 固定的几种 | 400+ 种算法,按 .bms 脚本扩展 |
| 改完写回原包 | 一般不行 | 重导入命令直接回填 |
| 遇到没见过的格式 | 打不开就没辙 | 写几行脚本就能新增 |
这些压缩和解密算法就内置在src/libs/目录里,所以大部分游戏文件解包不需要你额外装库。
五分钟上手:装好它并解出第一个资源
第一步:安装
Windows 用户下载 quickbms.exe 放进游戏目录就能用;Linux 和 macOS 用户执行git clone https://gitcode.com/gh_mirrors/qui/QuickBMS后进入 src 目录执行make,依赖缺什么用 apt-get 补什么。
第二步:找一段 .bms 脚本
到脚本库(下一节讲去哪找)里按你的游戏名搜,存到游戏目录下。
第三步:运行
git clone https://gitcode.com/gh_mirrors/qui/QuickBMS cd QuickBMS/src && make quickbms mygame.bms data.pak outWindows 下最后一条对应quickbms.exe mygame.bms data.pak out。跑完看 out 文件夹——解出来的文件都在里面。
脚本怎么选:为你的游戏匹配 .bms
30 秒找到脚本
QuickBMS 官网维护着一个按游戏分类的 .bms 脚本库,直接搜游戏名或引擎名。同一引擎的游戏经常共用一份脚本,比如用同一个物理引擎的几款游戏,脚本往往通用。zenhax.com 论坛也是现成脚本的高发地。
没有现成脚本的三条出路
- 找相似格式:搜同引擎、同厂商的游戏,改一下魔数就能用
- 自己写:一个简单格式的脚本通常不超过 20 行,下一节手把手教你读
- 去论坛求助:把文件头十六进制贴给社区,通常很快有人帮你写
实战演示:提取、修改并回填游戏文本 🛠️
完整走一遍"提取→改→回填"的闭环。假设你要修改某游戏的文本:
- 备份原始档案,之后所有操作都在备份上
- 运行
quickbms mygame.bms data.pak out,文本从包里解出来 - 用文本编辑器改 out 里的文本,新文件大小不要超过原文件
- 删掉没改过的文件,只留你改过的
- 运行
quickbms -w -r mygame.bms data.pak out,改动被写回原包 - 替换游戏里的原始档案,启动游戏验证
上面是 QuickBMS 通过 CallDLL 集成 Capstone 反汇编引擎的演示,说明它还能挂接外部库做更复杂的解析。
脚本小课堂:读懂并改一个 .bms
几乎所有 .bms 脚本都是下面这个骨架,看懂它就够改了:
idstring "GAMEARCHIVE" get COUNT long for i = 0 < COUNT get OFFSET long get SIZE long get NAME string log NAME OFFSET SIZE next i逐行翻译:
- 第 1 行:文件头必须出现 "GAMEARCHIVE",匹配不上就终止
- 第 2 行:读一个 32 位整数,存进 COUNT
- 第 3、8 行:循环,逐个处理每个文件
- 第 4~6 行:读出每个文件的偏移、大小、名字
- 第 7 行:把数据按名字写进输出目录
想让它认你的游戏,改的就是第 1 行的魔数和第 4~6 行的字段。
进阶:-w -r 回填与 -l -v 排障
- -w -r 重导入:把 out 目录里改过的文件写回原始档案,这就是游戏模组重打包的常用姿势。前提是新文件不大于原文件
- -l 只列不解包:
quickbms -l mygame.bms data.pak,先确认脚本认得这个文件,再真正提取 - -v 详细日志:输出每一步命令的执行结果,报错时看它停在哪一行最快
排障手册
| 现象 | 原因 | 快速解决 |
|---|---|---|
| "IDstring not found" 类报错 | 脚本和游戏格式对不上 | 换个同引擎的脚本 |
| 解出的文件是 0 字节或乱码 | 偏移、大小字段读错 | 用 -v 看哪条 get 读出的值异常 |
| 重导入提示文件变大 | 新文件比原来大 | 把改动压缩到原大小以内 |
| 含中文路径时行为怪异 | 代码页不匹配 | 加 -P 65001 指定 UTF-8 |
| 压缩错误 | 包用了没实现的压缩算法 | 先 -l 验证,再向社区求助补脚本 |
资源与进阶路径 📚
- 脚本库:官网的 .bms 脚本按游戏名分类,是所有人的第一站
- zenhax.com 论坛:逆向社区,卡住的格式在这里提问,附上文件头十六进制
- 从读脚本到写脚本:先模仿同引擎的脚本改魔数,跑通后你就是作者
- 扩展玩法:模块化架构允许你添加新压缩算法、写自定义命令,或把它嵌进自己的工具
QuickBMS 完全免费,GPL 2.0 许可,遇到打不开的游戏文件,先试它;它不认识,就写几行脚本教会它。
提示:请仅将本工具用于合法的学习与研究目的。
【免费下载链接】QuickBMSQuickBMS by aluigi - Github Mirror项目地址: https://gitcode.com/gh_mirrors/qui/QuickBMS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考