放上老外发布的FPAK文件解包器。
9 v. ^, J: A$ e& S) [# Y
+ i; L9 E. L& Q( m) ?6 L# Tibet Quest6 s* e2 Z/ ?2 U' ^
# script for QuickBMS http://aluigi.org/papers.htm#quickbms
9 z @, i% {- T9 {" j6 F7 a! w: Kquickbmsver 0.2.1 # needed for the "binary" type used for MEMORY_FILE25 _9 `5 R+ C& D4 j! C. h" V. @
idstring FPAK; W3 ` u6 s& k8 j$ ^7 S
get DUMMY long
]/ [8 t1 w0 j9 W0 `$ M" kget DUMMY long( A Q! v2 k1 N4 g5 t# w
get FILES long7 k: o8 T( h/ V( u' G0 ?; U
set INFO_SIZE long FILES
% H, t. d, t5 |1 Imath INFO_SIZE *= 73
6 @, L5 q4 v2 n$ d; Z) w$ p- v" Jsavepos INFO_OFFSET7 w% Z" s0 X7 ?
log MEMORY_FILE INFO_OFFSET INFO_SIZE/ d- X4 h$ [& A1 z0 t! Z5 {
set VAR_A long INFO_SIZE4 O7 W' a8 o+ a8 M
math VAR_A -= 0x27, q+ X+ W4 U0 R
set VAR_C long 0xad& N1 C# T, l& e3 [: z! C
set VAR_D long 0x6f
8 d, b, D* F ^+ g6 V" Tfor i = 0 < INFO_SIZE) K) Y4 I6 [5 ~# z. C* @
math VAR_A += VAR_C
_& X7 W' q0 z" F, u math VAR_C += VAR_A- A! k: N; t& G( W( G6 p
math VAR_D += VAR_C# h2 k) N% r; C7 T2 M4 M; ?
math VAR_D ^= VAR_A6 C, c+ F( g7 W) j( E3 ^
math VAR_A &= 0xff # not needed m8 ^. c% g+ y( J2 Z! d9 q) J& Q
math VAR_C &= 0xff # not needed
?( O0 b( b$ ]: n3 q3 ~! r- U3 I math VAR_D &= 0xff # not needed
. O1 A+ \& }! @, @* \. x# W getvarchr BYTE MEMORY_FILE i! \) R7 l6 M! j% J Y7 P
math BYTE ^= VAR_D
( Z, O( i( j* v putvarchr MEMORY_FILE i BYTE
- l) T3 ?' k/ J+ W4 R8 N7 Onext i
2 N. J: [1 B" ~5 d( A( xset 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
. i: W) g% M+ u5 z5 [\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\x762 o* g4 j! P7 c8 B* B
\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
: c" v! Z+ G `& P' B* B) L9 q\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
4 e2 }9 |. [2 F) P$ ?\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
% g7 Q7 k' d/ Y; [, f\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. {( O( W5 i/ _) g, C' w s
\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
8 U7 ?$ `1 K- O& M\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
; ^+ H \1 T. U/ ^+ |' 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"& y6 E5 C% p. A2 K% D+ V ]- S
for i = 0 < FILES
5 L, `2 b3 {! J3 z+ c& P! D4 q getdstring NAME 0x41 MEMORY_FILE
% e5 A" o7 B4 D1 @! \) ^0 n get OFFSET long MEMORY_FILE- U/ [3 Z" w: b0 v, g- O3 t
get SIZE long MEMORY_FILE
) s4 o, V/ w0 P- @ _8 v. S log MEMORY_FILE3 OFFSET SIZE% ]0 T6 H9 \4 l$ F) h
for j = 0 < SIZE) f9 S. a9 I5 A0 [
getvarchr BYTE MEMORY_FILE3 j: P; B2 C3 K3 w
getvarchr BYTE MEMORY_FILE2 BYTE
- V T* D6 s, X5 j# z6 `+ x putvarchr MEMORY_FILE3 j BYTE& b5 V: P1 D0 b0 T
next j
1 h6 T2 S' x/ L log NAME 0 SIZE MEMORY_FILE3& J' V# Y. w. D: D2 p7 i" O: ]$ C1 I
next i |