放上老外发布的FPAK文件解包器。. d, Y h* H+ [& Y& H4 G3 W
5 f7 ^9 r. b/ e
# Tibet Quest! N7 v g( e' Y8 \+ Q; o7 s
# script for QuickBMS http://aluigi.org/papers.htm#quickbms
; L' v. k" U# O. Y( T# equickbmsver 0.2.1 # needed for the "binary" type used for MEMORY_FILE2
; B( z; `) X4 d' M. Fidstring FPAK
# F* Z& E* n' V0 P; K8 @. p/ X% _get DUMMY long6 S/ E; _. ~7 w @0 i( ?
get DUMMY long$ l5 y; `' z& M4 d) }5 {1 B
get FILES long
3 G7 ?3 M* m- U0 Xset INFO_SIZE long FILES4 p& ]- A3 S, M% U. g- j y
math INFO_SIZE *= 736 c7 Y# S" i% l& E! P% F
savepos INFO_OFFSET
9 ]8 e5 T" e- s1 y4 D9 z, a; ylog MEMORY_FILE INFO_OFFSET INFO_SIZE. l# Z: S! n% }5 ^
set VAR_A long INFO_SIZE/ W/ e* d+ B8 x( d- F* j
math VAR_A -= 0x276 `. B. ^( M* W, }4 d
set VAR_C long 0xad" D4 E/ f% v- W
set VAR_D long 0x6f
) p* f" w- M _- Bfor i = 0 < INFO_SIZE
4 m& M, J5 o9 N1 m/ q& Y4 t- i" ` math VAR_A += VAR_C$ x6 p7 z1 h3 f! J
math VAR_C += VAR_A
5 ^0 a! @2 G+ I& D/ v0 y math VAR_D += VAR_C: k U: l# \- r/ b' `+ f( K a! V
math VAR_D ^= VAR_A4 B) W/ S* O6 p7 e. w; e
math VAR_A &= 0xff # not needed" D5 @5 u0 Y& U8 m
math VAR_C &= 0xff # not needed4 a8 F+ B; Y% r$ W l6 K) a
math VAR_D &= 0xff # not needed
4 p# \) g7 j- o T8 P getvarchr BYTE MEMORY_FILE i y' U2 ^0 E" \$ [% u5 c
math BYTE ^= VAR_D- O7 |- a; w& i( q8 J# k
putvarchr MEMORY_FILE i BYTE2 _; C) R" A1 {3 b1 u4 ]
next i
2 }$ s7 u' g6 L- y1 {; x) Lset 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
+ b% V4 H$ P, v6 L\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\x76
3 w5 a% ~0 j; q1 D\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
2 U4 f6 W- U y6 `\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
6 @: W6 e9 i0 F\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
5 ?* e9 V5 t7 \6 S' _" B\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
: y9 z1 k3 s* Z8 A; Z. g\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% O2 g, {. a/ N: a# f4 S$ k
\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
) \) ^1 f' t" `6 E+ x/ P: Y\xFF\x3C\xD6\x0E\x95\x39\x82\x42\x3E\x61\x96\x48\x8D\xAF\x30\xE2\x71\x4D\xD5\x25\x92\xBD\x99\x98"
$ l5 Y5 F, ?) i) Rfor i = 0 < FILES3 ?& e: s& o& t' g2 N2 {% {
getdstring NAME 0x41 MEMORY_FILE
3 ~4 i& N0 u! G) S9 U6 b0 Z( R6 p get OFFSET long MEMORY_FILE
5 n. S2 b1 S/ r$ s' C6 L get SIZE long MEMORY_FILE
' K! h; _! |/ v8 {9 g log MEMORY_FILE3 OFFSET SIZE9 D1 b% b. _& Q' F
for j = 0 < SIZE
* o: u" X h- {: q0 x% R5 A2 f# j getvarchr BYTE MEMORY_FILE3 j
: r5 I" Z R- ]" X5 T' f getvarchr BYTE MEMORY_FILE2 BYTE
5 ? W7 w! I/ F, l: |' C0 B putvarchr MEMORY_FILE3 j BYTE
% d; Y3 P4 ^6 J9 \! ~. a! v* B( ~ next j) B4 E$ h7 h/ ?$ A
log NAME 0 SIZE MEMORY_FILE3
8 ]' G N, _0 {next i |