Easy Real Converter 1.6.2分析{重启验证}
 

标题:Easy Real Converter 1.6.2分析{重启验证}
链接:http://www.unpack.cn/viewthread.php?tid=19668
贴者:鹭影依凌
日期:2007-11-30 06:48

一、脱壳
PEID扫描下,ASPack 2.001 -> Alexey Solodovnikov
ESP定律搞定
试运行脱壳程序,正常运行


二、定位代码段
;====================================================================|
;超级字符串搜索下,发现几处敏感信息
;--------------------------------------------------------------------|
(1)注册标志:licenced to & unregistered version
004AB333   push    004AB340                          open
004AB35B   push    004AB368                          open
004AB39B   mov     edx, 004AB3F0                     licenced to
004AB3B5   mov     edx, 004AB408                     unregistered version
004AB79B   mov     edx, 004AB854                     \software\easy real converter
004AB7BC   mov     edx, 004AB87C                     user
004AB7D9   mov     edx, 004AB88C                     keythank you
004AB7EE   push    004AB890                          thank you
004AB8EF   push    004AB8FC                          open

(2)运行提示:please register to
004AEDB1   mov     eax, 004AEE50                     65537
004AEDBE   mov     eax, 004AEE60                     11854405724806361658422632892116497718759520709779
004AF1F0   mov     edx, 004AF28C                     you have no free conversions remaining! please register to get unlimited conversions.
004AF226   push    004AF304                           free conversions remaining! this action will perform

(3)软件标题:unregistered version
004B9A8D   mov     edx, 004B9B58                     easy real converter (unregistered version)

(4)注册表信息:\software\easy real converter
004BAFB9   push    004BAFC8                          open
004BAFE1   push    004BAFF0                          open
004BB009   push    004BB018                          open
004BB076   mov     edx, 004BB0EC                     magicutils
004BB090   mov     edx, 004BB11C                     1.50
004BB163   mov     edx, 004BB290                     \software\easy real converter
004BB173   mov     edx, 004BB2B8                     user
004BB186   mov     edx, 004BB2B8                     user

(5)隐含提示(注册表信息被删除)
004BCEFB   mov     ecx, 004BCF90                     error
004BCF00   mov     edx, 004BCF98                     easy real converter is not installed correctly, please reinstall easy real converter!
004BCF21   mov     ecx, 004BCF90                     error
004BCF26   mov     edx, 004BCFF0                     error in initializing!
004BCF59   mov     edx, 004BD010                     easy real converter

;----------------------------------------------------|
先来看看第(1)处
;--------------------------------------------------------------------|
004AB370  /.  55            push    ebp
004AB371  |.  8BEC          mov     ebp, esp
004AB373  |.  6A 00         push    0
004AB375  |.  53            push    ebx
004AB376  |.  8BD8          mov     ebx, eax
004AB378  |.  33C0          xor     eax, eax
004AB37A  |.  55            push    ebp
004AB37B  |.  68 DBB34A00   push    004AB3DB
004AB380  |.  64:FF30       push    dword ptr fs:[eax]
004AB383  |.  64:8920       mov     dword ptr fs:[eax], esp
004AB386  |.  A1 14014C00   mov     eax, dword ptr [4C0114]      ;  EAX = [4C0114]
004AB38B  |.  8038 00       cmp     byte ptr [eax], 0                ;  [EAX] 和 0比较
004AB38E  |.  74 25         je      short 004AB3B5           ;  //跳向未注册版本
004AB390  |.  8B0D 1C044C00 mov     ecx, dword ptr [4C041C]          ;  1.004C1FD8
004AB396  |.  8B09          mov     ecx, dword ptr [ecx]
004AB398  |.  8D45 FC       lea     eax, dword ptr [ebp-4]
004AB39B  |.  BA F0B34A00   mov     edx, 004AB3F0                    ;  licenced to
004AB3A0  |.  E8 8793F5FF   call    0040472C
004AB3A5  |.  8B55 FC       mov     edx, dword ptr [ebp-4]
004AB3A8  |.  8B83 14030000 mov     eax, dword ptr [ebx+314]
004AB3AE  |.  E8 89BBFBFF   call    00466F3C
004AB3B3  |.  EB 10         jmp     short 004AB3C5                   ;  //跳走
004AB3B5  |>  BA 08B44A00   mov     edx, 004AB408                    ;  unregistered version
004AB3BA  |.  8B83 14030000 mov     eax, dword ptr [ebx+314]
004AB3C0  |.  E8 77BBFBFF   call    00466F3C
004AB3C5  |>  33C0          xor     eax, eax
004AB3C7  |.  5A            pop     edx
004AB3C8  |.  59            pop     ecx
004AB3C9  |.  59            pop     ecx
004AB3CA  |.  64:8910       mov     dword ptr fs:[eax], edx
004AB3CD  |.  68 E2B34A00   push    004AB3E2
004AB3D2  |>  8D45 FC       lea     eax, dword ptr [ebp-4]
004AB3D5  |.  E8 4690F5FF   call    00404420
004AB3DA  \.  C3            retn
004AB3DB   .^ E9 6489F5FF   jmp     00403D44
004AB3E0   .^ EB F0         jmp     short 004AB3D2
004AB3E2   .  5B            pop     ebx
004AB3E3   .  59            pop     ecx
004AB3E4   .  5D            pop     ebp
004AB3E5   .  C3            retn
;--------------------------------------------------------------------|
OD搜索下4C0114,米结果-_-"


继续下一个,偶就直接第三个咯~~
;--------------------------------------------------------------------|
004B9850  /.  55            push    ebp
004B9851  |.  8BEC          mov     ebp, esp
004B9853  |.  33C9          xor     ecx, ecx
............................................
............................................                         ;  //省略若干代码
004B9A33  |.  8B83 30030000 mov     eax, dword ptr [ebx+330]
004B9A39  |.  8B80 08020000 mov     eax, dword ptr [eax+208]
004B9A3F  |.  BA 05000000   mov     edx, 5
004B9A44  |.  E8 539DF8FF   call    0044379C
004B9A49  |.  5A            pop     edx
004B9A4A  |.  E8 A99CF8FF   call    004436F8
004B9A4F  |.  803D D41F4C00>cmp     byte ptr [4C1FD4], 0             ;  [4C1FD4] 和 0比较      
004B9A56  |.  74 35         je      short 004B9A8D                   ;  //跳则运行"未注册版本"
004B9A58  |.  BA 3C9B4B00   mov     edx, 004B9B3C                    ;  ASCII "Easy Real Converter"
004B9A5D  |.  8BC3          mov     eax, ebx
004B9A5F  |.  E8 D8D4FAFF   call    00466F3C
004B9A64  |.  33D2          xor     edx, edx
004B9A66  |.  8B83 1C030000 mov     eax, dword ptr [ebx+31C]
004B9A6C  |.  E8 1BFEFBFF   call    0047988C
004B9A71  |.  33D2          xor     edx, edx
004B9A73  |.  8B83 A4030000 mov     eax, dword ptr [ebx+3A4]
004B9A79  |.  E8 0EFEFBFF   call    0047988C
004B9A7E  |.  33D2          xor     edx, edx
004B9A80  |.  8B83 80040000 mov     eax, dword ptr [ebx+480]
004B9A86  |.  E8 A1D3FAFF   call    00466E2C
004B9A8B  |.  EB 0C         jmp     short 004B9A99          ;  //跳走
004B9A8D  |>  BA 589B4B00   mov     edx, 004B9B58                    ;  easy real converter (unregistered version)
004B9A92  |.  8BC3          mov     eax, ebx
004B9A94  |.  E8 A3D4FAFF   call    00466F3C
004B9A99  |>  B2 01         mov     dl, 1
004B9A9B  |.  A1 B8774100   mov     eax, dword ptr [4177B8]
004B9AA0  |.  E8 DB9AF4FF   call    00403580
004B9AA5  |.  8983 3C050000 mov     dword ptr [ebx+53C], eax
004B9AAB  |.  B2 01         mov     dl, 1
004B9AAD  |.  A1 B8774100   mov     eax, dword ptr [4177B8]
004B9AB2  |.  E8 C99AF4FF   call    00403580
004B9AB7  |.  8983 40050000 mov     dword ptr [ebx+540], eax
004B9ABD  |.  33C0          xor     eax, eax
004B9ABF  |.  5A            pop     edx
004B9AC0  |.  59            pop     ecx
004B9AC1  |.  59            pop     ecx
004B9AC2  |.  64:8910       mov     dword ptr fs:[eax], edx
004B9AC5  |.  68 DF9A4B00   push    004B9ADF
004B9ACA  |>  8D45 EC       lea     eax, dword ptr [ebp-14]
004B9ACD  |.  BA 05000000   mov     edx, 5
004B9AD2  |.  E8 6DA9F4FF   call    00404444
004B9AD7  \.  C3            retn
004B9AD8   .^ E9 67A2F4FF   jmp     00403D44
004B9ADD   .^ EB EB         jmp     short 004B9ACA
004B9ADF   .  5F            pop     edi
004B9AE0   .  5E            pop     esi
004B9AE1   .  5B            pop     ebx
004B9AE2   .  8BE5          mov     esp, ebp
004B9AE4   .  5D            pop     ebp
004B9AE5   .  C3            retn
;--------------------------------------------------------------------|
OD搜索下4C1FD4,结果如下:

