林登布鲁克的冒险 Adventures of Natalie Brooks 解包器
& E% x7 v f1 G要配合QuickBMS使用。 6 \) K' ^1 p+ M( l# J
, d2 K- C1 h* k2 k-----------------------------------------------------------------
; i. m: F& I* N7 B& u$ n2009.1.11 第1次更新 + I2 Y; J6 w* l# [- A" `3 i
- Z1 P. t' |& }! g7 X6 C我大致看了一下,觉得肥牛分析的还有些问题。 % l1 u" n1 r) D4 J
我先纠正第1个问题。文件的结构应该是这样的:
- q; v4 ]2 d- f( R6 c字体文件名长度 4bytse ! ?* L3 q6 g+ i8 v2 B; ]* |. m
字体文件名 nbytes
9 T% e4 W; y: F7 \$ q字体高度 4bytse 5 _$ Q! }7 Y& s; q$ o/ p3 y }
字体数 4bytse 4 H: Z0 G8 G: ?4 }& e7 D8 d6 h
字模数据 字体数X24 bytes
; ^ o) I( e/ Q; c尾部未知数据 nbytes ; _9 P( n4 x# L2 b" m6 y9 g, H
8 C3 Y- I7 C' ^4 s8 Z z0 S肥牛可能只分析了1个字体文件,正好那个文件的字体高度是0x18. 所以误认为那是每条记录的字节数。其实再看看其他文件,应该会发现那是字体高度的可能性最大。
! j1 ^! ~" z" x: Z, y3 G h
' y' F6 S% }2 j* G6 T2 E------------------------------------------------------------------
]9 `8 k. V: [% ~0 h, d2009.1.11 第2次更新 ! c l) f1 f0 [( k J4 l
肥牛说字符是按照ASCII码的顺序排列。我不知道是怎样看出来的?
/ x0 l( V% f3 D# I6 g; j据我观察字符并不是按照ASCII码的顺序排列。
3 L: f( W/ ?! F# i% n( |8 W0 K7 G9 u2 C7 F+ E$ B7 P5 e
首先,我们估计在每条记录的24个字节中,有4个字节记录了这个字符的编码。 ) o. \, O6 R3 b7 V$ T' t3 y
我们知道A这个字幕,ascii码和utf-8是0x41,utf-16码是0x41 0x00. # z0 M, S, o8 Y+ V$ s% k
如果A-Z按顺序排列的话,我们会在字体定义文件中发现等间距(24byts)的 u& }% Q/ Z5 h) H/ p+ V
0x41,0x42....这样的数据。但是实际上文件中并没有发现, 5 G6 i. y T0 _- j) \4 D' {
所以字符应该不是按照ASCII码的顺序排列。- O7 N& u& [5 l( R$ j% |. m
% _! z7 ?5 i2 j9 b! R2 Q& o8 [7 T1 K
另外,肥牛说索引文件会长度由26K变成了1M以上。
2 @$ S# n2 ^9 e我不知道肥牛是如何算出来的,每条记录24bytes,汉字算它9000个字。
" n; v. `7 ^" k算下来也就216K左右。远小于1M。 |