放上老外发布的FPAK文件解包器。
/ Y9 ]: s- _& X+ u! b* ~
! i+ \7 L( {- t# Tibet Quest
6 Y; U& {* D+ B$ x% H# script for QuickBMS http://aluigi.org/papers.htm#quickbms
1 u+ k# g; ], r# @9 Oquickbmsver 0.2.1 # needed for the "binary" type used for MEMORY_FILE2
# o% D T4 ^# k3 aidstring FPAK+ ~, ^( _4 a$ j. n
get DUMMY long
6 f* G2 D- Q$ ?0 D# {7 Tget DUMMY long4 G9 k! e* @' V e. {; X2 K
get FILES long
9 d) A4 d( r) k E8 {5 i+ N8 @set INFO_SIZE long FILES% u! A& B1 x, B; @6 g8 F4 X' R! y
math INFO_SIZE *= 733 f) Y( @0 d) E! Q6 N$ j
savepos INFO_OFFSET/ f3 C2 \) z) C
log MEMORY_FILE INFO_OFFSET INFO_SIZE
% c- U1 w* q: lset VAR_A long INFO_SIZE
3 B) i, J+ J+ E* R. x/ dmath VAR_A -= 0x278 Z; E( s1 d3 y
set VAR_C long 0xad
. q, ]$ x+ ^9 i+ j7 N' Xset VAR_D long 0x6f% R* y' ~! C* E
for i = 0 < INFO_SIZE0 E2 T( y2 u6 s7 O; ]
math VAR_A += VAR_C" e' w6 \- {7 @# O
math VAR_C += VAR_A
9 h) n4 | B2 ` J% V, X math VAR_D += VAR_C$ D$ S) }$ c$ \* l+ R
math VAR_D ^= VAR_A
% X% y e1 Y* M" x7 t: G( i& M1 S" a math VAR_A &= 0xff # not needed
. y& p( Q1 u0 A math VAR_C &= 0xff # not needed$ z- F* s" T9 O8 e
math VAR_D &= 0xff # not needed; W. r" p9 B, | b& U+ F9 ^
getvarchr BYTE MEMORY_FILE i
8 D7 o& i& Q9 _$ h- C math BYTE ^= VAR_D' ]# l( Q" L/ ?: R' i, O/ O
putvarchr MEMORY_FILE i BYTE
7 F4 P' r5 u. c: Rnext i
6 b8 _8 u k, g& K* Y0 Tset 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 O% I4 m5 d `5 C5 F% b9 {5 q. b\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 f, J; ~! I! @+ N
\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
5 Y$ @; u5 E# p$ ^\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
' Z, q9 P6 ?8 z7 x. \1 N\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\x794 o. } ]' f8 _0 c% n; c
\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
, E% U; X @. f& j) Q\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
! s* E9 P' b1 e C. Z! M$ 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
- T% \0 @" S1 j3 ?7 a0 q# [# M\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 G6 t( |$ a9 s$ X" E# qfor i = 0 < FILES
7 s4 J1 M# I5 C* k getdstring NAME 0x41 MEMORY_FILE
1 ?+ ?; w, r/ F get OFFSET long MEMORY_FILE1 n( j- B! W2 T
get SIZE long MEMORY_FILE2 G4 j7 E4 K) X( U8 D; [: ?
log MEMORY_FILE3 OFFSET SIZE
$ o: u0 k3 P+ r/ f T R, U" P for j = 0 < SIZE( a" C9 |" p' Q" k6 \4 w
getvarchr BYTE MEMORY_FILE3 j9 ^7 X8 v$ @. w( Z! j5 i$ _% ]
getvarchr BYTE MEMORY_FILE2 BYTE3 J3 U7 O" ]7 {0 p# `
putvarchr MEMORY_FILE3 j BYTE
- a& h5 D/ S7 P5 O$ c4 B, L next j
+ S- I) L0 U8 K& k% N3 h5 `, _ log NAME 0 SIZE MEMORY_FILE3 ^ X. j4 g/ C5 |2 X
next i |