使用quickbms提取游戏音乐的一个简单实例
despairtck吧
全部回复
仅看楼主
level 6
yb♬ 楼主
前几天我在找sam free music的一首音乐,由于sam free music这个素材屋已经在2010年关闭了,我要找的这首音乐已经无法再从官网下载到了。只好想了点曲线的办法。
像sam、炼狱庭园、SENTIVE这些素材屋的音乐都是可以免费使用的,所以我想肯定有许多地方引用过sam的音乐。视频的话有可能混有其它声音,所以最好找一些引用过的游戏中提取。
于是我找到了一个叫 《しあわせの魔法石》的游戏,里面引用了我要找的这首,音乐的名字叫 おやすみ 。根据官网提供的引用列表,这首音乐的文件名叫做O-01 。
2014年11月07日 06点11分 1
level 6
yb♬ 楼主
知道了以上几点之后,我就去下游戏了。下载之后发现没有音乐文件夹。整个游戏里最大的一个文件就是 GAME.DAT ,所以所有音乐很可能就都在这个文件里了。
注意:扩展名为DAT的文件不一定是同一类文件。自己封装的文件可以指定任意扩展名。
这个DAT文件好像没有现成的可以提取的工具。于是我想到了标题中的quickbms,一款通用解包器(注意,并不是你随便拿一个文件放进去就能给你自动解包,没有这么厉害的东西。这个需要自己写脚本)。
2014年11月07日 06点11分 2
level 6
yb♬ 楼主
然后往后翻就能看到想要的东西了——音乐。
注意到每一行,第一行是路径,但是好像没写完。从截图中最下面可以看到,有个d08.og,这个应该是d08.ogg 才是完整文件名,从中我们知道了一个有用的信息,这些音乐的格式是ogg。
另一方面,两个路径之间相隔很短,中间不可能含有文件(通常一个文件很长,音乐估计至少也要1M),所以说,前面这些大家可以当成是文件索引,文件应该在后头。
2014年11月07日 06点11分 4
level 6
yb♬ 楼主
那么两个文件中间的部分究竟是什么内容呢?
先找到我要的那个文件O-01。然后观察一下前后。
发现每个路径下一行,前8位有内容,中间都是0,最后4位有内容。3、4行就都是0了。
由于路径不完整,所以第2行前8位可能是路径的后续(为什么不能正常显示不清楚)。0的部分先忽略。 最后4位估计是记录了音乐文件在这个GAME.DAT中的具体位置(要不然游戏本体岂不是找不到音乐了)。
观察一下,free03的下面是 70 d9 ac 05, 这里面我们需要倒过来看,也就是05 ac d9 70。然后依次观察
(后4位倒过来之后)
free03 05 ac d9 70
O01 05 c0 ef e0
k05 05 cd a3 70
都是05,然后是依次增长的。由于文件是依次在文件里的,所以这些依次增长的数应该就是文件的位置。如果猜测每一个是该文件的结束位置,那么 O01这个文件结束位置就是05 c0 ef e0了。
2014年11月07日 06点11分 5
前8位 还是写成 前8个字节 比较好。 要不容易误解
2014年11月07日 09点11分
level 6
yb♬ 楼主
我们来看一下05 c0 ef e0这个位置是什么。
这一行开头是OggS。 我们使用Hex Editor Neo随便打开一个电脑里的ogg文件试试,会发现ogg文件的开头好像都是OggS。也就是说,前面说05 c0 ef e0可能是音乐的位置,这个推测应该是
正确的

那么这个文件大小应该是多少?在哪里结束?
猜测下一个文件的开始应该是上一个文件的结束。
05 c0 ef e0这个位置猜测是 O-01的结束位置,那么就应该是下一个文件k05的起始位置。
那么我要找O-01,只要从前一个文件free03的结束位置05 ac d9 70输出到05 c0 ef e0就可以了。
2014年11月07日 06点11分 6
帮我 一下 可以吗 怎么 容易 学 16进制 算法 游戏文件 和 软件 的文件 编辑 用的话 可以 把 我 很想 学 帮我 么 谢谢
2016年06月18日 11点06分
level 6
yb♬ 楼主
接下来使用quickbms,这里需要用到的一些指令可以在这个贴查到https://tieba.baidu.com/p/1742428872
我们需要用到的是log,关于它的介绍:
log NAME OFFSET SIZE [FILENUM]
提取文件,本操作不影响输入文件的当前位置计数器,提取的文件内容能够自动使用Encryption命令进行解密。
参数: NAME 输出文件名称
OFFSET 定位文件在资源中的位置
SIZE 提取的数据大小
FILENUM 与资源关联的文件号
然后新建一个txt文档,写下代码
math size = 0x05c0efe0
math size -= 0x05acd970 //做减法,计算文件大小
set name string "O01.ogg"
log name 0x05acd970 size
保存txt,起名叫ogg.txt
2014年11月07日 06点11分 7
level 6
yb♬ 楼主
然后启动quickbms,第一步,制定要使用的脚本
第二步,制定要解包的文件,也就是GAME.DAT
第三步,选择输出的目录。
2014年11月07日 06点11分 8
level 6
yb♬ 楼主
然后文件就成功输出啦~
2014年11月07日 06点11分 9
level 12
[憧憬]哇,好有技术含量
2014年11月07日 17点11分 11
level 13
查了一下,しあわせの魔法石用的是Shooting Game Builder引擎开发的游戏.
我想如果用这个开发引擎的话,应该能对游戏本体进行反编译,然后就能解包BGM.
结果没想到的是,Shooting Game Builder的官网也关闭了.
2014年11月08日 02点11分 12
以前尝试用quickbms解包终わりなき夏 永远なる音律的BGM,结果后来不了了之了,找时间再试试.
2014年11月08日 02点11分
[汗]我差点以为是作者自己封装的
2014年11月08日 05点11分
回复 yb741374831 :记得以前许多东方同人游戏用的都是这个引擎.现在的话好像几乎没有了.
2014年11月08日 08点11分
level 3
楼主还在吗
2020年07月02日 07点07分 14
??
2020年07月13日 09点07分
pak解包工具能写吗
2020年07月14日 04点07分
@暗影魅🌀 不能。
2020年07月14日 04点07分
手游,神武4
2020年08月02日 03点08分
level 1
真是太感谢楼主了,各种解包软件都试过解一个游戏的cpk,包括用qiuckbms里面自带的cpk.bms都不行,结果用楼主的方法解压出来几个关键的文件,我的二进制不是明码,不知道名字,但是按照开头和结尾提取,随便取了个名字,然后对照游戏里面的大小改正确的名字
2024年10月30日 02点10分 18
1