地址       反汇编                                         注释
004B939C   cmp     byte ptr [4C1FD4], 0                   ds:[004C1FD4]=00
004B9493   cmp     byte ptr [4C1FD4], 0                   ds:[004C1FD4]=00
004B96AA   cmp     byte ptr [4C1FD4], 0                   ds:[004C1FD4]=00
004B98E1   mov     byte ptr [4C1FD4], 0                   ds:[004C1FD4]=00
004B991A   cmp     byte ptr [4C1FD4], 0                   ds:[004C1FD4]=00
004B9A4F   cmp     byte ptr [4C1FD4], 0                   ds:[004C1FD4]=00
004B9AC2   mov     dword ptr fs:[eax], edx                (初始 CPU 选择)
004BB140   mov     byte ptr [4C1FD4], 0                   ds:[004C1FD4]=00
004BB24C   mov     byte ptr [4C1FD4], 1                   [4C1FD4] = 1
004BB255   mov     byte ptr [4C1FD4], 0                   [4C1FD4] = 0
;--------------------------------------------------------------------|
呵呵,开始分析吧,经验告诉我们
0:未注册
1:已注册
cmp     byte ptr [4C1FD4], 0:是检测是否已经注册
mov     byte ptr [4C1FD4], 0:注册信息错误,标志位赋值0 
mov     byte ptr [4C1FD4], 1:注册信息正确,标志位赋值1 

我们双击004BB24C,来到代码(明显这个地址是注册成功的标志)



三、代码分析

在段首下断,CTRL+F2重载,F9运行,分析代码如下:

