放上老外发布的FPAK文件解包器。0 t ]9 r+ @. ]9 g
- ]3 K8 r' z5 S7 N4 I# Tibet Quest
7 ?! v @- f" P# script for QuickBMS http://aluigi.org/papers.htm#quickbms1 g; ^3 w0 n# r1 _
quickbmsver 0.2.1 # needed for the "binary" type used for MEMORY_FILE2
9 _. W' f% n5 B9 e2 T& V# P/ C0 Sidstring FPAK% i% G% ? ~* {6 a f! Q4 M7 `" ]
get DUMMY long
4 B# e/ @6 N! R4 T& b; D/ A0 Oget DUMMY long! J% y- S! A/ @. m( O
get FILES long
@! f% ] s' W9 |$ b. Hset INFO_SIZE long FILES. h" P0 i& s* w8 \
math INFO_SIZE *= 733 B% L. n: |6 R& d- c' r* `/ ?
savepos INFO_OFFSET$ `) E/ |, i7 P" s
log MEMORY_FILE INFO_OFFSET INFO_SIZE; d$ {0 W+ \- D! V0 Q7 S
set VAR_A long INFO_SIZE
( L8 `/ ]8 E9 A' Cmath VAR_A -= 0x27
1 ~/ f7 B! \9 o/ dset VAR_C long 0xad6 F+ u2 M& C6 V' p8 w. J
set VAR_D long 0x6f/ n( g# m/ p' ^0 ]
for i = 0 < INFO_SIZE
, m. {% v) S6 c+ W7 u" Y math VAR_A += VAR_C3 @0 e6 V- F* ?3 X# [3 A
math VAR_C += VAR_A
3 i8 k: U: f0 n; H, H4 I; c+ v math VAR_D += VAR_C' D/ A* X0 ]8 C' I: Y p
math VAR_D ^= VAR_A: d* p6 R# m& ^) p% f& ^
math VAR_A &= 0xff # not needed6 u, l3 p: |. u" S% O, M% j& R7 r
math VAR_C &= 0xff # not needed
4 k; T* F( w1 |* b9 m( Q math VAR_D &= 0xff # not needed
* U7 t) A }! ]/ f+ B u getvarchr BYTE MEMORY_FILE i
! Y! N6 a2 p8 w0 y: Y+ X' W math BYTE ^= VAR_D
! k/ Q% a; O* \; k putvarchr MEMORY_FILE i BYTE* T7 e$ @% r t7 T4 [
next i. \& i' W2 G# l
set 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
! V8 a8 ]* ]0 A\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\x763 [3 Z$ Z6 J) w( r! k+ o. }
\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
6 k! i/ o, M" N7 S. _" G\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 G- ?0 s+ H) t8 [; `\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
% x% z. i6 F7 K2 t\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/ y) A+ F& `$ h+ @1 o9 d. Y
\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, U8 P1 I. A9 X- L
\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$ z( [9 ]6 V. _
\xFF\x3C\xD6\x0E\x95\x39\x82\x42\x3E\x61\x96\x48\x8D\xAF\x30\xE2\x71\x4D\xD5\x25\x92\xBD\x99\x98"+ u$ W) m& @! }3 o
for i = 0 < FILES
" l" g" c7 A& G2 y6 A getdstring NAME 0x41 MEMORY_FILE' n" u. ?8 }( F# }, I; M& J/ m
get OFFSET long MEMORY_FILE n( N$ ^( A3 |) ~4 G9 v
get SIZE long MEMORY_FILE. p) u7 C5 U( P! D) y9 V P
log MEMORY_FILE3 OFFSET SIZE
$ i% F& s2 Q2 Q7 Q b for j = 0 < SIZE
* n4 I5 I) x7 e5 D& v9 ` getvarchr BYTE MEMORY_FILE3 j6 C5 U1 f9 k( `5 b6 Z! U! k
getvarchr BYTE MEMORY_FILE2 BYTE( w7 Y5 C; {! Q. E# [
putvarchr MEMORY_FILE3 j BYTE8 A$ ?8 v4 w: _9 Z/ D; ?6 r. Q; {; a
next j6 l9 ]% y. N. J+ ]6 a
log NAME 0 SIZE MEMORY_FILE37 k" F% ~6 I2 H7 P7 M
next i |