放上老外发布的FPAK文件解包器。% K/ E% y- U- L I$ H' C+ M! s
# a/ Y; H, B& [4 m% Z# Tibet Quest
9 |7 l1 t3 ~% N, f& L5 p8 V3 g9 u. q# script for QuickBMS http://aluigi.org/papers.htm#quickbms
" n) x, f4 ]6 U# a8 s2 hquickbmsver 0.2.1 # needed for the "binary" type used for MEMORY_FILE2( Q1 o$ D' L& D( p2 q4 {
idstring FPAK
2 N0 `+ ?6 I! hget DUMMY long: U. K. [" }9 d; w3 g
get DUMMY long" {7 k: B0 _ i
get FILES long
4 A/ v& ^, S7 t8 bset INFO_SIZE long FILES+ A9 u% R3 V6 d/ v
math INFO_SIZE *= 73
1 ]6 n* f# B1 X8 \' gsavepos INFO_OFFSET8 {( {& n4 _' e4 i$ ~/ A( S( _5 V
log MEMORY_FILE INFO_OFFSET INFO_SIZE
% p9 q( k& b& D: Z+ Tset VAR_A long INFO_SIZE
- p2 x. _9 x' ~; Lmath VAR_A -= 0x27/ I' A9 y4 r* {: x6 J0 C
set VAR_C long 0xad% u. ~, s: L/ X; ]
set VAR_D long 0x6f4 L1 R" U+ t1 N$ T' v% U8 C
for i = 0 < INFO_SIZE
9 ]9 [0 L3 s. ?( t: j* u7 C math VAR_A += VAR_C
9 n$ U. a+ u% t math VAR_C += VAR_A A- M; _6 A2 f1 [! Q, r
math VAR_D += VAR_C4 h- {3 a7 o: k& y$ K L7 A* P
math VAR_D ^= VAR_A' V5 |% _$ s( Z
math VAR_A &= 0xff # not needed A. F9 L3 N+ h$ u6 O6 S5 o
math VAR_C &= 0xff # not needed
# q' B$ K" U2 x& y math VAR_D &= 0xff # not needed
x( h* T( g+ B& O% o: _ getvarchr BYTE MEMORY_FILE i! Y' _- }! k6 z3 e7 t8 {
math BYTE ^= VAR_D
" N' D/ ^% {- x- o: T g putvarchr MEMORY_FILE i BYTE
/ p" Z- z5 r$ r! n( a+ \next i
* b& C. g; E! S8 [- c1 Rset 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\xA22 k$ q# `0 H, n. k. X
\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
: u7 a& ^) R/ f\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\x735 |+ A" A7 ~! S' [, l6 E" y
\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\xC49 F$ |4 Z" M0 \' x6 Z9 d
\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
8 ?! u' U. b' [2 C. U0 ]! n: O5 h6 D\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
& g4 M) Q! ^1 B\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
' M: @3 e( j' ~\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
2 K6 q- d. s I# w\xFF\x3C\xD6\x0E\x95\x39\x82\x42\x3E\x61\x96\x48\x8D\xAF\x30\xE2\x71\x4D\xD5\x25\x92\xBD\x99\x98"
0 U$ c! a( b+ N3 ~3 A e( \for i = 0 < FILES
0 e+ J; n' k7 x9 ^ getdstring NAME 0x41 MEMORY_FILE- D& ~. s7 }2 i& F9 g3 |. O
get OFFSET long MEMORY_FILE
5 C [3 f0 X: o* K0 Z) X. N! m get SIZE long MEMORY_FILE
7 K: y- ]* w& d' \2 s* D log MEMORY_FILE3 OFFSET SIZE' V' C1 ?0 h. j9 ~ x
for j = 0 < SIZE% ?) }$ [+ K7 b
getvarchr BYTE MEMORY_FILE3 j# `0 n4 \/ W$ }! M8 e; t; J
getvarchr BYTE MEMORY_FILE2 BYTE7 ^9 g0 D A" m- e& @, k6 L. o9 o" F
putvarchr MEMORY_FILE3 j BYTE+ K3 F4 @' E2 |6 U# V+ {9 }" c
next j
* I! R! s2 P) Y log NAME 0 SIZE MEMORY_FILE32 }5 t. |! M: G3 V& I
next i |