公司动态

QuickBMS 完整实战:3 步拆开任意游戏资源包再装回去

📅 2026/8/19 2:34:15
QuickBMS 完整实战:3 步拆开任意游戏资源包再装回去
QuickBMS 完整实战3 步拆开任意游戏资源包再装回去【免费下载链接】QuickBMSQuickBMS by aluigi - Github Mirror项目地址: https://gitcode.com/gh_mirrors/qui/QuickBMS晚上十一点我盯着一个 2.3GB 的.pak文件。它是一款单机游戏的全部家当——模型、贴图、音频、剧情文本全被塞进这个容器里。我想给它做汉化补丁可这个.pak既不是 ZIP 也不是 7z双击毫无反应。最终解决问题的是一款叫QuickBMS的开源游戏资源提取工具。它最特别的地方在于脚本驱动针对不同的打包格式你只需准备一个几十行的.bms文本脚本就能把包拆开拆完改完还能原样装回去。整个过程不用编译任何 C 代码一个可执行文件走遍 Windows、Linux 和 macOS。下面我就用这次真实的解包经历带你走完拆开 → 读懂 → 装回去的完整路线。先讲个故事为什么通用解压软件对 .pak 无能为力游戏公司的打包格式五花八门有的自带文件表有的把偏移量加密有的按块压缩再拼接。市面上常见的解压软件只认识 ZIP、7z、RAR 这些标准容器遇到游戏自研格式就只能干瞪眼。而游戏格式逆向圈里有个约定俗成的做法谁先摸清格式谁就写一段 BMS 脚本分享出去。QuickBMS 社区zenhax.com从 2009 年至今积累了海量脚本从老式主机到近年 3A 大作基本都能找到现成的。拿到脚本的那一刻你的 .pak 就开口说话了。上图是 QuickBMS 源码树里随附的反汇编引擎绑定界面位于src/libs/capstone/。当包里藏的不是普通资源而是内嵌的脚本或可执行代码时配合src/disasm/下的反汇编模块你能直接在命令行里分析这些代码块——这在调试一些带壳的加密格式时相当有用。第一步跑通脚本 档案的最短命令先拿到程序本体。Windows 用户直接用官方发布的quickbms.exeLinux 和 macOS 用户则克隆源码自行编译git clone https://gitcode.com/gh_mirrors/qui/QuickBMS cd QuickBMS/src make编译只需要 openssl、zlib、bzip2 三个依赖src/Makefile里写得很清楚。注意一个细节Makefile 默认按 32 位目标编译如果你的素材里有超过 4GB 的文件编译时加上-DQUICKBMS64就能得到大文件专用版本。然后是经典三连。双击quickbms.exe进入图形界面后选脚本比如手上是 ZIP 就选zip.bms选输入选中.pak文件甚至可以选中整个文件夹文件名栏输入*全选选输出挑一个空文件夹回车开跑命令行下更干脆核心句式永远是这一行quickbms script.bms archive.pak output_folder想先探探底、不急着解包加个-l参数就只列出文件清单想确认脚本是否可用先跑-l看目录结构比直接全量解包稳妥得多。第二步像读菜谱一样读懂 BMS 脚本拿到别人写的脚本第一反应往往是这写的什么鬼。其实 BMS 脚本的语法朴素得像伪代码核心就五个动作读字段、算位置、判断、循环、写文件。# 一个典型的 BMS 脚本骨架 IDString BMSF # 校验文件头四个字节防止脚本选错 Get FILE_COUNT Long # 读取一个 4 字节整数文件总数 For i 0 FILE_COUNT # 遍历文件表 Get OFFSET Long # 当前文件的偏移 Get SIZE Long # 当前文件的大小 Get NAME String # 文件名以 0 结尾的字符串 Log NAME OFFSET SIZE # 按偏移和大小把文件落盘 Next i理解了这段你就掌握了 80% 脚本的阅读能力。剩下 20% 是这些细节字节序小端用Long大端格式用Long endian对应脚本语言里大小端字段的区分压缩与加密ComType声明压缩算法Encryption声明解密方式QuickBMS 会在内存里自动完成解压/解密后再交给Log写出临时数据MEMORY_FILE可以把一段数据先放进内存加工处理完再落盘适合先解压 → 改表头 → 再输出的复杂流程。看脚本时有个小技巧先找IDString和Get开头的前几行那是文件头和文件表的位置再看循环体里的Log那就是最终写文件的动作。中间夹着的都是为这两者服务的运算。第三步把改过的文件重新塞回去解包只是开胃菜重新导入reimport才是 QuickBMS 的灵魂。汉化、MOD、资源替换全都靠这个功能解包 → 改文件 → 原路塞回一条龙。# 先解包 quickbms script.bms archive.pak output_folder # 在 output_folder 里改文件模型、贴图、文本随意 # 再装回去 quickbms -w -r script.bms archive.pak output_folder注意那个-w它代表允许写回没有它重导入模式是拒绝动手的。scripts/目录下的reimport.bat、reimport2.bat等批处理文件其实就是把这几个参数预置好了。重导入分三个档位理解它们的区别能救你很多次模式命令适用场景REIMPORT-r新文件 ≤ 原文件大小超出的空间用填充字节补齐默认补 0可用-b指定别的字符REIMPORT2-r -r改进版重导入兼容性和成功率更高REIMPORT3-r -r -r在不破坏偏移表的前提下允许真正缩小或撑大整个档案对应关系在官方说明readme.md第 2 节里写得很直白普通模式要求改后文件不大于原始文件这也是很多新手第一次翻车的地方——汉化文本总是更长。实操里有几条经验值得记下改完先跑-l对照一下文件表和实际内容别急着写回只想替换部分文件时把没改的文件从输出目录删掉再重导入用-#参数让程序按哈希校验哪些文件没动过能省不少时间如果包里的资源本来就是压缩的改完的文件尽量先压缩再导入否则大小极易超限。一个可执行文件里到底塞了多少算法打开项目的src/compression/目录你会看见上百个以算法命名的源文件lzma、bzip2、quicklz、ppmd、zpaq、lzfse……再翻src/encryption/又是一整排密码学实现RC4、ChaCha20、Salsa20、Twofish、Serpent、XXTEA甚至 ZIP 传统加密和 MoleBox 这类游戏保护方案。这意味着什么解包时遇到先解密再解压的嵌套流程脚本只需要两行声明底层算法全都内置不需要你额外装任何库。想知道自己的版本支持多少种压缩算法跑一条命令即可quickbms -U看到刷屏的算法清单你就明白为什么 QuickBMS 能在逆向圈成为格式瑞士军刀——一个作者维护的脚本引擎替你集成了别人一个项目才搞定的算法集合。让它从工具变成流水线几条值得记住的命令行姿势用熟基础命令后把 QuickBMS 嵌进日常工作流效率还能再上一个台阶精准提取-f {}.mp3只解包音频-f !{}.ogg排除某种文件支持逗号/分号分隔多个规则还支持把规则写进一个 txt 文件用-f 规则文件引用批量喂入-F {}.dat script.bms input_folder output_folder能把整个文件夹里的.dat按批处理配合-.让单个文件出错时不中断整批解包后直接转码-S lame.exe -b 192 #INPUT#会在每个文件解出后自动执行一次命令#INPUT#会被替换成文件名——解包和转码一次搞定合并输出-O out.tar把解出的所有文件按顺序拼成一个 TAR适合做归档或后续统一处理变成服务-W 8080会开启一个实验性的 Web API 端口其他程序可以通过 HTTP 与 QuickBMS 通信-t参数还能输出 JSON 格式的文件树方便写脚本对接。顺带一提官方说明里还有几个安全开关——CallDll、网络、进程等敏感操作默认需要确认用-C、-n、-p可以免确认放行。处理来路不明的脚本时建议保持默认的询问模式别图省事。我踩过的四个坑提前帮你踩平坑一改后的文件比原文件大。最经典的翻车现场。普通-r模式下多出来的空间会被填充字节占位游戏读取时可能直接崩溃。对策换 REIMPORT3-r -r -r或者干脆对文件先做一次压缩再导入。坑二4GB 以上的大档案。普通版本在超大文件面前会力不从心。对策用 64 位构建编译加-DQUICKBMS64重导入时直接用scripts/里现成的reimport_4gb_files.bat和reimport2_4gb_files.bat。坑三忘了-w。重导入模式下所有的Put*写操作都需要-w开启报错后先在命令里补上这个参数比反复怀疑脚本靠谱。坑四脚本和游戏版本对不上。新版本游戏改了文件头或表结构旧脚本要么报错要么解出满屏乱码。对策用-v打开详细调试输出看卡在哪一步然后去社区搜这个游戏的新脚本——IDString校验失败是脚本过期的第一信号。什么时候你可以不再需要它等你把某个格式彻底摸透、需求也完全固定当然可以写一个专用小工具替代它——毕竟 QuickBMS 的定位从来不是终极方案而是让你用最少的代价走通分析格式 → 提取 → 修改 → 回写这个循环的工具。对于要逆向几十上百种格式、还要把成果分享给社区的人来说几十行文本脚本的传播成本远比分发一堆独立程序低得多。就像那个深夜的.pak文件从打不开到拆出全部文本再到改完装回去、游戏正常运行——整个过程只有三步而每一步的答案QuickBMS 都替你准备好了。【免费下载链接】QuickBMSQuickBMS by aluigi - Github Mirror项目地址: https://gitcode.com/gh_mirrors/qui/QuickBMS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考