在制作解包器之前,我们一般都要把包文件的格式写出来,在这个格式的基础上就制作解包器。
3 Z5 ^0 N& i" [" f甚至分析者和解包器制作者不是一个人也没问题。 j9 `8 r, `- A
在此公布一下包文件格式书写的大致格式及一些例子,提供给大家汉化时参考和学习。6 O6 q0 L" q. B0 A+ o( W
, j: D V: l" l4 j% c
一般包文件分为7 o4 c/ A e1 B* A- Y
Header! l- d2 j$ I8 D* E3 N! h
Filename table
4 D8 {5 K3 I/ H/ H- ]- R1 oBody3 X, G8 y0 G4 V) |! e1 Q9 g
Footer
! h q* D! M$ r几个部分,Filename table里一般纪录了每个子文件的offset和length.file count等。2 ], n2 y2 K. t4 j* ^
Filename table一般在文件头部,有时在文件的尾部。有时还有Dir table.
" h5 |2 k0 }6 L8 r$ X9 U3 ?4 V在书写包文件格式的时候只要准确包含了这些信息即可,具体占多少字节当然是必不可少的。
8 U$ d) H5 [- o% Q0 H+ @2 e" o
& o+ }8 r3 @6 l9 q3 X下面公布一些例子
) u' f% `2 i! l* x8 R" k6 s
2 f% } ]* N" W1 c I例子18 p1 z3 Z% O1 }0 q' D
-------------------------------------------------------------------------------
1 E" g/ \/ s6 N# CArc Layout
7 A: q j2 D" t" @' ^
% O% W* q7 |; z; AHeader:
+ }# o3 C- M! Y/ d e& L0 - Magic - Chars(4) //"ARC "" ]& a/ z# y; Z/ L# l
4 - Version - Int16" e8 \6 U' V& f' J( v1 ^' ]2 {- c
8 - FileCount - Int16- s& c& w: H) [, A' }1 K6 O- |
9 `2 M1 V! C6 `/ t& u2 V. FFiles:
8 |( u1 x# ?+ O' h/ g5 q, S% f- S+ B0 - FileName - Chars(64)
8 s1 v" N* Z! ]' j64 - Unknown - Int32 //Not important, some sort of flag5 x0 f8 L! s1 h+ r
68 - CompressedSize - Int32
: J+ c k6 _7 W72 - DecompressedSize - Int32
, F a% ?* O9 k1 D) w76 - Offset - Int32$ z; L) x& X& |' i
-------------------------------------------------------------------------------
( k8 K$ a( K- z1 [! I& _# e例子2
, Y% V( y t7 V' `, c: l6 v! Q) w& ?4 y$ i
Magic:) }" X% e' C) G9 u' C+ p* R1 `& z4 r
DE AD C0 DE JUNK6 K- t( N+ m# `0 L8 Y1 k; _& U- H
00 02 00 00 Version, if <> 200h, then no XOR-encryption of filename5 B* V+ c9 a7 Q0 z0 a% r
- o) D0 J8 ?' l( k/ Y3 x6 K2 d a( L* `7 H# J+ e" } r) u
Table:0 b$ h5 R( X; W# ]
s7 S! P6 S0 Z
db len,description(len-1)
! D, w: c9 w9 M% _. m1 f7 Hdb 0
& M k# N0 E3 {! Edword number_of_files
4 f& K* T) f0 w9 u" H/ Z) ~3 q) J# Q% _7 J. W
byte length name2 z, W( w3 y( V5 y
bytes Name, (xor-value: 44h, only if Version 200h)9 D" X8 w/ D' v: P, O% x
dword Offset data; k# H3 i# R2 S
dword uncompressed length of data
7 H5 E, g5 l) N% _0 Qdword compressed length of data (or 0, if not compressed)
) h; \) m6 x' J4 b! s3 c4 J: {& ^; pdword 0: n5 e @) e7 Y1 h; }( ^* C
dword CRC(?) ;only if Version 200h) Z: k+ h, ^2 @4 r2 u
dword 0 ;only if Version 200h- X2 p* A% o' s
-------------------------------------------------------------------------------
# e/ Z k" S& s5 [' |5 G例子3. u3 }! i$ R/ B, e
' H+ i1 c5 |) n9 n, w3 l% S/ K! ]
Header:
0 H r( }; Z2 S0 @: b9 }$ K# p$ A) qdword "VXGB" - Marker
$ y7 P/ ]: M# s( m" ?dword ? - size filetable
/ \8 T5 u3 i- ?$ j6 m, |' C& E) s" z/ l% c$ |7 p
Filetable-entry:
' q) F: t" T) Q5 b( Pdb ? dup(?) - file name, variable length, 0-terminated3 ~0 I" K* I* W/ |
dd ? - Length of data
9 A- v/ E% B& K4 n6 N5 R------------------------------------------------------------------------------- |