放上老外发布的FPAK文件解包器。
% e" W3 Y$ B) ~% \! o' K; \+ Z8 q% ]( k% S' p6 K; V! j# V( Y& |
# Tibet Quest
- k' n+ n2 ~. T' D7 n# script for QuickBMS http://aluigi.org/papers.htm#quickbms9 G, j4 T1 a/ E- j
quickbmsver 0.2.1 # needed for the "binary" type used for MEMORY_FILE2
; X3 B+ l3 _" Yidstring FPAK- c7 H; s) G! W
get DUMMY long3 V* ]6 u4 u: i! l
get DUMMY long* \3 L8 T: n: @ p
get FILES long
0 b% C" P, ?# [( k7 M8 nset INFO_SIZE long FILES0 \5 l5 g4 o8 ~; A+ N
math INFO_SIZE *= 73+ D& ~ R. X5 J; d/ [
savepos INFO_OFFSET
( ^8 ^8 l7 \" C6 Q7 ?log MEMORY_FILE INFO_OFFSET INFO_SIZE0 Q# Y3 N4 C+ ~1 E) w9 j+ `8 ~
set VAR_A long INFO_SIZE
, H" B: z5 `* D6 bmath VAR_A -= 0x27
# T0 q/ O( I3 j/ a. rset VAR_C long 0xad
; `( @% g% b% f1 V8 D, Oset VAR_D long 0x6f0 w$ q8 \) U$ U& M* S
for i = 0 < INFO_SIZE
$ A, k9 ^0 T+ }# x) l; E ?7 z( | math VAR_A += VAR_C9 M# m& j# r: E$ s
math VAR_C += VAR_A, {* J2 Z& z! S# ]2 P e7 N
math VAR_D += VAR_C+ _ `/ ?. J, J2 w
math VAR_D ^= VAR_A
) t# i) E1 D' }1 A5 ~" A math VAR_A &= 0xff # not needed
' O1 x; g( b' A( S( I9 f math VAR_C &= 0xff # not needed+ x4 _$ n: W; P. e2 i
math VAR_D &= 0xff # not needed9 X- K; n& S8 s% {" R8 q+ ~
getvarchr BYTE MEMORY_FILE i
7 [: q0 g0 l6 R1 z( p math BYTE ^= VAR_D" m' h+ p! w- B: F8 V; {; [7 y$ o
putvarchr MEMORY_FILE i BYTE! s" K0 v I. w! T
next i
* E' H, L6 {9 i9 \0 K' s: Yset MEMORY_FILE2 binary "\x7B\x47\x85\xF0\x91\x8B\x2C\x94\xA7\x55\x3A\xF6\x17\xB1\xC2\x06\x6B\x64\x28\x8A\x86\x09\xCE\xA2
4 v' G3 j. M: `% y" f( S' h\x9F\x58\xDE\x46\xAE\x24\x63\x74\x69\x9D\xFB\xFD\x6E\x50\xE0\x12\x57\x1C\x08\xBC\x1B\xD0\xD9\x81\x01\xE4\xC7\x07\x88\x16\x765 c3 ?' _/ A4 t+ D+ O5 A
\x49\x23\x05\xAD\x51\x38\x78\x45\x89\x5D\xCF\x2E\x20\x26\xB6\x3B\xC3\xEB\xEF\x22\xA0\x19\xC6\x6A\xBB\xA1\x41\xF5\xCB\x73$ ]; V, @6 B7 u! R7 E
\xED\xEA\x9B\x90\xA9\x2D\xAA\x15\x27\xDA\x37\xF9\x40\xA4\xE8\x67\xBF\x1E\xB8\xAC\x60\x53\xD2\x54\x1D\x68\xF7\x4F\x00\xC4
S7 Y' E/ D( y" r; S% E\x5E\x33\x29\x14\x0C\x3F\x62\xFC\x93\xC1\xB0\xB4\x9C\x1F\x72\xAB\x11\x18\x87\xB5\xE9\xF1\x59\xF8\x36\x5C\xA3\xE3\x79
) l9 e# i2 f5 ]0 c E0 \\x8C\x2F\x0A\xBA\x44\xD8\xC8\xA6\x2A\x03\xCA\x1A\x10\x35\xF3\x77\xD7\x31\xB9\x97\x43\xF2\x3D\xDF\x21\x52\x65\xB2\x34
C0 k3 c0 E+ N9 Y1 @: _0 `\x6F\x7F\xD3\x2B\xC0\xCC\x6D\x75\xDD\x0D\x13\xDB\xE5\x02\xEE\xB3\xF4\xC9\xFE\x66\x5B\xEC\x7D\x83\x5F\xCD\x8E\xE6\x84\xD4
& D, B: p0 B* X5 v\xBE\x32\xD1\xA5\x56\xC5\x70\x9E\x0B\x9A\x80\x6C\x5A\xE7\x7A\x7C\xB7\x7E\xFA\xDC\x0F\xE1\x4B\x4C\x8F\x4A\x04\x4E\xA8
! P* o3 P- u7 y8 w- i' G\xFF\x3C\xD6\x0E\x95\x39\x82\x42\x3E\x61\x96\x48\x8D\xAF\x30\xE2\x71\x4D\xD5\x25\x92\xBD\x99\x98"1 E I4 ]( p: H6 K& Q
for i = 0 < FILES9 t0 A1 W5 M1 p1 z8 n
getdstring NAME 0x41 MEMORY_FILE. ^: e: ~- g7 ~% Z" @# s( q3 y
get OFFSET long MEMORY_FILE
_+ D4 N) K" t/ M2 T get SIZE long MEMORY_FILE8 X7 t, G7 C/ d
log MEMORY_FILE3 OFFSET SIZE- t) R& u3 s. ~$ v4 t
for j = 0 < SIZE
@8 T, g- u {- Z( t getvarchr BYTE MEMORY_FILE3 j% s8 H: R z3 {9 Y
getvarchr BYTE MEMORY_FILE2 BYTE
, @. l* b) m6 k! ] putvarchr MEMORY_FILE3 j BYTE& M* w$ u2 h5 J/ b) w, N' Q
next j' e9 A$ D0 l4 J8 z+ J3 v
log NAME 0 SIZE MEMORY_FILE3, B/ b0 M5 g, X& y! a) y4 w8 G6 Y3 f
next i |