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