在制作解包器之前,我们一般都要把包文件的格式写出来,在这个格式的基础上就制作解包器。
( w2 ^' O7 f/ i& y' ]甚至分析者和解包器制作者不是一个人也没问题。* e; d, \: k, g( c9 P/ O4 O
在此公布一下包文件格式书写的大致格式及一些例子,提供给大家汉化时参考和学习。* r3 N! w, k9 j
" X8 {: I+ k+ _, B% E) W
一般包文件分为9 p' H9 C4 A( `! o
Header ]6 q6 ~3 o# O% O
Filename table* c3 R5 T# C/ D0 z$ z3 y
Body
6 r. J1 r; p0 d. DFooter
' A4 c ]! S; k5 o" B" w" n& K# m几个部分,Filename table里一般纪录了每个子文件的offset和length.file count等。! ^! _4 f2 h0 A( f! i% W, h- o/ v B1 y
Filename table一般在文件头部,有时在文件的尾部。有时还有Dir table.! W% m) D; s4 c4 x( U
在书写包文件格式的时候只要准确包含了这些信息即可,具体占多少字节当然是必不可少的。
0 X2 M' e( S n* _1 ?& s5 J5 a, s$ E0 l
下面公布一些例子
# |( K, Q. E, a7 E7 k3 N
- m$ ?5 Q R: ]" ~# p4 G例子1
1 y" U: `% t/ j- X7 H: F-------------------------------------------------------------------------------
9 I8 D1 J- P4 e' I: o& XArc Layout$ F, X* h7 e" g+ x0 m* ]
# Z( [2 o# j. }) T @5 ^, \
Header:, L0 D3 D5 K/ Y4 X- R% W! \1 i8 m$ p7 S: q
0 - Magic - Chars(4) //"ARC "
\% y. C, d l4 - Version - Int16
+ _) b( |' U, X& i& Y% s: P6 N8 - FileCount - Int167 a; c, n* g4 v- c2 G6 h
! @1 O& Q' v w3 q9 FFiles:
. D5 M6 b5 @/ v+ Z0 - FileName - Chars(64)$ o) m! W+ k3 A; ?
64 - Unknown - Int32 //Not important, some sort of flag5 p! z& ~/ N! @5 x6 h$ B( l
68 - CompressedSize - Int324 a1 I9 l6 G) b; f- @3 g
72 - DecompressedSize - Int32
' ]- K( r, E; z7 c) z* s! A' W76 - Offset - Int321 E1 ~. r6 t6 K9 @# ^. c
-------------------------------------------------------------------------------
/ z( p1 L6 z0 l2 b: G) g0 W2 q例子2. A8 M1 h- i6 y2 M$ _
0 W# M/ r% D* t% X( z
Magic:' B2 G, e/ Z$ c) m5 W: h# S
DE AD C0 DE JUNK
/ ]! Z4 R6 Y. O p. p! a00 02 00 00 Version, if <> 200h, then no XOR-encryption of filename2 S$ R. p( D( i* E3 Q8 C( X& K
* u; \; A& w9 Y- v" @3 e+ L
* d! r. H7 o @5 b7 ETable:
5 } Z' G) |5 P4 {8 W* J- S. J6 s( C" h2 t
db len,description(len-1)
! K5 P# ^- c! E" W+ A Qdb 0
3 {, h3 Y5 N5 qdword number_of_files
8 W* z" J. X$ r, K5 L! T# P' D' X( W6 _, W" s$ o
byte length name
' ~7 s3 w; R F9 S: \2 B- Qbytes Name, (xor-value: 44h, only if Version 200h)
2 G# l6 V" M% v: \dword Offset data
* b, K3 H* `: y! ]2 Bdword uncompressed length of data7 W7 S+ r6 ^$ f' i( W; F9 `
dword compressed length of data (or 0, if not compressed)4 x( [+ _2 p8 Q
dword 0' @3 c5 y n- @
dword CRC(?) ;only if Version 200h
1 A; n3 a1 X0 z/ s/ p) ^* idword 0 ;only if Version 200h. q: R2 d L' I1 O& O O1 s" D
-------------------------------------------------------------------------------6 a& G* j) D4 C6 e2 j/ w
例子36 d) g8 q* s9 d8 _# ? q
$ K f5 `' X+ L+ A9 LHeader:
7 k% A* U: @' B `dword "VXGB" - Marker
9 Y0 c& ?- n3 |- i8 n9 a2 cdword ? - size filetable
5 j* i6 o0 y3 F/ P7 k( w f% z
& u0 h" P1 N! S6 X& tFiletable-entry:2 Y7 G# g0 {( a
db ? dup(?) - file name, variable length, 0-terminated
& \' q. }# X- V7 jdd ? - Length of data+ J) K4 P6 `# W) ]
------------------------------------------------------------------------------- |