在制作解包器之前,我们一般都要把包文件的格式写出来,在这个格式的基础上就制作解包器。
% F! \, g% e- ]$ h8 i甚至分析者和解包器制作者不是一个人也没问题。$ {5 x! q- x `5 D! l) o
在此公布一下包文件格式书写的大致格式及一些例子,提供给大家汉化时参考和学习。
8 I+ ^. G H2 v; d, F( o( {3 J
1 C/ t+ e/ [! [2 N3 p一般包文件分为/ P- `& k3 K* y1 O8 e
Header% R' Y: A0 V" V5 z
Filename table
9 q; V! `( }' j. k0 {. N8 |Body- X- \& R$ u- d* @3 \0 Z( e- l3 G
Footer
/ Y' B- i5 H2 ]& e# t! F几个部分,Filename table里一般纪录了每个子文件的offset和length.file count等。' B+ P6 _6 ^- g: n$ w$ q
Filename table一般在文件头部,有时在文件的尾部。有时还有Dir table.
( d: @) M2 m' v( V1 \) F. y7 r0 h在书写包文件格式的时候只要准确包含了这些信息即可,具体占多少字节当然是必不可少的。5 h6 ~1 h7 l* Z+ |
& j' b8 E& l6 k- k( X% l+ p( ~ n. o
下面公布一些例子5 a. {& g" o7 M. q% q5 R8 {% ?. }; @% I
8 i) h7 X+ e$ T7 `# P2 r. w+ }例子1
( A/ Y4 f- Z$ [, F* f0 L-------------------------------------------------------------------------------
6 ?, _; p+ G, z, gArc Layout/ ~% P) L9 I4 \) o1 G% d
# M, Y, g5 ~9 c. }( E6 T: i7 v- tHeader:5 E) Y, o. [4 w4 b. q1 B( h' i& V/ m
0 - Magic - Chars(4) //"ARC "4 v# t: o* E, L' v% H9 y
4 - Version - Int16
! D7 l( ?$ r* @- b1 e Y8 - FileCount - Int16/ ]6 o8 |: L# R+ T: ?3 J& j( s
6 K3 p, M2 H* T
Files:0 `# {, J& J/ T7 ~
0 - FileName - Chars(64)
% G/ J i& f& w9 v, k6 _64 - Unknown - Int32 //Not important, some sort of flag
3 ?7 x, ~2 A9 ^ n% ?0 L: F# S68 - CompressedSize - Int32
' E+ A+ R3 S) J) e( e72 - DecompressedSize - Int32; P: t" [7 b0 I7 x/ u
76 - Offset - Int324 D8 S, U7 m4 v$ B- H. Q
-------------------------------------------------------------------------------& a |+ Y; c" V$ a
例子2) x# y" n4 A- i
) D3 B/ ?' P& e6 T) O9 ]
Magic:
6 q/ M1 M8 W0 b. ~DE AD C0 DE JUNK! e2 T, S: e( k# e) ~: R
00 02 00 00 Version, if <> 200h, then no XOR-encryption of filename. T' Z7 O+ P: [6 W
1 Z% _ @- L! y8 _: X" |
" d2 Y* o( x! q5 Y4 o: S1 [& N% A; rTable:
; ]# ~0 C$ _3 ^8 w5 Q5 M/ W, o& D/ f" I2 w
db len,description(len-1)
9 \ N ]% `9 u( v& v. odb 04 c- `: ^& g! N! u2 g$ A
dword number_of_files& a+ \5 u; Z9 ?) Y* ]" f+ H
7 g$ i5 C6 T4 X7 @% N' Xbyte length name6 A% I$ S2 ^9 F+ _$ k2 w8 l8 z
bytes Name, (xor-value: 44h, only if Version 200h)
* J3 L, n0 k) ~" k) R' }( Gdword Offset data
! k2 e4 R. v; f; Q# Wdword uncompressed length of data3 f8 s- H8 U8 @' R$ D6 u
dword compressed length of data (or 0, if not compressed). v0 I# j3 X( s: o
dword 0; d7 R/ i/ t+ m7 `( A
dword CRC(?) ;only if Version 200h
. K1 C- l3 g1 k& jdword 0 ;only if Version 200h8 k7 b) H" g# a* J. l0 k: r
-------------------------------------------------------------------------------- l, Y4 x3 C* H# {: C
例子3+ j7 k3 N8 l" J
2 c9 ~; r& \+ G3 x4 T/ }Header:# o" k# K3 @# _3 Z# x( _) T
dword "VXGB" - Marker
" A* \5 x) x5 S w+ G* m) mdword ? - size filetable) v: T3 i, r! x6 i& T
, X1 g. l5 @2 s Y! w) `5 O8 l
Filetable-entry:
/ f6 r2 v" p4 T. d% Jdb ? dup(?) - file name, variable length, 0-terminated. r. y4 r8 U" U" M/ e
dd ? - Length of data
3 i4 q# C! k \------------------------------------------------------------------------------- |