龙之谷—资源文件讲解(3)—虚拟文件提取

图片[1]-龙之谷—资源文件讲解(3)—虚拟文件提取-七玩网

上一节,我们讲到了,龙之谷的资源文件中的虚拟文件的索引部分应为:
单文件索引=文件名+文件信息
其中,文件名是固定长度——256个字节,
那么,文件信息是什么呢?
这一节,我们就要来分析这个关键性的东东了。

想要从游戏的资源文件中把虚拟文件提取出来,成为明件,
就必须弄清楚这个文件的文件名,以及该文件内容存放在什么地方,
具体地址是多少,文件的大小是多小。
接下来,我们要来解决这个问题。

首先第一个问题:文件名,这个问题上一节已经解决了,
为什么要先解决文件名呢,因为,要想弄明白什么字节是指明地址或大小,
就需要进行批量比较才能得出,
这个批量比较的前提就必须要,能把虚拟文件名批量提出。

第二个问题:内容存放在什么地方。
观察整个资源文件,其索引存放在尾部,而且前面有很多内容,
这显示是文件内容就存放在资源文件的中间部分。
有了这两个前提,其它的就好办多了。

还是拿“Resource02.pak”文件来举例:
13184a8fh: 1E 5E 02 00 C5 62 02 00 1E 5E 02 00 00 04 00 00 ; .^..舃…^……
13184a9fh: 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; …………….
13184aafh: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; …………….
13184abfh: 00 00 00 00 00 00 00 00 00 00 00 00             ; ………… 
这是第一个虚拟文件的60个字节的文件信息

13184bcbh: B4 4B 00 00 FF 4E 00 00 B4 4B 00 00 1E 62 02 00 ; 碖.. ..碖…b..
13184bdbh: 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; …………….
13184bebh: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; …………….
13184bfbh: 00 00 00 00 00 00 00 00 00 00 00 00             ; …………
这是第二个虚拟文件的60个字节的文件信息

13184d07h: 17 2F 00 00 59 32 00 00 17 2F 00 00 D2 AD 02 00 ; ./..Y2…/..噎..
13184d17h: 1E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; …………….
13184d27h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; …………….
13184d37h: 00 00 00 00 00 00 00 00 00 00 00 00             ; …………

这是第三个虚拟文件的60个字节的文件信息

13184e43h: D2 EA 00 00 4F ED 00 00 7D 12 01 00 E9 DC 02 00 ; 谊..O?.}…檐..
13184e53h: 16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; …………….
13184e63h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; …………….
13184e73h: 00 00 00 00 00 00 00 00 00 00 00 00             ; …………
这是第四个虚拟文件的60个字节的文件信息

通常情况下,虚拟文件是批量顺序存放的,所以,就有这样一种现象,
作为地址四字节数据,会一个比一个大,所以,我们要把这个逐步递增的四字节数据找出来。
通过观察,[00 04 00 00]<[1E 62 02 00]<[D2 AD 02 00]<[E9 DC 02 00]
这是文件信息的第四个四字节数据,这明显就是指向文件内容的地址指针,
写个代码,把索引文件整理一下,(代码自个搞定)
我们就会发现,这个就是一个地址指针的数据。

文件内容的地址问题我们搞定了,那么接下来,我们就会解决文件大小了,
这个更容易,
因为资源文件都是按照顺序存放的,又因为开发商为了节省资源文件的空间,
他们会把文件一个挨一个的存放,
这样一来,我们的解析就更加简单了。
把第二个虚拟文件的单文件索引段的文件信息的第四个四字节减去第一个单文件索引段的同个位置的值。
[1E 62 02 00] – [00 04 00 00] = [1E 5E 02 00]
以此类推:
[D2 AD 02 00] – [1E 62 02 00] = [B4 4B 00 00]
[E9 DC 02 00] – [D2 AD 02 00] = [17 2F 00 00]
…..

我们就会发现,原来,第三个字节,就是文件的大小。
这样一来,我们就可以顺利的将资源文件里面的虚拟文件提取出来。
至于程序代码吧,我在这就不用多说了,
这边已经将结构讲得挺清楚的了,
程序代码就自个开发吧。

© 版权声明
THE END
文章不错?点个赞呗
点赞0 分享