ARF文件分為4部分:
1、16字節(jié)文件頭 2、子文件名列表 3、子文件信息列表 4、子文件數(shù)據(jù)
一、ARF文件頭數(shù)據(jù)
這一部分共16字節(jié),前4字節(jié)是文件標志(41 52 00 00),接下來4字節(jié)是子文件個數(shù),4字節(jié)加密文件名列表用的MagicKey,最后4字節(jié)是子文件信息列表的偏移地址。
二、子文件名列表
這一部分是不定長的,有N個shortstring組成。而且文件名的前4的整數(shù)倍字節(jié)被加密過,需要用MagicKey異或解密。
三、子文件信息列表
首先定義一個結構 struct FileInfo { WORD ID; // 子文件的編號,一般是從0開始計算,貌似沒什么實際意義 DWORD Offset; // 子文件在包中的起始偏移量 DWORD FileSize; // 子文件的大小 BYTE MagicKey; // 解密子文件用的MagicKey };
第三部分由N個FileInfo結構組成,N是子文件的總個數(shù)。
四、子文件數(shù)據(jù)
除去前三部分,剩下就是子文件數(shù)據(jù)。解包的時候直接通過FileInfo.Offset在文件中Seek,然后讀取FileInfo.FileSize字節(jié)的數(shù)據(jù)。不過需要注意的是,每個小文件的頭20字節(jié)被MagicKey異或過了,我們再異或回來就OK啦。
- PC官方版
- 安卓官方手機版
- IOS官方手機版