在制作解包器之前,我们一般都要把包文件的格式写出来,在这个格式的基础上就制作解包器。
4 I' N% q. D' e/ P甚至分析者和解包器制作者不是一个人也没问题。4 T" ~7 B- ]) t
在此公布一下包文件格式书写的大致格式及一些例子,提供给大家汉化时参考和学习。
* c d4 O7 O9 r5 f0 X5 E
) i6 H* ^$ l, s# F+ r0 {一般包文件分为
6 R! Z7 b w4 y/ fHeader
) o& V, r7 I( NFilename table
5 z. l: n) @ x2 m8 h) y4 UBody$ `, g! g& L* @
Footer
) H- s; t; y1 C( C几个部分,Filename table里一般纪录了每个子文件的offset和length.file count等。
7 p6 |$ _/ p8 u# i# ^& uFilename table一般在文件头部,有时在文件的尾部。有时还有Dir table.
, `/ J0 G& v0 c) K7 X在书写包文件格式的时候只要准确包含了这些信息即可,具体占多少字节当然是必不可少的。
8 a( X. ^: w1 s) C# V6 v a! _- ]* D6 E
下面公布一些例子$ R0 Z' |/ ]! C. H; Z
% q' L, F7 o; |( p- O例子1
; Q* x+ A' M h-------------------------------------------------------------------------------
) F$ Z0 V, Z2 k FArc Layout
: G% C+ S) j2 A5 c& B: N
( D- ]/ _* B0 i, y! i, yHeader:- t8 n- R$ n$ I; ]8 F+ v
0 - Magic - Chars(4) //"ARC "
& t8 _. w. a& O+ B# ]2 v U4 - Version - Int163 ~3 t3 I3 [$ G1 i$ `9 _! S4 F5 G
8 - FileCount - Int16/ J: N; B8 W8 A6 d; b0 ]( R+ v
" n" U) Y) p( c% c0 z- \
Files:- D$ e" o/ e: l ?- Y
0 - FileName - Chars(64), ~8 V2 p, Y9 N3 {
64 - Unknown - Int32 //Not important, some sort of flag
! g. l7 n( ~& j# B! `# }5 r68 - CompressedSize - Int32
9 a5 z. Y* D& t' N* E* J% o6 L6 b) L72 - DecompressedSize - Int32
* D+ h4 S! G# _76 - Offset - Int32
% I+ K2 T# k9 e. J-------------------------------------------------------------------------------
9 j2 f. J0 M/ a2 w% H4 T例子2
7 i1 L6 B- C9 M; |: K: @+ y9 ]5 l& ~" | P5 [# Y2 {! ~
Magic:1 P8 V' V/ O. O* V# E
DE AD C0 DE JUNK
7 Z; Z- p$ c) v00 02 00 00 Version, if <> 200h, then no XOR-encryption of filename% q, t+ s" j( W3 D
2 x4 O9 b2 s- L* R5 Y0 I% q* b
6 r& g0 t. m$ W5 D' Z& W6 VTable:3 d. w# e: f0 Z# M- L
6 l& }9 F4 O" h1 L* `db len,description(len-1). ]- Y* M: ~: | t$ _
db 0* c3 }* W0 I+ M& ]2 R
dword number_of_files! Y, Z; H( y& `* g* W9 W p2 z
7 i( M1 k3 L& E, n6 l6 u" Q. F8 |
byte length name
" G! t, E3 K8 ~' {7 O# i& F& w: Obytes Name, (xor-value: 44h, only if Version 200h)
" y7 r7 R$ H' t2 c# h N) Xdword Offset data4 T" |+ T' C! T" A
dword uncompressed length of data
; x2 r! p, l) t( ~( Y. }' |dword compressed length of data (or 0, if not compressed)
4 ], l" u' N2 H9 N4 [6 [2 g# z/ wdword 09 r4 i, t, w' @3 }: m, B3 |" h1 K
dword CRC(?) ;only if Version 200h9 m4 d- |- e4 w; ~) D
dword 0 ;only if Version 200h0 J8 c" ^7 \7 [7 J5 r
-------------------------------------------------------------------------------
; k5 G1 y% i# R例子37 c& e! y0 i( C/ ^9 T- u r
0 n9 z7 o5 g7 ] k+ u8 Z
Header:7 B9 t- _" f. `# E" ], l6 O3 R. d
dword "VXGB" - Marker! q0 C$ ]- @8 m, Z( ]
dword ? - size filetable" } g3 g* e3 e$ q. e
( O: S/ [$ F! I% j& v4 r' E
Filetable-entry:
. l q) ^9 r) n( ?5 }& rdb ? dup(?) - file name, variable length, 0-terminated
0 P$ z& d# f. B9 \. P. \dd ? - Length of data, L' L3 k$ s2 o' e
------------------------------------------------------------------------------- |