林登布鲁克的冒险 Adventures of Natalie Brooks 解包器
3 M \2 [- d8 `. d: O" h" x要配合QuickBMS使用。
! r0 G+ o$ R* w: G; Q& y; W5 z- b1 q7 Y9 t" k/ e
----------------------------------------------------------------- ; e; x$ u& N- x8 @
2009.1.11 第1次更新 $ }+ y+ i& a( p# F9 x8 B
5 o- m" o( W v3 S4 d2 k+ v我大致看了一下,觉得肥牛分析的还有些问题。
+ Y0 A. [% T; h T+ Y* Q$ c我先纠正第1个问题。文件的结构应该是这样的:
$ |' ?& w4 C. T0 [2 }+ J字体文件名长度 4bytse
" ^% k% D" c6 B; o8 T f2 q字体文件名 nbytes
4 \* A+ e& y) d& l7 U$ r字体高度 4bytse
" H5 x" C. f' w4 J: w, a, s/ I) M字体数 4bytse
7 \& p0 }& g4 o字模数据 字体数X24 bytes
+ C% Y1 m {; x5 }8 Q) V+ }7 |尾部未知数据 nbytes 3 p2 D+ D: z* q8 d, A) Q: ?, a2 [
4 u: E- d7 l* [( d; w$ m2 _
肥牛可能只分析了1个字体文件,正好那个文件的字体高度是0x18. 所以误认为那是每条记录的字节数。其实再看看其他文件,应该会发现那是字体高度的可能性最大。
( d% D' [& w- O0 o& M( c
& w% C& b" l, I$ H" U) p------------------------------------------------------------------ $ a6 [+ K8 L2 h# g
2009.1.11 第2次更新 ) I5 _, }0 O: ]: I) u
肥牛说字符是按照ASCII码的顺序排列。我不知道是怎样看出来的? 6 H0 }1 K* {* E) V
据我观察字符并不是按照ASCII码的顺序排列。
( v: J7 H% a' b; D. w* j% Q$ l1 v' H4 T
首先,我们估计在每条记录的24个字节中,有4个字节记录了这个字符的编码。
( C/ c" x& X* A我们知道A这个字幕,ascii码和utf-8是0x41,utf-16码是0x41 0x00. 1 I# |7 E- {, `$ s! F
如果A-Z按顺序排列的话,我们会在字体定义文件中发现等间距(24byts)的
6 r/ n% {: }2 y Q2 x0x41,0x42....这样的数据。但是实际上文件中并没有发现,
$ g9 k% B$ u3 K9 ^4 T所以字符应该不是按照ASCII码的顺序排列。: Z3 W! t ^! B1 N/ ~6 v
: ], F& A( Y9 P$ Q
另外,肥牛说索引文件会长度由26K变成了1M以上。7 z) k" G( C/ e" F6 H6 n
我不知道肥牛是如何算出来的,每条记录24bytes,汉字算它9000个字。
' z4 ? s$ O U$ d3 o" ~. x算下来也就216K左右。远小于1M。 |