我一直致力于从《星球大战》第 1 集:幻影威胁游戏中反转文件格式。
我已经设法从包含它们的 .lab 文件中提取音频文件。但是我无法播放音频文件。
文件在问题的末尾提供。
我设法在游戏缓存中找到了一些解压缩文件(可以播放),因此我选择了压缩和未压缩形式的音频文件。
压缩率约66%;即压缩文件是未压缩文件大小的1/3。
这是数据的未压缩和压缩形式的示例。(来自 BDm8906.wav 和 BDM8906.wv)
未压缩文件的前32字节(Magic is riff)BDm8906.wav
52 49 46 46 DA 77 00 00 57 41 56 45 66 6D 74 20
10 00 00 00 01 00 01 00 22 56 00 00 44 AC 00 00
压缩文件的前32个字节(魔术是INDYWV)BDM8906.wv
49 4E 44 59 57 56 22 56 00 00 10 00 00 00 01 00
00 00 F1 2B 00 00 00 00 00 00 B6 77 00 00 00 00
通过查看一些压缩文件,我发现:
前 16 个字节始终相同。接下来的 4 个字节是压缩文件的大小。接下来的 6 个字节始终为零。
下面更详细地看一下压缩文件的hexdump:
(SE 不会让我上传它)。
从第 25 个字节(从 0 开始计数)到文件末尾总是不同的。从这里到文件末尾的字节数就是前面指出的压缩文件的大小。
尝试解压:
1)彻底的谷歌搜索。卢卡斯论坛和 xentax 论坛上的另一位人员试图解压缩它,但没有成功。它不是波包。
2) 对未压缩的文件尝试常用的压缩算法。压缩、lzma、gzip 甚至不接近报告的压缩率。
3)二进制上的Binwalk:
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 Microsoft executable, portable (PE)
715764 0xAEBF4 YAFFS filesystem
721564 0xB029C YAFFS filesystem
746196 0xB62D4 LZMA compressed data, properties: 0x64, dictionary size: 33554432 bytes, uncompressed size: 16777216 bytes
当我在 Windows 上运行 binwalk 时,我发现它包含 DMC(https://en.wikipedia.org/wiki/Dynamic_Markov_compression)
4)反汇编二进制并试图找到解压代码的位置——这相当困难
可以在此处找到示例(两个文件,一个加密一个未加密):
https://www.dropbox.com/sh/jvljza0v76mvl56/AAC41MenYP57dVHgAXY-DkSsa?dl=0
我怎样才能弄清楚它在使用什么?
谢谢
编辑根据收割者,解压文件:
22.05 采样率 每个样本 16 位 15323 个样本 694 ms
无论游戏做什么,都将其解码为 15323 个 16 位整数