5.第二个例子——一个小游戏的包文件格式
# B5 k" m+ B h* R* G* W6 o6 v ~- |* u- F2 K
下载地址:http://www.lanqie.net.cn/html/benzhanzuopin/20070604/43.html AAAKK版* n& p6 O" u% x9 H
- w6 c, v, P& P% _9 ^' z包文件是安装文件夹中最大的文件Game.dat。; h8 L' |) {3 _8 Q
7 w# \1 j/ {6 h这个格式用到了简单的异或加密,但是文件索引表非常简单,因为没有文件夹格式。
8 n: J8 x) Q: B6 a% ?+ s: T8 ]3 ~8 ?3 v& p' P, ~1 j: E: U
打开文件,发现有一些文件名(1.BMP,1.WAV),而且每两个文件名的开头间隔一样,说明文件索引长度固定,为28。可以看到文件名占20字节,文件名的空白用空格(0x20)来填充。每两个文件名之间还有8个字节,即两个Int32。可以估计其中一个是文件位置,另一个是文件长度。
2 B7 G# _* B: }/ Z; w5 n$ }( J/ I+ @- a$ }2 W4 j8 q
图2 Game.dat文件头
2 x- W+ } `( [2 |3 W00000000h: 52 45 53 59 00 C2 09 00 00 88 47 03 00 4E 55 4D ; RESY.?..圙..NUM
0 `2 B1 O; r; ^# `, M00000010h: 2E 42 4D 50 20 20 20 20 20 20 20 20 20 20 20 20 ; .BMP # h$ d) K- z& K! x7 @6 a6 @
00000020h: 20 4B 51 03 00 C2 58 01 00 31 2E 42 4D 50 20 20 ; KQ..耎..1.BMP ; K* ]% P, h2 u. Z1 d
00000030h: 20 20 20 20 20 20 20 20 20 20 20 20 20 0E AA 04 ; .?$ H+ l' C4 f& `0 [/ v4 J/ g( b. C
00000040h: 00 2A 20 00 00 31 2E 57 41 56 20 20 20 20 20 20 ; .* ..1.WAV : T) I" v4 [6 K: S: m
00000050h: 20 20 20 20 20 20 20 20 20 39 CA 04 00 C0 58 01 ; 9?.繶.; c e" m' }- _) a2 r/ X1 z% p+ v4 J, h
00000060h: 00 32 2E 42 4D 50 20 20 20 20 20 20 20 20 20 20 ; .2.BMP & V! {+ P2 ^, O: K; l
00000070h: 20 20 20 20 20 FA 22 06 00 D8 AF 02 00 32 2E 57 ; ?..丿..2.W
, c' x( c) F9 @00000080h: 41 56 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ; AV
/ M. X( v) _; Z5 j* O& c% Z00000090h: 20 D3 D2 08 00 C0 58 01 00 33 2E 42 4D 50 20 20 ; 右..繶..3.BMP ( t( b" k8 F2 a
000000a0h: 20 20 20 20 20 20 20 20 20 20 20 20 20 94 2B 0A ; ?.
$ z7 l5 Q& y I3 k) O+ n$ _000000b0h: 00 1E 80 00 00 33 2E 57 41 56 20 20 20 20 20 20 ; .. |