00403CE0 |> /3B96 10110000 /cmp edx,dword ptr ds:[esi+1110]
" E9 G1 A7 m8 [+ n! S6 k00403CE6 |. |1BC9 |sbb ecx,ecx4 C; h z/ p ~, b3 `7 p3 G% C
00403CE8 |. |23D1 |and edx,ecx2 M8 I8 h# R% V
00403CEA |. |8B8E 0C110000 |mov ecx,dword ptr ds:[esi+110C]
% h/ D4 {. |% O4 c00403CF0 |. |8A0C0A |mov cl,byte ptr ds:[edx+ecx]1 T: e6 Y* }3 r- C0 P
00403CF3 |. |3008 |xor byte ptr ds:[eax],cl ; 这个循环就是异或算法
# Z# W( w K% w% s4 @00403CF5 |. |83C2 01 |add edx,1' }0 |" h. B) I" \& V
00403CF8 |. |83C0 01 |add eax,1- h8 s8 r, C7 O$ H
00403CFB |. |83EF 01 |sub edi,17 _0 l. |, S+ c; x" t0 P* I7 _
00403CFE |.^\75 E0 \jnz short SL2.00403CE0
, q0 A, s; |! r! a3 g6 W8 P
: P4 p' ~8 q) Y( f( u2 S0 ~: R5 A& b- T
00401A42 |. 8D4C24 18 lea ecx,dword ptr ss:[esp+18]" v' G+ |! }4 k
00401A46 |. 51 push ecx
' d$ a& T: ?/ N4 i9 R9 V00401A47 |. 8D4C24 24 lea ecx,dword ptr ss:[esp+24]7 x; G7 r8 _# y$ z$ x# D9 N, Y N% t
00401A4B |. C68424 58110000 >mov byte ptr ss:[esp+1158],1
: c. M9 d2 C+ r/ M00401A53 |. C687 08010000 00 mov byte ptr ds:[edi+108],0
3 d( [3 r3 L# O9 S$ P8 E9 j# _) ^00401A5A |. E8 51240000 call SL2.00403EB0 ; 读取字体函数的开始四个字节4 D' ]* d# z( `" b! a" f
00401A5F |. 817C24 18 474D47>cmp dword ptr ss:[esp+18],42474D47 ; 此处可判断出开始的四个字节应该是魔幻数
6 r) S# M1 b' M3 O+0 魔幻数
& \) l* L% F/ u1 D! f# o+4 段数,
& y0 }. O3 O+ Y# @ G0 @( M下面开始是每段的头部0 B4 p* [# v) K$ K1 Z+ ^
+46EE 正文
+ h& }+ M: s% [: q" P5 q" i2 U
- X8 n" s% d$ Y4 q! {. S# V; @; f0203DDE0 2F 45 58 54 44 41 54 41 53 46 4F 4E 54 2F 41 52 /EXTDATASFONT/AR
% F2 F' Y, W" W- U5 ?2 z: f0203DDF0 49 41 4C 20 31 31 2E 45 4E 00 IAL 11.EN.
; E! {1 ]8 C6 }9 t8 n5 V
! L7 V$ k! F d; f( \5 N8 d6 @0203DEE0 75 16 00 00 (EE 46) 00 00 2F 45 58 54 ..頕../EXT& N+ t3 U$ `! ^" O" R9 G" l2 a
0203DEF0 44 41 54 41 53 46 4F 4E 54 2F 41 52 49 41 4C 20 DATASFONT/ARIAL
6 H* ]# A+ g% q0203DF00 31 32 2E 45 4E 00 12.EN.
$ ]0 e* n. w" \7 b+ D5 F2 p5 \! d: C# ^/ G
上面表中的数据除了括号中的(EE 46),其余全部与解包后文件数据一致,
& Z; t* G( Y( t: K; N1675是这个段的长度,46EE是这个在文件中的偏移,每段偏移值的算法如下:: J/ D* ?1 B7 m
3 i+ b* H6 y+ t3 O% {
00401AE0 |> /899401 08010000 /mov dword ptr ds:[ecx+eax+108],edx ; edx=46ee
4 x1 Q9 X# x' S% z: R00401AE7 |. |8B06 |mov eax,dword ptr ds:[esi] ; [esi]存放读取字符的地址
% a+ J0 `* B* Z00401AE9 |. |039401 04010000 |add edx,dword ptr ds:[ecx+eax+104]
" p6 x1 X3 f- O00401AF0 |. |83C3 01 |add ebx,1
* P. O$ X3 y9 U: x8 T0 P00401AF3 |. |81C1 0C010000 |add ecx,10C
% O5 ~) [/ ^9 I8 N$ C& E% P( F0 Q00401AF9 |. |3B5C24 14 |cmp ebx,dword ptr ss:[esp+14] ; [esp+14]=1C2
' X n$ c" ]0 P+ g" ^" P3 f00401AFD |.^\72 E1 \jb short SL2.00401AE0 |