在制作解包器之前,我们一般都要把包文件的格式写出来,在这个格式的基础上就制作解包器。' m9 ^* Y0 ~# i, I* y1 }
甚至分析者和解包器制作者不是一个人也没问题。
9 T/ C% d+ J' [, V I/ {6 u3 p在此公布一下包文件格式书写的大致格式及一些例子,提供给大家汉化时参考和学习。8 ~$ s( H) u" Y* z1 o7 U" q
# v6 I2 ~& X" |! O, j3 D一般包文件分为& a8 Y) b" C( i! p7 P+ X& o' v
Header
, p+ T. c! N2 s: q6 OFilename table# @. L6 X+ O+ V4 h9 \3 _
Body
7 B1 G' E& L1 t) j/ d+ w' Y" [Footer! c3 b, p/ h. J* k' X- f" [& j" F
几个部分,Filename table里一般纪录了每个子文件的offset和length.file count等。
* _" x C. o- l7 R/ GFilename table一般在文件头部,有时在文件的尾部。有时还有Dir table., ?4 I3 k1 @2 |2 }2 v
在书写包文件格式的时候只要准确包含了这些信息即可,具体占多少字节当然是必不可少的。
1 J" G2 n/ p y5 i4 Q0 m5 r- [; d$ `9 l7 x/ H- F8 h* K8 ]
下面公布一些例子$ s: U( h' U4 |
) N* E9 Z1 m0 |- @: F1 V
例子10 J; r# ]0 |+ S. w- J+ a
-------------------------------------------------------------------------------8 g: S# \2 }: R' ]4 r
Arc Layout4 R) V7 I: T+ e' o- V
! M" H/ x7 n" V6 T
Header:
- h0 K7 ` P5 r* @0 - Magic - Chars(4) //"ARC "
1 D1 f5 n) k% b8 K4 O. J4 - Version - Int16
& D. K! w& F5 m! X; N' G2 h8 - FileCount - Int16
$ }! B' Z2 W# R! Q- e: h7 o6 e% \) ?& k% }7 ^9 o
Files:
6 W- N/ m B$ ?1 Q0 - FileName - Chars(64)
! K* J- `0 G6 f) v& w64 - Unknown - Int32 //Not important, some sort of flag! Q8 v6 }8 s( I* B2 w5 r) b( z
68 - CompressedSize - Int32
6 n. g* F# W0 ]1 K& Z7 A72 - DecompressedSize - Int32
1 E7 Z z+ i+ m! j* _76 - Offset - Int32- T6 ]' `, H( m6 l5 I
-------------------------------------------------------------------------------0 n) l' ]& `2 ?2 n: {
例子2
% G1 ]/ R/ x) h( W+ S7 f9 E
3 e' \' X; c2 E. v/ c( Z; lMagic:) k. V! i* p" S
DE AD C0 DE JUNK+ K; _$ K ^3 Q4 G! }( @# W$ A
00 02 00 00 Version, if <> 200h, then no XOR-encryption of filename
* i1 H' L& u" p# b* j8 s* X$ @
: x- l: S; k9 e5 E& C' M; v# k4 t' n y/ b3 }" k# F* w
Table:0 q; {4 }* l3 X' v& f8 Y. b1 I
4 p1 w7 d0 _; V. X& O
db len,description(len-1)8 m) m: D2 }. X1 j3 ~. D$ h
db 0
0 c3 C/ l1 {4 W9 A! U- W, odword number_of_files( V" X* D! U) l: f8 v) S
: N& R: p) v1 h, F
byte length name
4 z, \ e. H+ [) [5 }9 F& O7 Z4 qbytes Name, (xor-value: 44h, only if Version 200h)
4 B7 n, {" m( J# c! ?* |% sdword Offset data
, H3 |& S! b$ B& h* ~8 Sdword uncompressed length of data: \4 m: c0 d( A( v: O
dword compressed length of data (or 0, if not compressed)
+ s4 _0 X- r. J: _3 y+ H2 v4 bdword 00 ]8 w4 E' I+ ]1 [% I
dword CRC(?) ;only if Version 200h
- {/ k. \3 i0 |2 _) a. J! }dword 0 ;only if Version 200h- q0 r+ }" S( ?% s& }3 i
-------------------------------------------------------------------------------$ U, W. t1 l9 @" c0 l
例子37 o/ ]1 E, R6 g4 y
5 c# z n+ a1 K/ \8 d3 NHeader:0 g: [+ i5 Y* J! D7 y& c, D
dword "VXGB" - Marker
- R4 o/ @ k& g( L; a) Sdword ? - size filetable
3 f+ H: I' x" c/ g7 C; A0 G" a+ Q' P$ e3 _
Filetable-entry:# x5 M8 r) I9 I% X9 I+ n* [4 w
db ? dup(?) - file name, variable length, 0-terminated4 A# t, R, [7 T9 n; b. t" h
dd ? - Length of data) D; m# X1 |2 n8 E
------------------------------------------------------------------------------- |