5.第二个例子——一个小游戏的包文件格式/ |. _7 W' U+ Q% F1 O; K, f' s# A$ R
9 k* m0 K# b/ G8 d' y/ u0 y$ l) N下载地址:http://www.lanqie.net.cn/html/benzhanzuopin/20070604/43.html AAAKK版
+ |0 v4 K% S9 L1 r S
) V: }1 |, A$ L2 D1 g+ K1 B包文件是安装文件夹中最大的文件Game.dat。
) m* A; M- M* s
: W' f$ C$ w: @: F8 W1 J* p& C这个格式用到了简单的异或加密,但是文件索引表非常简单,因为没有文件夹格式。+ l2 _3 H+ F# @$ T- n0 _
7 f/ l' o( c L( _3 w( E
打开文件,发现有一些文件名(1.BMP,1.WAV),而且每两个文件名的开头间隔一样,说明文件索引长度固定,为28。可以看到文件名占20字节,文件名的空白用空格(0x20)来填充。每两个文件名之间还有8个字节,即两个Int32。可以估计其中一个是文件位置,另一个是文件长度。
7 S, D2 W) o5 w& U7 r* O* a3 _) W5 G: A5 M: Q
图2 Game.dat文件头3 g0 W3 n. g7 r9 ~6 F' \
00000000h: 52 45 53 59 00 C2 09 00 00 88 47 03 00 4E 55 4D ; RESY.?..圙..NUM
- u4 y8 Q! U* c4 }0 W$ \( ~00000010h: 2E 42 4D 50 20 20 20 20 20 20 20 20 20 20 20 20 ; .BMP
) t+ L) }! k2 D) `' `5 ]6 R00000020h: 20 4B 51 03 00 C2 58 01 00 31 2E 42 4D 50 20 20 ; KQ..耎..1.BMP
+ ?& A; Q, Z: ~, ^& C; F V+ a00000030h: 20 20 20 20 20 20 20 20 20 20 20 20 20 0E AA 04 ; .?5 ~9 i$ e) ?2 L* t4 u( n" N) i8 O: A C
00000040h: 00 2A 20 00 00 31 2E 57 41 56 20 20 20 20 20 20 ; .* ..1.WAV
" \0 I6 N6 f2 c# D0 f. Z00000050h: 20 20 20 20 20 20 20 20 20 39 CA 04 00 C0 58 01 ; 9?.繶.
* ]0 I7 q) P# m( Q+ E, k, @: ^00000060h: 00 32 2E 42 4D 50 20 20 20 20 20 20 20 20 20 20 ; .2.BMP
% u; k4 B6 T+ @0 ^/ B; w00000070h: 20 20 20 20 20 FA 22 06 00 D8 AF 02 00 32 2E 57 ; ?..丿..2.W* n) j: [. X, o4 ]' D
00000080h: 41 56 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ; AV 6 b5 v4 z! C2 S( S4 Y0 U
00000090h: 20 D3 D2 08 00 C0 58 01 00 33 2E 42 4D 50 20 20 ; 右..繶..3.BMP ) H( a, e6 N" L& z# o
000000a0h: 20 20 20 20 20 20 20 20 20 20 20 20 20 94 2B 0A ; ?.
) `& M( P1 f# F) F000000b0h: 00 1E 80 00 00 33 2E 57 41 56 20 20 20 20 20 20 ; .. |