在制作解包器之前,我们一般都要把包文件的格式写出来,在这个格式的基础上就制作解包器。
8 h m! x; k5 Y0 R7 v甚至分析者和解包器制作者不是一个人也没问题。
4 _ O3 ?1 j6 u* h6 Q+ t在此公布一下包文件格式书写的大致格式及一些例子,提供给大家汉化时参考和学习。
2 b+ z9 B, e4 A7 x# @' L1 c6 @1 I. |% B" g$ S' c+ r2 e7 o' n
一般包文件分为
# g( ~7 v" I9 u2 a! m3 uHeader! X9 i$ F# [) p, w5 A: w! j) k
Filename table
$ T' y. d0 j4 A0 IBody9 @( _0 m$ N. q6 \4 _
Footer/ x; J5 O. F" d7 H$ O
几个部分,Filename table里一般纪录了每个子文件的offset和length.file count等。. i" q2 V2 M! l
Filename table一般在文件头部,有时在文件的尾部。有时还有Dir table.
& r9 _8 H4 n, T- f在书写包文件格式的时候只要准确包含了这些信息即可,具体占多少字节当然是必不可少的。+ p, X+ k4 N; e! I- r+ Y2 e7 Y+ a
& e& C1 q- y: g9 F5 M4 v/ ^+ p下面公布一些例子; b3 i2 ]$ C4 @
, U& f" b! t* M- n( C例子1
3 n3 r* ?% X4 O# o7 }1 l$ r-------------------------------------------------------------------------------
! T- D2 S4 H4 @( f$ i% M9 c2 @Arc Layout
7 ?# N* `" l& ^* c2 S3 J2 ~1 @+ }+ H, `. L' ^
Header:$ I! P+ e/ m! h% z. v Q3 H
0 - Magic - Chars(4) //"ARC "4 ~' _$ E6 `( V, D* {& V2 a
4 - Version - Int16! t$ l* {% ~5 \8 ?4 [
8 - FileCount - Int16
% ~2 [, i0 c; m9 b- @* _, e
8 b( ^; x& s/ G0 |Files:
% t) l# r8 [6 y( O: o3 F4 Z0 - FileName - Chars(64)7 v7 B# }/ V7 i* Y; G/ \, G
64 - Unknown - Int32 //Not important, some sort of flag- ?7 B8 U# m) ]! {
68 - CompressedSize - Int32
1 m; n2 D _4 w: ~1 S72 - DecompressedSize - Int32, j; W, i9 v, K2 d* s
76 - Offset - Int32
: ~% `6 O$ K7 V9 ?; m, N2 k-------------------------------------------------------------------------------' X- `% n. ?6 B& `
例子27 E7 j& J# [; I. C% Y$ D
# M V, Q) u& f6 M" s- fMagic:
4 x1 S0 o, M$ @. b8 c% M8 w9 GDE AD C0 DE JUNK
& t4 O& ] _' _: {00 02 00 00 Version, if <> 200h, then no XOR-encryption of filename) g0 K1 N( B7 l8 \' W. n
3 C! J6 d/ [ i i
! _9 Y' q+ Q5 v1 a, k# n" f( m+ Y9 w# E5 |Table:( B8 H; r L. ?2 K# C1 p
9 m+ i+ K) J5 u; o# C& Gdb len,description(len-1)
3 B' G. f" U8 w2 Y- V5 udb 0$ W& s6 X5 p! B5 E4 X; V
dword number_of_files/ U: R7 b T4 r6 `8 Y B+ v
; Z7 n; G0 j; l. ebyte length name
( [ w9 E9 E( c2 a2 u8 \bytes Name, (xor-value: 44h, only if Version 200h)
( H' V# Q3 X/ d0 \. adword Offset data8 @2 v: Q$ N% B- d0 i1 d$ @
dword uncompressed length of data
% V3 s! p; S' z! P" Q+ [dword compressed length of data (or 0, if not compressed)9 q6 D- a5 C3 s" @9 b0 S- q
dword 0
4 O+ b5 F) ~6 c1 |) Pdword CRC(?) ;only if Version 200h' J1 E6 z3 k+ v& N" a3 a& D5 R
dword 0 ;only if Version 200h
0 I& G N( A$ F$ O9 v-------------------------------------------------------------------------------
' n7 s3 p- K4 P5 i. o例子3/ m4 `9 \5 J- g
; G" w: s( s* E# s8 G q
Header:: o: E) T7 x# F
dword "VXGB" - Marker2 i2 L# _; X: y8 i! f7 e
dword ? - size filetable$ W- Y3 L L& J/ o0 s
. i, d. i9 {# g9 [$ mFiletable-entry:/ O( `& Z1 B n5 \" g" g
db ? dup(?) - file name, variable length, 0-terminated
# P0 `& w& m Ldd ? - Length of data
& o/ y. X3 W" ^& G# P* b N------------------------------------------------------------------------------- |