00403CE0 |> /3B96 10110000 /cmp edx,dword ptr ds:[esi+1110]& o9 u( ~% [, a- i- i+ [
00403CE6 |. |1BC9 |sbb ecx,ecx: m( Q. q4 A) r& k9 c
00403CE8 |. |23D1 |and edx,ecx
* u1 W! d* @, j# s! w B00403CEA |. |8B8E 0C110000 |mov ecx,dword ptr ds:[esi+110C]# }1 C& M9 t+ c4 Z* Y: |5 @% m4 W
00403CF0 |. |8A0C0A |mov cl,byte ptr ds:[edx+ecx]% V& i+ I: v" w: u5 u
00403CF3 |. |3008 |xor byte ptr ds:[eax],cl ; 这个循环就是异或算法) S& C, w7 _; B& Q( F! g
00403CF5 |. |83C2 01 |add edx,1
' c, L2 C; P+ T. \% o00403CF8 |. |83C0 01 |add eax,1
) a+ [" X U) `. \( n; B. j00403CFB |. |83EF 01 |sub edi,18 Y$ o& x9 A7 r j' S
00403CFE |.^\75 E0 \jnz short SL2.00403CE0- c6 {9 } w/ D6 {% h9 ]. t2 x
* `# p1 H7 y, J p- ~
7 F; R5 y6 a. s; L2 A00401A42 |. 8D4C24 18 lea ecx,dword ptr ss:[esp+18]
0 ^3 u+ |; D8 Q00401A46 |. 51 push ecx
L1 }0 C3 o) L8 r3 E00401A47 |. 8D4C24 24 lea ecx,dword ptr ss:[esp+24]7 X M5 e; ?: r( c: Q: Z( H. Y8 ]
00401A4B |. C68424 58110000 >mov byte ptr ss:[esp+1158],1; W: r. i/ M2 ~" A: z) `6 h
00401A53 |. C687 08010000 00 mov byte ptr ds:[edi+108],0
3 q* m+ y5 M6 [" L4 [00401A5A |. E8 51240000 call SL2.00403EB0 ; 读取字体函数的开始四个字节5 l5 i; e1 C' ^0 q/ H) W: Z
00401A5F |. 817C24 18 474D47>cmp dword ptr ss:[esp+18],42474D47 ; 此处可判断出开始的四个字节应该是魔幻数
5 m5 w6 y+ d/ M) X" z" H4 Q' {. I+0 魔幻数
7 U1 H* }" o0 q' Q. H" D, Q4 r6 V+4 段数,
: W2 x7 a# Y9 z% s Z# V6 T8 C8 h5 S下面开始是每段的头部
! R/ T3 P/ y. r1 y* S) I9 G+46EE 正文
( Z+ Y' p8 L9 o( p3 Z* X8 k2 L; U6 s
9 i9 g0 W, c4 r$ T6 D0203DDE0 2F 45 58 54 44 41 54 41 53 46 4F 4E 54 2F 41 52 /EXTDATASFONT/AR" P1 ]+ r6 A9 b( Z* z( ^$ {
0203DDF0 49 41 4C 20 31 31 2E 45 4E 00 IAL 11.EN.
! f# I, [0 i3 e% J. M. s
# X, W& r. ?, J# R& w0203DEE0 75 16 00 00 (EE 46) 00 00 2F 45 58 54 ..頕../EXT
: G- S3 {: g" M0 ~0203DEF0 44 41 54 41 53 46 4F 4E 54 2F 41 52 49 41 4C 20 DATASFONT/ARIAL
! j/ C/ K' \( I- ^# [4 \, D" E0203DF00 31 32 2E 45 4E 00 12.EN.! f8 A# n& Y! h" j
0 z/ H) n8 \$ y0 K" ?/ R上面表中的数据除了括号中的(EE 46),其余全部与解包后文件数据一致,
1 b# H, T6 j) P, s1675是这个段的长度,46EE是这个在文件中的偏移,每段偏移值的算法如下:
`4 y1 ^8 @0 D) S2 b( t* b
: P* N" \# Z/ i! |1 n6 S; G00401AE0 |> /899401 08010000 /mov dword ptr ds:[ecx+eax+108],edx ; edx=46ee
+ i) A, D& y- W# F/ H9 U00401AE7 |. |8B06 |mov eax,dword ptr ds:[esi] ; [esi]存放读取字符的地址
% Y1 m. k3 }' G P00401AE9 |. |039401 04010000 |add edx,dword ptr ds:[ecx+eax+104]! S; U. u* b0 g6 K- R9 A
00401AF0 |. |83C3 01 |add ebx,1; `6 {% C# @5 H3 t" m
00401AF3 |. |81C1 0C010000 |add ecx,10C
3 y- ^- |/ i, q; N# k5 W00401AF9 |. |3B5C24 14 |cmp ebx,dword ptr ss:[esp+14] ; [esp+14]=1C2
. B8 }. C! u9 F, u% T3 F00401AFD |.^\72 E1 \jb short SL2.00401AE0 |