在制作解包器之前,我们一般都要把包文件的格式写出来,在这个格式的基础上就制作解包器。
3 c- H6 T; ^# Y! g3 ~* k& u3 [) ?甚至分析者和解包器制作者不是一个人也没问题。
7 l, ^- d. q( J3 O* |; n5 S2 Z在此公布一下包文件格式书写的大致格式及一些例子,提供给大家汉化时参考和学习。( u7 e& X- \+ I9 O6 ~2 L5 [' L
4 i9 g. |8 _' X: [! i8 \$ }# o
一般包文件分为
) f. t1 T6 Z p: M$ oHeader
( L7 k: @5 X, t( yFilename table! x8 m! X3 `2 c* G/ p
Body6 D, H2 W/ a, b
Footer
$ R0 a* D# R5 g- V# }几个部分,Filename table里一般纪录了每个子文件的offset和length.file count等。
- n9 z, O5 B) `8 iFilename table一般在文件头部,有时在文件的尾部。有时还有Dir table.% ~8 c! \: P1 q- Q) \
在书写包文件格式的时候只要准确包含了这些信息即可,具体占多少字节当然是必不可少的。- X4 @, X& k7 ^% D0 z
% G* N* r( f6 s1 R下面公布一些例子
7 t" `. Y2 [: x3 Z9 T: [& s( O n4 B0 m0 E/ n
例子1
/ o# X1 Q% o4 z-------------------------------------------------------------------------------1 K4 z# @0 ]; m0 w C1 W$ [
Arc Layout
- u5 f, W: [ a4 d* K
/ \" l$ O0 G" Q! g) s1 OHeader:# G! Q" G6 [+ e5 I+ e, \. Z
0 - Magic - Chars(4) //"ARC "
/ B1 }; C8 S/ ~' S) X4 - Version - Int16) v; Y. d" y) L: \' A: f
8 - FileCount - Int16
( j1 m. y' z8 t% G8 q$ J4 y& e; b. p1 |
Files:8 `. M+ A$ C4 c$ i u i0 S8 b1 s
0 - FileName - Chars(64)3 E( X: H) Y4 m/ O7 S
64 - Unknown - Int32 //Not important, some sort of flag. h" ^$ o- E/ {, a8 y \0 V1 t
68 - CompressedSize - Int32
A( [0 c! ?: j5 K( M9 t$ C4 u7 {72 - DecompressedSize - Int328 T0 _* ]- z: {. g
76 - Offset - Int322 `( k+ L1 B9 N% ^ a
-------------------------------------------------------------------------------
* |+ k' x4 @5 B例子26 b. a" S) e( @, j1 n
- ~" Y6 h( e1 s/ n$ k
Magic:7 X m8 J+ X( c1 H! K
DE AD C0 DE JUNK
, p- {& B' t3 k/ c5 V; v00 02 00 00 Version, if <> 200h, then no XOR-encryption of filename
. O" e5 D! @& Y8 @- _& y
2 N8 t! h% f. j3 V& H' \, V& r% b. T: o, J- [: f C
Table:
/ J6 x; d, U! i" |- s% h' s) G! ^3 N% m
db len,description(len-1)- K }, a4 b4 w5 m% }+ C! V
db 0
) k+ P: R/ ~3 R, R, P" ], M. cdword number_of_files% t* W8 [: f: R% Y4 S; Y/ b: e; G3 T
$ b( F% }9 H* i5 k1 y- D5 b' x4 @
byte length name
, T% s' g& C; K; c# jbytes Name, (xor-value: 44h, only if Version 200h)3 t0 Q3 @8 y. N6 w( ` [4 b7 [4 w/ [
dword Offset data" ]2 `: z3 b. c( Q* `# J
dword uncompressed length of data
: s, N2 Z) n4 A" K1 j" mdword compressed length of data (or 0, if not compressed); v3 Q7 ?" ~; J' w/ U) ?, x
dword 08 R: |" j; u, G$ p, r. q4 _
dword CRC(?) ;only if Version 200h+ H0 `" p& y2 D+ m T- m
dword 0 ;only if Version 200h
+ ]/ t! i9 k9 o6 t S1 f-------------------------------------------------------------------------------
' u. ^) O W4 l例子3& Q$ z$ u7 c7 _& Z& O) Y# }
/ Q4 ]$ k* D& I2 aHeader:* J! V8 V5 ~! @1 d6 _
dword "VXGB" - Marker& G: F6 H4 F1 I& W
dword ? - size filetable
: {" a3 B' I6 O" ]' O$ t
9 @9 R5 U8 l0 p( E, m: `Filetable-entry:0 ?) r% O# U) H7 T6 S. C/ q
db ? dup(?) - file name, variable length, 0-terminated1 Z6 W# c5 L2 W$ z
dd ? - Length of data
, [1 I. m. }9 S7 ]* c, K; i------------------------------------------------------------------------------- |