林登布鲁克的冒险 Adventures of Natalie Brooks 解包器
& z! u, w1 k. s+ m7 V$ c要配合QuickBMS使用。
Z5 i+ _' o) H
/ I8 ?5 ~) S3 U----------------------------------------------------------------- 9 V. x) W: ^* Z9 B$ u; H
2009.1.11 第1次更新
5 V+ w' F \+ ^' Z& y/ @2 J, W2 d8 U: F+ h; K
我大致看了一下,觉得肥牛分析的还有些问题。 : S7 V8 o% i" R
我先纠正第1个问题。文件的结构应该是这样的: # e" Z9 t n8 V/ l: u4 k: g: U
字体文件名长度 4bytse 0 p' x8 |0 V0 h' @% R6 U6 l2 W
字体文件名 nbytes
2 I7 P6 u$ L# O, q' X/ c字体高度 4bytse - x0 N; x. `- X( g9 y$ S, b
字体数 4bytse
& F7 ]% S" I$ B! e2 _/ r @' S字模数据 字体数X24 bytes " B+ r- z% q& C6 |2 {/ K$ }
尾部未知数据 nbytes
1 I0 S. q" z; W+ O1 m% n; @: L
% b' P& H! g6 ?& E肥牛可能只分析了1个字体文件,正好那个文件的字体高度是0x18. 所以误认为那是每条记录的字节数。其实再看看其他文件,应该会发现那是字体高度的可能性最大。
( j" l8 O1 B" f m+ F, o* K; c" I" ]7 B' o
------------------------------------------------------------------
% N" N0 ~+ |* V. s+ N7 a0 S2 Z2009.1.11 第2次更新 f7 i# g( i- V
肥牛说字符是按照ASCII码的顺序排列。我不知道是怎样看出来的?
7 J% j2 o: b0 F5 c- p: `据我观察字符并不是按照ASCII码的顺序排列。 " Q) f( a# j9 C1 ?( A( A6 [8 ]
+ v* |) ~0 E$ r- ]1 [5 R; r$ ` f- I' Y首先,我们估计在每条记录的24个字节中,有4个字节记录了这个字符的编码。
# }1 }/ M [% D3 ^' D我们知道A这个字幕,ascii码和utf-8是0x41,utf-16码是0x41 0x00. 1 k6 I! Q3 |) {& ?1 u% U
如果A-Z按顺序排列的话,我们会在字体定义文件中发现等间距(24byts)的
% L# l: k% o* h9 g0x41,0x42....这样的数据。但是实际上文件中并没有发现,
. u0 j2 d- W5 J' G所以字符应该不是按照ASCII码的顺序排列。
4 K9 G' F% H$ j- F; i3 _( Q! E
u9 j/ N! `* x另外,肥牛说索引文件会长度由26K变成了1M以上。% L- g1 N' C* Y+ E' N
我不知道肥牛是如何算出来的,每条记录24bytes,汉字算它9000个字。3 I9 e# F2 D% p& r8 |' [6 d
算下来也就216K左右。远小于1M。 |