;====================================================================|  <第一层>
004BB124   $  55            push    ebp                              ;  //本地调用来自 004B9915
004BB125   .  8BEC          mov     ebp, esp
004BB127   .  33C9          xor     ecx, ecx                         ;  ECX置零
004BB129   .  51            push    ecx
004BB12A   .  51            push    ecx
004BB12B   .  51            push    ecx
004BB12C   .  51            push    ecx
004BB12D   .  53            push    ebx
004BB12E   .  56            push    esi
004BB12F   .  57            push    edi
004BB130   .  8BF0          mov     esi, eax
004BB132   .  33C0          xor     eax, eax                         ;  EAX置零
004BB134   .  55            push    ebp
004BB135   .  68 77B24B00   push    004BB277
004BB13A   .  64:FF30       push    dword ptr fs:[eax]
004BB13D   .  64:8920       mov     dword ptr fs:[eax], esp
004BB140   .  C605 D41F4C00>mov     byte ptr [4C1FD4], 0
004BB147   .  B2 01         mov     dl, 1
004BB149   .  A1 54AB4300   mov     eax, dword ptr [43AB54]
004BB14E   .  E8 01FBF7FF   call    0043AC54
004BB153   .  8BD8          mov     ebx, eax
004BB155   .  BA 01000080   mov     edx, 80000001
004BB15A   .  8BC3          mov     eax, ebx
004BB15C   .  E8 93FBF7FF   call    0043ACF4
004BB161   .  B1 01         mov     cl, 1
004BB163   .  BA 90B24B00   mov     edx, 004BB290                    ;  ASCII "\Software\Easy Real Converter"
004BB168   .  8BC3          mov     eax, ebx
004BB16A   .  E8 E9FBF7FF   call    0043AD58                         ;  读取根键"\Software\Easy Real Converter"
004BB16F   .  84C0          test    al, al                           ;  成功(al = 1)
004BB171   .  74 70         je      short 004BB1E3                   ;  //不跳
004BB173   .  BA B8B24B00   mov     edx, 004BB2B8                    ;  ASCII "User"
004BB178   .  8BC3          mov     eax, ebx
004BB17A   .  E8 39FFF7FF   call    0043B0B8                         ;  读取根键"User"
004BB17F   .  84C0          test    al, al                           ;  成功(al = 1)
004BB181   .  74 1E         je      short 004BB1A1                   ;  //不跳
004BB183   .  8D4D F4       lea     ecx, dword ptr [ebp-C]
004BB186   .  BA B8B24B00   mov     edx, 004BB2B8                    ;  ASCII "User"
004BB18B   .  8BC3          mov     eax, ebx
004BB18D   .  E8 8EFDF7FF   call    0043AF20                         ;  获取"User"键值
004BB192   .  8B55 F4       mov     edx, dword ptr [ebp-C]           ;  EDX = 用户名
004BB195   .  B8 D81F4C00   mov     eax, 004C1FD8
004BB19A   .  E8 D592F4FF   call    00404474
004BB19F   .  EB 0A         jmp     short 004BB1AB                   ;  //跳走
004BB1A1   >  B8 D81F4C00   mov     eax, 004C1FD8
004BB1A6   .  E8 7592F4FF   call    00404420
004BB1AB   >  BA C8B24B00   mov     edx, 004BB2C8                    ;  ASCII "Key"
004BB1B0   .  8BC3          mov     eax, ebx
004BB1B2   .  E8 01FFF7FF   call    0043B0B8                         ;  读取根键"Key"
004BB1B7   .  84C0          test    al, al                           ;  成功(al = 1)
004BB1B9   .  74 1E         je      short 004BB1D9                   ;  //不跳
004BB1BB   .  8D4D F0       lea     ecx, dword ptr [ebp-10]
004BB1BE   .  BA C8B24B00   mov     edx, 004BB2C8                    ;  ASCII "Key"
004BB1C3   .  8BC3          mov     eax, ebx
004BB1C5   .  E8 56FDF7FF   call    0043AF20                         ;  获取"KEY"键值
004BB1CA   .  8B55 F0       mov     edx, dword ptr [ebp-10]          ;  EDX = 序列号
004BB1CD   .  B8 DC1F4C00   mov     eax, 004C1FDC                    ;  ASCII "餫?
004BB1D2   .  E8 9D92F4FF   call    00404474
004BB1D7   .  EB 0A         jmp     short 004BB1E3                   ;  //跳走
004BB1D9   >  B8 DC1F4C00   mov     eax, 004C1FDC                    ;  ASCII "餫?
004BB1DE   .  E8 3D92F4FF   call    00404420
004BB1E3   >  8BC3          mov     eax, ebx
004BB1E5   .  E8 C683F4FF   call    004035B0
004BB1EA   .  833D D81F4C00>cmp     dword ptr [4C1FD8], 0            ;  [4C1FD8] = 用户名
004BB1F1   .  74 69         je      short 004BB25C                   ;  //跳则挂
004BB1F3   .  8D4D FC       lea     ecx, dword ptr [ebp-4]
004BB1F6   .  8B15 D81F4C00 mov     edx, dword ptr [4C1FD8]          ;  EDX = 用户名
004BB1FC   .  8BC6          mov     eax, esi
004BB1FE   .  E8 1DFEFFFF   call    004BB020                         ;  //用户名加密
004BB203   .  33C0          xor     eax, eax
004BB205   .  55            push    ebp
004BB206   .  68 28B24B00   push    004BB228
004BB20B   .  64:FF30       push    dword ptr fs:[eax]
004BB20E   .  64:8920       mov     dword ptr fs:[eax], esp
004BB211   .  8D55 F8       lea     edx, dword ptr [ebp-8]
004BB214   .  A1 DC1F4C00   mov     eax, dword ptr [4C1FDC]
004BB219   .  E8 1E3BFFFF   call    004AED3C                         ;  //序列号加密       
004BB21E   .  33C0          xor     eax, eax
004BB220   .  5A            pop     edx
004BB221   .  59            pop     ecx
004BB222   .  59            pop     ecx
004BB223   .  64:8910       mov     dword ptr fs:[eax], edx
004BB226   .  EB 17         jmp     short 004BB23F                   ;  //跳走
004BB228   .^ E9 6388F4FF   jmp     00403A90
004BB22D   .  8D45 F8       lea     eax, dword ptr [ebp-8]
004BB230   .  BA D4B24B00   mov     edx, 004BB2D4                    ;  ASCII "Error!!"
004BB235   .  E8 7E92F4FF   call    004044B8
004BB23A   .  E8 7D8CF4FF   call    00403EBC                         ;  -\来到下面
004BB23F   >  8B45 FC       mov     eax, dword ptr [ebp-4]           ;  用户名密文
004BB242   .  8B55 F8       mov     edx, dword ptr [ebp-8]           ;  序列号密文
004BB245   .  E8 E295F4FF   call    0040482C                         ;  //两密文比较
004BB24A   .  75 09         jnz     short 004BB255                   ;  //跳则挂
004BB24C   .  C605 D41F4C00>mov     byte ptr [4C1FD4], 1             ;  [4C1FD4] = 1
004BB253   .  EB 07         jmp     short 004BB25C
004BB255   >  C605 D41F4C00>mov     byte ptr [4C1FD4], 0             ;  [4C1FD4] = 0
004BB25C   >  33C0          xor     eax, eax                         ;  EAX置零
004BB25E   .  5A            pop     edx
004BB25F   .  59            pop     ecx
004BB260   .  59            pop     ecx
004BB261   .  64:8910       mov     dword ptr fs:[eax], edx
004BB264   .  68 7EB24B00   push    004BB27E
004BB269   >  8D45 F0       lea     eax, dword ptr [ebp-10]
004BB26C   .  BA 04000000   mov     edx, 4
004BB271   .  E8 CE91F4FF   call    00404444
004BB276   .  C3            retn
004BB277   .^ E9 C88AF4FF   jmp     00403D44
004BB27C   .^ EB EB         jmp     short 004BB269
004BB27E   .  5F            pop     edi
004BB27F   .  5E            pop     esi
004BB280   .  5B            pop     ebx
004BB281   .  8BE5          mov     esp, ebp
004BB283   .  5D            pop     ebp
004BB284   .  C3            retn                                     ;  //结束
;====================================================================|
;在地址004BB1FE处F7跟进关键CALL->004BB020  
;--------------------------------------------------------------------| <第二层>
004BB020  /$  55            push    ebp                              ;  //本地调用来自 004BB1FE
004BB021  |.  8BEC          mov     ebp, esp
004BB023  |.  6A 00         push    0
004BB025  |.  6A 00         push    0
004BB027  |.  6A 00         push    0
004BB029  |.  6A 00         push    0
004BB02B  |.  6A 00         push    0
004BB02D  |.  6A 00         push    0
004BB02F  |.  6A 00         push    0
004BB031  |.  53            push    ebx
004BB032  |.  8BD9          mov     ebx, ecx
004BB034  |.  8955 FC       mov     dword ptr [ebp-4], edx           ;  [ebp-4] = 用户名
004BB037  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
004BB03A  |.  E8 9198F4FF   call    004048D0
004BB03F  |.  33C0          xor     eax, eax                         ;  EAX置零
004BB041  |.  55            push    ebp
004BB042  |.  68 C8B04B00   push    004BB0C8
004BB047  |.  64:FF30       push    dword ptr fs:[eax]
004BB04A  |.  64:8920       mov     dword ptr fs:[eax], esp
004BB04D  |.  8D55 E4       lea     edx, dword ptr [ebp-1C]
004BB050  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
004BB053  |.  E8 48DBF4FF   call    00408BA0
004BB058  |.  8B45 E4       mov     eax, dword ptr [ebp-1C]          ;  [ebp-1C] = 用户名
004BB05B  |.  8D55 E8       lea     edx, dword ptr [ebp-18]
004BB05E  |.  E8 EDD8F4FF   call    00408950                         ;  将用户名转化为大写
004BB063  |.  8B55 E8       mov     edx, dword ptr [ebp-18]          ;  [ebp-18] = 用户名(大写)
004BB066  |.  8D45 F8       lea     eax, dword ptr [ebp-8]
004BB069  |.  B9 DCB04B00   mov     ecx, 004BB0DC                    ;  ASCII "zhiyuan"
004BB06E  |.  E8 B996F4FF   call    0040472C                         ;  字符串链接
004BB073  |.  8D45 F4       lea     eax, dword ptr [ebp-C]
004BB076  |.  BA ECB04B00   mov     edx, 004BB0EC                    ;  ASCII "MagicUtils"
004BB07B  |.  E8 3894F4FF   call    004044B8
004BB080  |.  8D45 F0       lea     eax, dword ptr [ebp-10]
004BB083  |.  BA 00B14B00   mov     edx, 004BB100                    ;  ASCII "Easy_Real_Converter"
004BB088  |.  E8 2B94F4FF   call    004044B8
004BB08D  |.  8D45 EC       lea     eax, dword ptr [ebp-14]
004BB090  |.  BA 1CB14B00   mov     edx, 004BB11C                    ;  ASCII "1.50"
004BB095  |.  E8 1E94F4FF   call    004044B8
004BB09A  |.  8B45 EC       mov     eax, dword ptr [ebp-14]
004BB09D  |.  50            push    eax
004BB09E  |.  53            push    ebx
004BB09F  |.  8B4D F0       mov     ecx, dword ptr [ebp-10]          ;  ASCII "Easy_Real_Converter"
004BB0A2  |.  8B55 F4       mov     edx, dword ptr [ebp-C]           ;  ASCII "MagicUtils"
004BB0A5  |.  8B45 F8       mov     eax, dword ptr [ebp-8]           ;  ASCII "LUYING10zhiyuan"
004BB0A8  |.  E8 E70AFFFF   call    004ABB94                         ;  //关键CALL
004BB0AD  |.  33C0          xor     eax, eax
004BB0AF  |.  5A            pop     edx
004BB0B0  |.  59            pop     ecx
004BB0B1  |.  59            pop     ecx
004BB0B2  |.  64:8910       mov     dword ptr fs:[eax], edx
004BB0B5  |.  68 CFB04B00   push    004BB0CF
004BB0BA  |>  8D45 E4       lea     eax, dword ptr [ebp-1C]
004BB0BD  |.  BA 07000000   mov     edx, 7
004BB0C2  |.  E8 7D93F4FF   call    00404444
004BB0C7  \.  C3            retn
004BB0C8   .^ E9 778CF4FF   jmp     00403D44
004BB0CD   .^ EB EB         jmp     short 004BB0BA
004BB0CF   .  5B            pop     ebx
004BB0D0   .  8BE5          mov     esp, ebp
004BB0D2   .  5D            pop     ebp
004BB0D3   .  C3            retn                                     ;  //返回
;====================================================================|
;在地址004BB0A8处F7跟进关键CALL->004ABB94
;--------------------------------------------------------------------|  <第三层>
004ABB94  /$  55            push    ebp                              ;  //本地调用来自 004BB0A8
004ABB95  |.  8BEC          mov     ebp, esp
004ABB97  |.  83C4 EC       add     esp, -14
004ABB9A  |.  53            push    ebx
004ABB9B  |.  33DB          xor     ebx, ebx                         ;  EBX置零
004ABB9D  |.  895D EC       mov     dword ptr [ebp-14], ebx
004ABBA0  |.  895D F0       mov     dword ptr [ebp-10], ebx
004ABBA3  |.  894D F4       mov     dword ptr [ebp-C], ecx
004ABBA6  |.  8955 F8       mov     dword ptr [ebp-8], edx
004ABBA9  |.  8945 FC       mov     dword ptr [ebp-4], eax
004ABBAC  |.  8B45 FC       mov     eax, dword ptr [ebp-4]           ;  ASCII "LUYING10zhiyuan"
004ABBAF  |.  E8 1C8DF5FF   call    004048D0
004ABBB4  |.  8B45 F8       mov     eax, dword ptr [ebp-8]           ;  ASCII "MagicUtils"
004ABBB7  |.  E8 148DF5FF   call    004048D0
004ABBBC  |.  8B45 F4       mov     eax, dword ptr [ebp-C]           ;  ASCII "Easy_Real_Converter"
004ABBBF  |.  E8 0C8DF5FF   call    004048D0
004ABBC4  |.  8B45 0C       mov     eax, dword ptr [ebp+C]           ;  ASCII "1.50"
004ABBC7  |.  E8 048DF5FF   call    004048D0
004ABBCC  |.  33C0          xor     eax, eax                         ;  EAX置零
004ABBCE  |.  55            push    ebp
004ABBCF  |.  68 3ABC4A00   push    004ABC3A
004ABBD4  |.  64:FF30       push    dword ptr fs:[eax]
004ABBD7  |.  64:8920       mov     dword ptr fs:[eax], esp
004ABBDA  |.  FF75 FC       push    dword ptr [ebp-4]                ;  ASCII "LUYING10zhiyuan"
004ABBDD  |.  FF75 F8       push    dword ptr [ebp-8]
004ABBE0  |.  FF75 F4       push    dword ptr [ebp-C]
004ABBE3  |.  FF75 0C       push    dword ptr [ebp+C]
004ABBE6  |.  8B45 0C       mov     eax, dword ptr [ebp+C]
004ABBE9  |.  50            push    eax
004ABBEA  |.  8D45 EC       lea     eax, dword ptr [ebp-14]
004ABBED  |.  50            push    eax
004ABBEE  |.  8B4D F4       mov     ecx, dword ptr [ebp-C]
004ABBF1  |.  8B55 F8       mov     edx, dword ptr [ebp-8]
004ABBF4  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
004ABBF7  |.  E8 80FDFFFF   call    004AB97C                         ;  //尾部字符串算法
004ABBFC  |.  FF75 EC       push    dword ptr [ebp-14]               ;  (ASCII "kr:I^LqKV")
004ABBFF  |.  8D45 F0       lea     eax, dword ptr [ebp-10]
004ABC02  |.  BA 05000000   mov     edx, 5
004ABC07  |.  E8 948BF5FF   call    004047A0
004ABC0C  |.  8B55 08       mov     edx, dword ptr [ebp+8]
004ABC0F  |.  8B45 F0       mov     eax, dword ptr [ebp-10]          ;  (ASCII"LUYING10zhiyuanMagicUtilsEasy_Real_Converter1.50)
004ABC12  |.  E8 31000000   call    004ABC48                         ;  //用户名密文算法
004ABC17  |.  33C0          xor     eax, eax                         ;  EAX置零
004ABC19  |.  5A            pop     edx
004ABC1A  |.  59            pop     ecx
004ABC1B  |.  59            pop     ecx
004ABC1C  |.  64:8910       mov     dword ptr fs:[eax], edx
004ABC1F  |.  68 41BC4A00   push    004ABC41
004ABC24  |>  8D45 EC       lea     eax, dword ptr [ebp-14]
004ABC27  |.  BA 05000000   mov     edx, 5
004ABC2C  |.  E8 1388F5FF   call    00404444
004ABC31  |.  8D45 0C       lea     eax, dword ptr [ebp+C]
004ABC34  |.  E8 E787F5FF   call    00404420
004ABC39  \.  C3            retn
004ABC3A   .^ E9 0581F5FF   jmp     00403D44
004ABC3F   .^ EB E3         jmp     short 004ABC24
004ABC41   .  5B            pop     ebx
004ABC42   .  8BE5          mov     esp, ebp
004ABC44   .  5D            pop     ebp
004ABC45   .  C2 0800       retn    8                                ;  //返回
;====================================================================|
>>>>>>>>>>>>>>>>>>>>>>>>>>>>用户名加密算法<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;--------------------------------------------------------------------|
;在地址004ABC12处F7跟进关键CALL->004ABC48
;--------------------------------------------------------------------|  <第四层>
004ABC48  /$  55            push    ebp                              ;  //本地调用来自 004ABC12
004ABC49  |.  8BEC          mov     ebp, esp
004ABC4B  |.  83C4 F4       add     esp, -0C
004ABC4E  |.  53            push    ebx
004ABC4F  |.  56            push    esi
004ABC50  |.  33C9          xor     ecx, ecx                         ;  EAX置零
004ABC52  |.  894D F4       mov     dword ptr [ebp-C], ecx
004ABC55  |.  8955 F8       mov     dword ptr [ebp-8], edx
004ABC58  |.  8945 FC       mov     dword ptr [ebp-4], eax           ;  (ASCII "LUYING10zhiyuanMagicUtilsEasy_Real_Converter)
004ABC5B  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
004ABC5E  |.  E8 6D8CF5FF   call    004048D0
004ABC63  |.  33C0          xor     eax, eax                         ;  EAX置零
004ABC65  |.  55            push    ebp
004ABC66  |.  68 E7BC4A00   push    004ABCE7
004ABC6B  |.  64:FF30       push    dword ptr fs:[eax]
004ABC6E  |.  64:8920       mov     dword ptr fs:[eax], esp
004ABC71  |.  33DB          xor     ebx, ebx                         ;  EBX置零
004ABC73  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
004ABC76  |.  E8 658AF5FF   call    004046E0                         ;  字符串长度
004ABC7B  |.  85C0          test    eax, eax
004ABC7D  |.  7E 2C         jle     short 004ABCAB                   ;  为空则跳走
004ABC7F  |.  BE 01000000   mov     esi, 1                           ;  ESI初始化为1
004ABC84  |>  8B55 FC       /mov     edx, dword ptr [ebp-4]          ;  字符串
004ABC87  |.  8A5432 FF     |mov     dl, byte ptr [edx+esi-1]        ;  字符串的第i个字符
004ABC8B  |.  32D3          |xor     dl, bl                          ;  dl = dl | bl
004ABC8D  |.  81E2 FF000000 |and     edx, 0FF                        ;  EDX = EDX & 0FF
004ABC93  |.  8B1495 88FB4B>|mov     edx, dword ptr [edx*4+4BFB88]   ;  查表
004ABC9A  |.  C1EB 08       |shr     ebx, 8                          ;  EBX = EBX / 2^8
004ABC9D  |.  81E3 FFFFFF00 |and     ebx, 0FFFFFF                    ;  EBX = EBX & 0FFFFFF
004ABCA3  |.  33D3          |xor     edx, ebx                        ;  EDX = EDX | EBX
004ABCA5  |.  8BDA          |mov     ebx, edx                        ;  EBX = EDX
004ABCA7  |.  46            |inc     esi                             ;  ESI++
004ABCA8  |.  48            |dec     eax                             ;  EAX--
004ABCA9  |.^ 75 D9         \jnz     short 004ABC84                  ;  //循环
004ABCAB  |>  8BC3          mov     eax, ebx                         ;  ebx=8A90424A
004ABCAD  |.  33D2          xor     edx, edx                         ;  EDX置零
004ABCAF  |.  52            push    edx                              ; /Arg2 => 00000000
004ABCB0  |.  50            push    eax                              ; |Arg1
004ABCB1  |.  8D55 F4       lea     edx, dword ptr [ebp-C]           ; |
004ABCB4  |.  B8 08000000   mov     eax, 8                           ; |
004ABCB9  |.  E8 BED2F5FF   call    00408F7C                         ; \将数值转化为字符串
004ABCBE  |.  8B45 F4       mov     eax, dword ptr [ebp-C]           ;  (ASCII "8A90424A")
004ABCC1  |.  8B55 F8       mov     edx, dword ptr [ebp-8]
004ABCC4  |.  E8 C3CCF5FF   call    0040898C
004ABCC9  |.  33C0          xor     eax, eax
004ABCCB  |.  5A            pop     edx
004ABCCC  |.  59            pop     ecx
004ABCCD  |.  59            pop     ecx
004ABCCE  |.  64:8910       mov     dword ptr fs:[eax], edx
004ABCD1  |.  68 EEBC4A00   push    004ABCEE
004ABCD6  |>  8D45 F4       lea     eax, dword ptr [ebp-C]
004ABCD9  |.  E8 4287F5FF   call    00404420
004ABCDE  |.  8D45 FC       lea     eax, dword ptr [ebp-4]
004ABCE1  |.  E8 3A87F5FF   call    00404420
004ABCE6  \.  C3            retn
004ABCE7   .^ E9 5880F5FF   jmp     00403D44
004ABCEC   .^ EB E8         jmp     short 004ABCD6
004ABCEE   .  5E            pop     esi
004ABCEF   .  5B            pop     ebx
004ABCF0   .  8BE5          mov     esp, ebp
004ABCF2   .  5D            pop     ebp
004ABCF3   .  C3            retn                   //返回
;====================================================================|
>>>>>>>>>>>>>>>>>>>>>>>>>>>>"尾部字符串算法"算法<<<<<<<<<<<<<<<<<<<<<<
;--------------------------------------------------------------------|
在地址004ABBF7处跟进CALL->004AB97C
;--------------------------------------------------------------------|
004AB97C  /$  55            push    ebp                              ;  //本地调用来自 004ABBF7
004AB97D  |.  8BEC          mov     ebp, esp
004AB97F  |.  83C4 E8       add     esp, -18
004AB982  |.  53            push    ebx
004AB983  |.  33DB          xor     ebx, ebx
004AB985  |.  895D E8       mov     dword ptr [ebp-18], ebx
004AB988  |.  895D EC       mov     dword ptr [ebp-14], ebx
004AB98B  |.  895D F0       mov     dword ptr [ebp-10], ebx
004AB98E  |.  894D F4       mov     dword ptr [ebp-C], ecx           ;  ASCII "Easy_Real_Converter"
004AB991  |.  8955 F8       mov     dword ptr [ebp-8], edx           ;  ASCII "MagicUtils"
004AB994  |.  8945 FC       mov     dword ptr [ebp-4], eax           ;  ASCII "LUYING10zhiyuan"
004AB997  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
004AB99A  |.  E8 318FF5FF   call    004048D0
004AB99F  |.  8B45 F8       mov     eax, dword ptr [ebp-8]           ;  ASCII "MagicUtils"
004AB9A2  |.  E8 298FF5FF   call    004048D0
004AB9A7  |.  8B45 F4       mov     eax, dword ptr [ebp-C]           ;  ASCII "Easy_Real_Converter"
004AB9AA  |.  E8 218FF5FF   call    004048D0
004AB9AF  |.  8B45 0C       mov     eax, dword ptr [ebp+C]           ;  ASCII "1.50"
004AB9B2  |.  E8 198FF5FF   call    004048D0
004AB9B7  |.  33C0          xor     eax, eax
004AB9B9  |.  55            push    ebp
004AB9BA  |.  68 37BA4A00   push    004ABA37
004AB9BF  |.  64:FF30       push    dword ptr fs:[eax]
004AB9C2  |.  64:8920       mov     dword ptr fs:[eax], esp
004AB9C5  |.  33D2          xor     edx, edx
004AB9C7  |.  8B45 0C       mov     eax, dword ptr [ebp+C]
004AB9CA  |.  E8 19D6F5FF   call    00408FE8
004AB9CF  |.  8BD0          mov     edx, eax
004AB9D1  |.  8D4D F0       lea     ecx, dword ptr [ebp-10]
004AB9D4  |.  B8 48BA4A00   mov     eax, 004ABA48
004AB9D9  |.  E8 6E000000   call    004ABA4C                         ;  第一次CALL(参数初始化)
;---------------------------|
004AB9DE  |.  8B45 F4       mov     eax, dword ptr [ebp-C]           ;  ASCII "Easy_Real_Converter"
004AB9E1  |.  E8 FA8EF5FF   call    004048E0
004AB9E6  |.  8D4D EC       lea     ecx, dword ptr [ebp-14]          ;  
004AB9E9  |.  33D2          xor     edx, edx
004AB9EB  |.  E8 5C000000   call    004ABA4C                         ;  第二次CALL
;---------------------------|
004AB9F0  |.  8B45 FC       mov     eax, dword ptr [ebp-4]           ;  ASCII "LUYING10zhiyuan"
004AB9F3  |.  E8 E88EF5FF   call    004048E0
004AB9F8  |.  8D4D E8       lea     ecx, dword ptr [ebp-18]
004AB9FB  |.  33D2          xor     edx, edx
004AB9FD  |.  E8 4A000000   call    004ABA4C                         ;  第三次CALL
;---------------------------|
004ABA02  |.  8B45 F8       mov     eax, dword ptr [ebp-8]           ;  ASCII "MagicUtils"
004ABA05  |.  E8 D68EF5FF   call    004048E0
004ABA0A  |.  8B4D 08       mov     ecx, dword ptr [ebp+8]
004ABA0D  |.  33D2          xor     edx, edx
004ABA0F  |.  E8 38000000   call    004ABA4C                         ;  第四次CALL
;---------------------------|  
004ABA14  |.  33C0          xor     eax, eax
004ABA16  |.  5A            pop     edx
004ABA17  |.  59            pop     ecx
004ABA18  |.  59            pop     ecx
004ABA19  |.  64:8910       mov     dword ptr fs:[eax], edx
004ABA1C  |.  68 3EBA4A00   push    004ABA3E
004ABA21  |>  8D45 E8       lea     eax, dword ptr [ebp-18]
004ABA24  |.  BA 06000000   mov     edx, 6
004ABA29  |.  E8 168AF5FF   call    00404444
004ABA2E  |.  8D45 0C       lea     eax, dword ptr [ebp+C]
004ABA31  |.  E8 EA89F5FF   call    00404420
004ABA36  \.  C3            retn
004ABA37   .^ E9 0883F5FF   jmp     00403D44
004ABA3C   .^ EB E3         jmp     short 004ABA21
004ABA3E   .  5B            pop     ebx
004ABA3F   .  8BE5          mov     esp, ebp
004ABA41   .  5D            pop     ebp
004ABA42   .  C2 0800       retn    8                                ;  //返回
;--------------------------------------------------------------------|
;在地址004AB9EB处跟进CALL->004ABA4C 
;--------------------------------------------------------------------|
004ABA4C  /$  55            push    ebp                              ;  //本地调用来自 004AB9D9, 004AB9EB, 004AB9FD, 004ABA0F
004ABA4D  |.  8BEC          mov     ebp, esp
004ABA4F  |.  83C4 EC       add     esp, -14
004ABA52  |.  53            push    ebx
004ABA53  |.  56            push    esi
004ABA54  |.  57            push    edi
004ABA55  |.  33DB          xor     ebx, ebx
004ABA57  |.  895D EC       mov     dword ptr [ebp-14], ebx
004ABA5A  |.  895D F0       mov     dword ptr [ebp-10], ebx
004ABA5D  |.  894D F8       mov     dword ptr [ebp-8], ecx
004ABA60  |.  8BF2          mov     esi, edx                         ;  ESI = EDX   
004ABA62  |.  8945 FC       mov     dword ptr [ebp-4], eax           ;  ASCII "Easy_Real_Converter"
004ABA65  |.  33C0          xor     eax, eax                         ;  EAX置零
004ABA67  |.  55            push    ebp
004ABA68  |.  68 86BB4A00   push    004ABB86
004ABA6D  |.  64:FF30       push    dword ptr fs:[eax]
004ABA70  |.  64:8920       mov     dword ptr fs:[eax], esp
004ABA73  |.  8D45 F0       lea     eax, dword ptr [ebp-10]
004ABA76  |.  8B55 FC       mov     edx, dword ptr [ebp-4]
004ABA79  |.  E8 9A8BF5FF   call    00404618
004ABA7E  |.  8B45 F0       mov     eax, dword ptr [ebp-10]          ;  EAX = 字符串
004ABA81  |.  E8 5A8CF5FF   call    004046E0                         ;  字符串长度
004ABA86  |.  8BD8          mov     ebx, eax                         ;  EBX = EAX
004ABA88  |.  85DB          test    ebx, ebx
004ABA8A  |.  75 13         jnz     short 004ABA9F                   ;  //跳走
;---------------------------|<仅在第一次执行>
004ABA8C  |.  8935 E01E4C00 mov     dword ptr [4C1EE0], esi          ;  [4C1EE0]初始化为0
004ABA92  |.  6BC6 64       imul    eax, esi, 64
004ABA95  |.  A3 E41E4C00   mov     dword ptr [4C1EE4], eax          ;  [4C1EE4]初始化为0
004ABA9A  |.  E9 CC000000   jmp     004ABB6B                         ;  //跳过循环体 
;---------------------------|<仅在第一次执行>
004ABA9F  |>  8B45 F8       mov     eax, dword ptr [ebp-8]           ;  ->来到这
004ABAA2  |.  E8 7989F5FF   call    00404420                         ;  字符串长度
004ABAA7  |.  8BFB          mov     edi, ebx                         ;  EDI = EBX
004ABAA9  |.  4F            dec     edi                              ;  EDI--
004ABAAA  |.  85FF          test    edi, edi
004ABAAC  |.  0F8C B9000000 jl      004ABB6B
004ABAB2  |.  47            inc     edi                              ;  EDI++
004ABAB3  |.  33F6          xor     esi, esi                         ;  ESI置零
004ABAB5  |>  8B45 FC       /mov     eax, dword ptr [ebp-4]          ;  字符串
004ABAB8  |.  8A0430        |mov     al, byte ptr [eax+esi]          ;  字符串的第i个字符
004ABABB  |.  3C 20         |cmp     al, 20                          ;  \
004ABABD  |.  0F82 A0000000 |jb      004ABB63                        ;   |排除非法字符
004ABAC3  |.  3C 7E         |cmp     al, 7E                          ;   |
004ABAC5  |.  0F87 98000000 |ja      004ABB63                        ;  /
004ABACB  |.  8B15 E01E4C00 |mov     edx, dword ptr [4C1EE0]         ;  EDX = [4C1EE0]
004ABAD1  |.  81E2 FFFFFF1F |and     edx, 1FFFFFFF                   ;  EDX = EDX & 1FFFFFFF
004ABAD7  |.  8B0D E01E4C00 |mov     ecx, dword ptr [4C1EE0]         ;  ECX = [4C1EE0]
004ABADD  |.  C1E9 1D       |shr     ecx, 1D                         ;  ECX = ECX / 2^1D
004ABAE0  |.  83E1 31       |and     ecx, 31                         ;  ECX = ECX & 31
004ABAE3  |.  33D1          |xor     edx, ecx                        ;  EDX = EDX | ECX
004ABAE5  |.  8915 E01E4C00 |mov     dword ptr [4C1EE0], edx         ;  [4C1EE0] = EDX
004ABAEB  |.  8845 F7       |mov     byte ptr [ebp-9], al            ;  [ebp-9] = al
004ABAEE  |.  A1 E01E4C00   |mov     eax, dword ptr [4C1EE0]         ;  EAX = [4C1EE0]
004ABAF3  |.  B9 5F000000   |mov     ecx, 5F                         ;  ECX = 5F
004ABAF8  |.  99            |cdq                                     ;  EDX = 0
004ABAF9  |.  F7F9          |idiv    ecx                             ;  EAX = EAX / ECX
004ABAFB  |.  33D2          |xor     edx, edx                        ;  EDX置零
004ABAFD  |.  8A55 F7       |mov     dl, byte ptr [ebp-9]            ;  dl = [ebp-9]
004ABB00  |.  83EA 20       |sub     edx, 20                         ;  EDX = EDX - 20H
004ABB03  |.  2BC2          |sub     eax, edx                        ;  EAX = EAX - EDX
004ABB05  |.  E8 32FEFFFF   |call    004AB93C                        ;  运算
004ABB0A  |.  8BD8          |mov     ebx, eax                        ;  EBX = EAX
004ABB0C  |.  80C3 20       |add     bl, 20                          ;  bl = bl + 20H
004ABB0F  |.  FF05 E41E4C00 |inc     dword ptr [4C1EE4]              ;  [4C1EE4]++
004ABB15  |.  813D E41E4C00>|cmp     dword ptr [4C1EE4], 5179        ;  和5179H比较
004ABB1F  |.  7C 07         |jl      short 004ABB28                  ;  //小于则跳走
004ABB21  |.  33C0          |xor     eax, eax
004ABB23  |.  A3 E41E4C00   |mov     dword ptr [4C1EE4], eax
004ABB28  |>  8A45 F7       |mov     al, byte ptr [ebp-9]            ;  al = [ebp-9]
004ABB2B  |.  32C3          |xor     al, bl                          ;  al = al | bl
004ABB2D  |.  25 FF000000   |and     eax, 0FF                        ;  EAX = EAX & 0FF
004ABB32  |.  8B15 E01E4C00 |mov     edx, dword ptr [4C1EE0]         ;  EDX = [4C1EE0]
004ABB38  |.  0315 E01E4C00 |add     edx, dword ptr [4C1EE0]         ;  EDX = EDX + [4C1EE0]
004ABB3E  |.  03C2          |add     eax, edx                        ;  EAX = EAX + EDX
004ABB40  |.  0305 E41E4C00 |add     eax, dword ptr [4C1EE4]         ;  EAX = EAX + [4C1EE4]
004ABB46  |.  A3 E01E4C00   |mov     dword ptr [4C1EE0], eax         ;  [4C1EE0] = EAX
004ABB4B  |.  8D45 EC       |lea     eax, dword ptr [ebp-14]
004ABB4E  |.  8BD3          |mov     edx, ebx                        ;  EDX = EBX(转为字符)
004ABB50  |.  E8 B38AF5FF   |call    00404608
004ABB55  |.  8B55 EC       |mov     edx, dword ptr [ebp-14]
004ABB58  |.  8B45 F8       |mov     eax, dword ptr [ebp-8]
004ABB5B  |.  E8 888BF5FF   |call    004046E8
004ABB60  |.  8B45 F8       |mov     eax, dword ptr [ebp-8]
004ABB63  |>  46            |inc     esi                             ;  ESI++
004ABB64  |.  4F            |dec     edi                             ;  EDI--
004ABB65  |.^ 0F85 4AFFFFFF \jnz     004ABAB5                        ;  //循环
004ABB6B  |>  33C0          xor     eax, eax                         ;  EAX置零         
004ABB6D  |.  5A            pop     edx
004ABB6E  |.  59            pop     ecx
004ABB6F  |.  59            pop     ecx
004ABB70  |.  64:8910       mov     dword ptr fs:[eax], edx
004ABB73  |.  68 8DBB4A00   push    004ABB8D
004ABB78  |>  8D45 EC       lea     eax, dword ptr [ebp-14]
004ABB7B  |.  BA 02000000   mov     edx, 2
004ABB80  |.  E8 BF88F5FF   call    00404444
004ABB85  \.  C3            retn
004ABB86   .^ E9 B981F5FF   jmp     00403D44
004ABB8B   .^ EB EB         jmp     short 004ABB78
004ABB8D   .  5F            pop     edi
004ABB8E   .  5E            pop     esi
004ABB8F   .  5B            pop     ebx
004ABB90   .  8BE5          mov     esp, ebp
004ABB92   .  5D            pop     ebp
004ABB93   .  C3            retn                                     ;  //返回 
;--------------------------------------------------------------------|
;在地址004ABB05处F7跟进运算CALL->004AB93C[EAX的处理规则] 
;--------------------------------------------------------------------|
004AB93C  /$  3D 1C250000   cmp     eax, 251C
004AB941  |.  7C 0C         jl      short 004AB94F                   ;   小于则跳
004AB943  |>  2D 1C250000   /sub     eax, 251C
004AB948  |.  3D 1C250000   |cmp     eax, 251C
004AB94D  |.^ 7D F4         \jge     short 004AB943
004AB94F  |>  3D B6030000   cmp     eax, 3B6
004AB954  |.  7C 0C         jl      short 004AB962                   ;   小于则跳
004AB956  |>  2D B6030000   /sub     eax, 3B6
004AB95B  |.  3D B6030000   |cmp     eax, 3B6
004AB960  |.^ 7D F4         \jge     short 004AB956
004AB962  |>  83F8 5F       cmp     eax, 5F
004AB965  |.  7C 08         jl      short 004AB96F                   ;   小于则跳
004AB967  |>  83E8 5F       /sub     eax, 5F
004AB96A  |.  83F8 5F       |cmp     eax, 5F
004AB96D  |.^ 7D F8         \jge     short 004AB967
004AB96F  |>  85C0          test    eax, eax
004AB971  |.  7D 07         jge     short 004AB97A                   ;   >=则跳
004AB973  |>  83C0 5F       /add     eax, 5F
004AB976  |.  85C0          |test    eax, eax
004AB978  |.^ 7C F9         \jl      short 004AB973
004AB97A  \>  C3            retn                                     ;   //返回
;====================================================================|
>>>>>>>>>>>>>>>>>>>>>>>>>>>>序列号加密算法<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;--------------------------------------------------------------------|
;在地址004BB219处F7跟进关键CALL->004AED3C 
;--------------------------------------------------------------------|
004AED3C  /$  55            push    ebp                              ;  //本地调用来自 004BB219
004AED3D  |.  8BEC          mov     ebp, esp
004AED3F  |.  83C4 DC       add     esp, -24
004AED42  |.  53            push    ebx
004AED43  |.  33C9          xor     ecx, ecx
004AED45  |.  894D F8       mov     dword ptr [ebp-8], ecx
004AED48  |.  894D F4       mov     dword ptr [ebp-C], ecx
004AED4B  |.  8BDA          mov     ebx, edx
004AED4D  |.  8945 FC       mov     dword ptr [ebp-4], eax
004AED50  |.  8B45 FC       mov     eax, dword ptr [ebp-4]           ;  [ebp-4] = 序列号
004AED53  |.  E8 785BF5FF   call    004048D0
004AED58  |.  8D45 EC       lea     eax, dword ptr [ebp-14]
004AED5B  |.  8B15 4CBD4A00 mov     edx, dword ptr [4ABD4C]          ;  1.004ABD50
004AED61  |.  E8 6662F5FF   call    00404FCC
004AED66  |.  8D45 E4       lea     eax, dword ptr [ebp-1C]
004AED69  |.  8B15 4CBD4A00 mov     edx, dword ptr [4ABD4C]          ;  1.004ABD50
004AED6F  |.  E8 5862F5FF   call    00404FCC
004AED74  |.  8D45 DC       lea     eax, dword ptr [ebp-24]
004AED77  |.  8B15 4CBD4A00 mov     edx, dword ptr [4ABD4C]          ;  1.004ABD50
004AED7D  |.  E8 4A62F5FF   call    00404FCC
004AED82  |.  33C0          xor     eax, eax
004AED84  |.  55            push    ebp
004AED85  |.  68 3AEE4A00   push    004AEE3A
004AED8A  |.  64:FF30       push    dword ptr fs:[eax]
004AED8D  |.  64:8920       mov     dword ptr fs:[eax], esp
004AED90  |.  8D45 F8       lea     eax, dword ptr [ebp-8]
004AED93  |.  8B55 FC       mov     edx, dword ptr [ebp-4]           ;  EDX = 序列号
004AED96  |.  E8 1D57F5FF   call    004044B8
004AED9B  |.  8D55 F4       lea     edx, dword ptr [ebp-C]
004AED9E  |.  8B45 F8       mov     eax, dword ptr [ebp-8]           ;  EAX = 序列号
004AEDA1  |.  E8 46D3FFFF   call    004AC0EC
004AEDA6  |.  8D45 F8       lea     eax, dword ptr [ebp-8]
004AEDA9  |.  E8 7256F5FF   call    00404420
004AEDAE  |.  8D55 EC       lea     edx, dword ptr [ebp-14]
004AEDB1  |.  B8 50EE4A00   mov     eax, 004AEE50                    ;  e = 65537
004AEDB6  |.  E8 25D7FFFF   call    004AC4E0
004AEDBB  |.  8D55 E4       lea     edx, dword ptr [ebp-1C]
004AEDBE  |.  B8 60EE4A00   mov     eax, 004AEE60                    ;  n = 11854405724806361658422632892116497718759520709779
004AEDC3  |.  E8 18D7FFFF   call    004AC4E0
004AEDC8  |.  8D45 DC       lea     eax, dword ptr [ebp-24]
004AEDCB  |.  50            push    eax
004AEDCC  |.  8D45 DC       lea     eax, dword ptr [ebp-24]
004AEDCF  |.  50            push    eax
004AEDD0  |.  8D45 DC       lea     eax, dword ptr [ebp-24]
004AEDD3  |.  50            push    eax
004AEDD4  |.  8D45 DC       lea     eax, dword ptr [ebp-24]
004AEDD7  |.  50            push    eax
004AEDD8  |.  8D45 F8       lea     eax, dword ptr [ebp-8]
004AEDDB  |.  50            push    eax
004AEDDC  |.  8D4D E4       lea     ecx, dword ptr [ebp-1C]
004AEDDF  |.  8D55 EC       lea     edx, dword ptr [ebp-14]
004AEDE2  |.  8B45 F4       mov     eax, dword ptr [ebp-C]
004AEDE5  |.  E8 22FBFFFF   call    004AE90C
004AEDEA  |.  8BC3          mov     eax, ebx
004AEDEC  |.  8B55 F8       mov     edx, dword ptr [ebp-8]           ;  堆栈 ss:[0012FD98]=00F6E2E0, (ASCII 03,"c9?)
004AEDEF  |.  E8 8056F5FF   call    00404474
004AEDF4  |.  8D45 EC       lea     eax, dword ptr [ebp-14]
004AEDF7  |.  E8 5CD9FFFF   call    004AC758
004AEDFC  |.  8D45 E4       lea     eax, dword ptr [ebp-1C]
004AEDFF  |.  E8 54D9FFFF   call    004AC758
004AEE04  |.  8D45 DC       lea     eax, dword ptr [ebp-24]
004AEE07  |.  E8 4CD9FFFF   call    004AC758
004AEE0C  |.  33C0          xor     eax, eax
004AEE0E  |.  5A            pop     edx
004AEE0F  |.  59            pop     ecx
004AEE10  |.  59            pop     ecx
004AEE11  |.  64:8910       mov     dword ptr fs:[eax], edx
004AEE14  |.  68 41EE4A00   push    004AEE41
004AEE19  |>  8D45 DC       lea     eax, dword ptr [ebp-24]
004AEE1C  |.  8B15 4CBD4A00 mov     edx, dword ptr [4ABD4C]          ;  1.004ABD50
004AEE22  |.  B9 03000000   mov     ecx, 3
004AEE27  |.  E8 BC62F5FF   call    004050E8
004AEE2C  |.  8D45 F4       lea     eax, dword ptr [ebp-C]
004AEE2F  |.  BA 03000000   mov     edx, 3
004AEE34  |.  E8 0B56F5FF   call    00404444
004AEE39  \.  C3            retn
004AEE3A   .^ E9 054FF5FF   jmp     00403D44
004AEE3F   .^ EB D8         jmp     short 004AEE19
004AEE41   .  5B            pop     ebx
004AEE42   .  8BE5          mov     esp, ebp
004AEE44   .  5D            pop     ebp
004AEE45   .  C3            retn

;====================================================================|

四、算法总结

1.构造字符串
用户名(大写) + zhiyuan + MagicUtils + Easy_Real_Converter + 1.50 + 尾缀字符串
"尾缀字符串"TailString算法如下:

int  [4C1EE0] = 0;
int  [4C1EE4] = 0;
srting TailString = "";

str1 = "Easy_Real_Converter";
for(int i = 0; i < str1.length; i++)
{
   [4C1EE0] = ([4C1EE0] & 1FFFFFFF) | ([4C1EE0] / 2^1D) & 31;
   EAX = ([4C1EE0] / 5F) - (str[i] - 20H);

   while(EAX > 0x251C)
      EAX = EAX - 0x251C;
   while(EAX > 0x3B6)
      EAX = EAX - 0x3B6;
   while(EAX > 0x5F)
      EAX = EAX - 0x5F;
   while(EAX < 0)
      EAX = EAX + 0x5F;

   EBX = EAX + 0X20;

   [4C1EE4]++;
   
   if([4C1EE4] >= 0x5179)
      [4C1EE4] = 0;

   EAX = (str[i] | EBX) & 0FF + 2*[4C1EE0] + [4C1EE4];
   [4C1EE0] = EAX;
}

str2 = "用户名(大写)+zhiyuan"
for(int i = 0; i < str1.length; i++)
{
   [4C1EE0] = ([4C1EE0] & 1FFFFFFF) | ([4C1EE0] / 2^0x1D) & 0x31;
   EAX = ([4C1EE0] / 0x5F) - (str[i] - 0x20);

   while(EAX > 0x251C)
      EAX = EAX - 0x251C;
   while(EAX > 0x3B6)
      EAX = EAX - 0x3B6;
   while(EAX > 0x5F)
      EAX = EAX - 0x5F;
   while(EAX < 0)
      EAX = EAX + 0x5F;

   EBX = EAX + 0x20;

   [4C1EE4]++;
   
   if([4C1EE4] >= 0x5179)
      [4C1EE4] = 0;

   EAX = (str[i] | EBX) & 0xFF + 2*[4C1EE0] + [4C1EE4];
   [4C1EE0] = EAX;
}

str3 = "MagicUtils"
for(int i = 0; i < str1.length; i++)
{
   [4C1EE0] = ([4C1EE0] & 1FFFFFFF) | ([4C1EE0] / 2^0x1D) & 0x31;
   EAX = ([4C1EE0] / 0x5F) - (str[i] - 0x20);

   while(EAX > 0x251C)
      EAX = EAX - 0x251C;
   while(EAX > 0x3B6)
      EAX = EAX - 0x3B6;
   while(EAX > 0x5F)
      EAX = EAX - 0x5F;
   while(EAX < 0)
      EAX = EAX + 0x5F;

   EBX = EAX + 0x20;

   TailString = TailString + string.Prase(EBX); 

   [4C1EE4]++;
   
   if([4C1EE4] >= 0x5179)
      [4C1EE4] = 0;

   EAX = (str[i] | EBX) & 0FF + 2*[4C1EE0] + [4C1EE4];
   [4C1EE0] = EAX;     
}

string EncryptName = EBX.ToString;

2.注册码加密
SerStr = "XXXXXXXXXXXXXXXX";
int EBX = 0;
定义一个Table函数,专门用于完成查表返回值
其参数是EDX
;--------------------------------------------------------------------| 
;在地址004ABC93处跟随数据窗口得到一张密码表(循环中计算用)
;--------------------------------------------------------------------|  <表>
004BFB88  00 00 00 00 96 30 07 77 2C 61 0E EE BA 51 09 99  ....?w,a詈Q.
004BFB98  19 C4 6D 07 8F F4 6A 70 35 A5 63 E9 A3 95 64 9E  膍忯jp5椋昫
004BFBA8  32 88 DB 0E A4 B8 DC 79 1E E9 D5 E0 88 D9 D2 97  2堐じ躽檎鄨僖
004BFBB8  2B 4C C6 09 BD 7C E1 7E 07 2D 58 E7 91 1D BF 90  +L?絴醻-X鐟繍
004BFBC8  C8 20 6E 3B 5E 10 69 4C E4 41 60 D5 72 71 67 A2  ?n;^iL銩`誶qg
XXXXXXXX  XXXXXXXXXXXX省略若干行XXXXXXXXXXXXXXXXXXXXXXXXX
004BFF38  53 AE BC A9 8A C2 BA CA 7F CF B2 47 E9 FF B5 30  S潞?喜G??
004BFF48  1C F2 BD BD C5 9E BB DE 30 93 B3 53 A6 A3 B4 24  蚪脚灮?摮SΓ?
004BFF58  05 36 D0 BA 93 06 D7 CD 29 57 DE 54 BF 67 D9 23  6泻?淄)W轙縢?
004BFF68  2E 7A 66 B3 B8 4A 61 C4 02 1B 68 5D 94 2B 6F 2A  .zf掣Ja?h]?o*
004BFF78  37 BE 0B B4 A1 8E 0C C3 1B DF 05 5A 8D EF 02 2D  7?础???Z嶏-
;--------------------------------------------------------------------| 

for(int i = 0; i < SerStr.length; i++)
{
   EDX = (SerStr[i] | EBX) & 0FF;
   EBX = Table(EDX*4+0x4BFB88) | ((EBX / 2^8) & 0xFFFFFF);
}

string EncryptNumber = RSA(SerNum);

3.比较加密结果
004BB245   .  E8 E295F4FF   call    0040482C

RSA算法不太清楚,序列号加密算法004AED3C在处理上有些微妙的变化

先暴掉,再说:
004BB255   mov     byte ptr [4C1FD4], 0 
修改为
004BB255   mov     byte ptr [4C1FD4], 1   
  
能力有限,暂时先分析到这里,等待高手补充...

已经完成的部分:
1.用户名加密算法分析
2.序列号加密方法判定

待解决的问题:
序列号RSA具体加密算法

呼,天亮了,外面还有公鸡打鸣e_e

太困了,8说了先,去觉觉咯...zZ

上一篇   下一篇