天舟慧眼注册分析
【破解作者】 jsliyangsj
【作者邮箱】 sjcrack@yahoo.com.cn
【使用工具】 peid OllyDbg1.10
【破解平台】 Winxp
【软件名称】 天舟慧眼2.1
【软件地址】 http://www.argosoft.net
【编写语言】 Microsoft Visual C++ 6.0
程序中没有可用信息:直接用暂停法
……………………………………………………………………………………………………………………………………
0043DC50   .  6A>push -1                                        ;  用暂停法到了这里
0043DC52   .  68>push PC_Eyes.004BDD70                          ;  SE 句柄安装
0043DC57   .  64>mov eax,dword ptr fs:[0]
0043DC5D   .  50 push eax
0043DC5E   .  64>mov dword ptr fs:[0],esp
0043DC65   .  83>sub esp,70
0043DC68   .  A1>mov eax,dword ptr ds:[4ED94C]
0043DC6D   .  56 push esi
0043DC6E   .  57 push edi
0043DC6F   .  8B>mov esi,ecx
0043DC71   .  89>mov dword ptr ss:[esp+8],eax
0043DC75   .  C7>mov dword ptr ss:[esp+80],0
0043DC80   .  89>mov dword ptr ss:[esp+C],eax
0043DC84   .  68>push 41B
0043DC89   .  C6>mov byte ptr ss:[esp+84],1
0043DC91   .  E8>call PC_Eyes.00498380
0043DC96   .  8D>lea ecx,dword ptr ss:[esp+8]
0043DC9A   .  51 push ecx
0043DC9B   .  8B>mov ecx,eax
0043DC9D   .  E8>call PC_Eyes.00495EFF                          ;  得到用户名
0043DCA2   .  68>push 41C
0043DCA7   .  8B>mov ecx,esi
0043DCA9   .  E8>call PC_Eyes.00498380
0043DCAE   .  8D>lea edx,dword ptr ss:[esp+C]
0043DCB2   .  8B>mov ecx,eax
0043DCB4   .  52 push edx
0043DCB5   .  E8>call PC_Eyes.00495EFF                          ;  得到注册码
0043DCBA   .  8B>mov eax,dword ptr ss:[esp+8]                   ;  用户名
0043DCBE   .  68>push PC_Eyes.004EC1CC                          ; /Arg2 = 004EC1CC ASCII "crsky"
0043DCC3   .  50 push eax                                       ; |Arg1
0043DCC4   .  E8>call PC_Eyes.00481BF0                          ; \看是不是黑名单crsky如果是它,呵呵就关机!!!
0043DCC9   .  8B>mov edi,dword ptr ds:[<&USER32.PostMessageA>]  ;  USER32.PostMessageA
0043DCCF   .  83>add esp,8
0043DCD2   .  85>test eax,eax
0043DCD4   .  0F>jnz PC_Eyes.0043DD5B
0043DCDA   .  6A>push 2
0043DCDC   .  8B>mov ecx,esi
0043DCDE   .  E8>call PC_Eyes.00499D7D
0043DCE3   .  E8>call PC_Eyes.0049A137
0043DCE8   .  85>test eax,eax
0043DCEA   .  74>je short PC_Eyes.0043DCF5
0043DCEC   .  8B>mov edx,dword ptr ds:[eax]
0043DCEE   .  8B>mov ecx,eax
0043DCF0   .  FF>call dword ptr ds:[edx+74]
0043DCF3   .  EB>jmp short PC_Eyes.0043DCF7
0043DCF5   >  33>xor eax,eax
0043DCF7   >  8B>mov eax,dword ptr ds:[eax+1C]
0043DCFA   .  6A>push 0
0043DCFC   .  6A>push 0
0043DCFE   .  6A>push 10
0043DD00   .  50 push eax
0043DD01   .  FF>call edi
0043DD03   .  8D>lea ecx,dword ptr ss:[esp+14]
0043DD07   .  51 push ecx                                       ; /phToken
0043DD08   .  6A>push 28                                        ; |DesiredAccess = TOKEN_QUERY|TOKEN_ADJUST_PRIVILEGES
0043DD0A   .  FF>call dword ptr ds:[<&KERNEL32.GetCurrentProces>; |[GetCurrentProcess
0043DD10   .  50 push eax                                       ; |hProcess
0043DD11   .  FF>call dword ptr ds:[<&ADVAPI32.OpenProcessToken>; \OpenProcessToken
0043DD17   .  8D>lea edx,dword ptr ss:[esp+2C]
0043DD1B   .  52 push edx                                       ; /pLocalId
0043DD1C   .  68>push PC_Eyes.004EC1B8                          ; |Privilege = "SeShutdownPrivilege"
0043DD21   .  6A>push 0                                         ; |SystemName = NULL
0043DD23   .  FF>call dword ptr ds:[<&ADVAPI32.LookupPrivilegeV>; \LookupPrivilegeValueA
0043DD29   .  8B>mov ecx,dword ptr ss:[esp+14]
0043DD2D   .  6A>push 0                                         ; /pRetLen = NULL
0043DD2F   .  6A>push 0                                         ; |pPrevState = NULL
0043DD31   .  8D>lea eax,dword ptr ss:[esp+30]                  ; |
0043DD35   .  6A>push 0                                         ; |PrevStateSize = 0
0043DD37   .  50 push eax                                       ; |pNewState
0043DD38   .  6A>push 0                                         ; |DisableAllPrivileges = FALSE
0043DD3A   .  51 push ecx                                       ; |hToken
0043DD3B   .  C7>mov dword ptr ss:[esp+40],1                    ; |
0043DD43   .  C7>mov dword ptr ss:[esp+4C],2                    ; |
0043DD4B   .  FF>call dword ptr ds:[<&ADVAPI32.AdjustTokenPrivi>; \AdjustTokenPrivileges
0043DD51   .  6A>push 0                                         ; /Reserved = 0
0043DD53   .  6A>push 0C                                        ; |Options = EWX_FORCE|EWX_POWEROFF
0043DD55   .  FF>call dword ptr ds:[<&USER32.ExitWindowsEx>]    ; \ExitWindowsEx
0043DD5B   >  8B>mov edx,dword ptr ss:[esp+C]
0043DD5F   .  8B>mov eax,dword ptr ss:[esp+8]
……………………………………………………………………………………………………………………………………………………………………
检查用户名是不是crsky,如果是,认为是盗版,就关机!!
……………………………………………………………………………………………………………………………………………………………………
0043DD63   .  6A>push 1
0043DD65   .  52 push edx                                       ;  注册码
0043DD66   .  50 push eax                                       ;  用户名
0043DD67   .  E8>call PC_Eyes.00435410                          ;  关键!!!!!进入
0043DD6C   .  83>add esp,0C
0043DD6F   .  85>test eax,eax
0043DD71   .  75>jnz short PC_Eyes.0043DDCF                     ;  关键跳转
0043DD73   .  6A>push -1
0043DD75   .  50 push eax
0043DD76   .  68>push 0F03E
0043DD7B   .  E8>call PC_Eyes.004A1092                          ;  出错对话框
0043DD80   .  A1>mov eax,dword ptr ds:[4EFF68]

0043DDED   .  6A>push 40                                        ; /Arg3 = 00000040
0043DDEF   .  51 push ecx                                       ; |Arg2
0043DDF0   .  52 push edx                                       ; |Arg1
0043DDF1   .  8D>lea ecx,dword ptr ss:[esp+1C]                  ; |
0043DDF5   .  C6>mov byte ptr ss:[esp+8C],2                     ; |
0043DDFD   .  E8>call PC_Eyes.0044CC70                          ; \PC_Eyes.0044CC70
0043DE02   .  A1>mov eax,dword ptr ds:[4EFE28]
0043DE07   .  8B>mov ecx,dword ptr ss:[esp+8]
0043DE0B   .  8B>mov edi,dword ptr ds:[<&KERNEL32.WritePrivateP>;  kernel32.WritePrivateProfileStringA
0043DE11   .  50 push eax                                       ; /如果正确将注册信息放在安装目录下的PerfectRMonitor里面
0043DE12   .  51 push ecx                                       ; |String
0043DE13   .  68>push PC_Eyes.004EBCC4                          ; |用户名
0043DE18   .  68>push PC_Eyes.004EB254                          ; |Section = "Root"
0043DE1D   .  FF>call edi                                       ; \WritePrivateProfileStringA
0043DE1F   .  8B>mov edx,dword ptr ds:[4EFE28]
0043DE25   .  8D>lea eax,dword ptr ss:[esp+38]
0043DE29   .  52 push edx                                       ; /FileName => "C:\Program Files\PC Eyes\PerfectRMonitor.ini"
0043DE2A   .  50 push eax                                       ; |String
0043DE2B   .  68>push PC_Eyes.004EBEF8                          ; |注册码
0043DE30   .  68>push PC_Eyes.004EB254                          ; |Section = "Root"
0043DE35   .  FF>call edi                                       ; \WritePrivateProfileStringA
0043DE37   .  8D>lea ecx,dword ptr ss:[esp+18]
…………………………………………………………………………………………………………………………………………
进入0043DD67   .  E8>call PC_Eyes.00435410                          ;  关键!!!!!进入
………………………………………………………………………………………………………………………………………………
00435410  /$  64>mov eax,dword ptr fs:[0]
00435416  |.  6A>push -1
00435418  |.  68>push PC_Eyes.004BCD0B
0043541D  |.  50 push eax
0043541E  |.  64>mov dword ptr fs:[0],esp
00435425  |.  81>sub esp,108
0043542B  |.  83>or ecx,FFFFFFFF
0043542E  |.  33>xor eax,eax
00435430  |.  53 push ebx
00435431  |.  55 push ebp
00435432  |.  8B>mov ebp,dword ptr ss:[esp+120]                 ;  用户名
00435439  |.  57 push edi
0043543A  |.  8B>mov edi,ebp
0043543C  |.  F2>repne scas byte ptr es:[edi]
0043543E  |.  F7>not ecx
00435440  |.  49 dec ecx                                        ;  用户名的位数
00435441  |.  0F>je PC_Eyes.004354E8
00435447  |.  8B>mov ebx,dword ptr ss:[esp+128]                 ;  注册码
0043544E  |.  83>or ecx,FFFFFFFF
00435451  |.  8B>mov edi,ebx
00435453  |.  F2>repne scas byte ptr es:[edi]
00435455  |.  F7>not ecx
00435457  |.  49 dec ecx                                        ;  注册码的位数‘
00435458  |.  0F>je PC_Eyes.004354E8
0043545E  |.  56 push esi
0043545F  |.  8D>lea ecx,dword ptr ss:[esp+10]
00435463  |.  E8>call PC_Eyes.0044CA90                          ;  没用
00435468  |.  8B>mov edi,ebx                                    ;  注册码
0043546A  |.  83>or ecx,FFFFFFFF
0043546D  |.  33>xor eax,eax
0043546F  |.  8D>lea edx,dword ptr ss:[esp+14]
00435473  |.  F2>repne scas byte ptr es:[edi]
00435475  |.  F7>not ecx
00435477  |.  2B>sub edi,ecx
00435479  |.  C7>mov dword ptr ss:[esp+120],0
00435484  |.  8B>mov eax,ecx
00435486  |.  8B>mov esi,edi
00435488  |.  8B>mov edi,edx
0043548A  |.  C1>shr ecx,2
0043548D  |.  F3>rep movs dword ptr es:[edi],dword ptr ds:[esi] ;  复制注册码
0043548F  |.  8B>mov ecx,eax
00435491  |.  8B>mov eax,dword ptr ss:[esp+130]
00435498  |.  83>and ecx,3
0043549B  |.  83>cmp eax,1
0043549E  |.  F3>rep movs byte ptr es:[edi],byte ptr ds:[esi]
004354A0  |.  75>jnz short PC_Eyes.004354BE
004354A2  |.  8B>mov edi,ebx
004354A4  |.  83>or ecx,FFFFFFFF
004354A7  |.  33>xor eax,eax
004354A9  |.  F2>repne scas byte ptr es:[edi]
004354AB  |.  F7>not ecx
004354AD  |.  49 dec ecx                                        ;  注册码的位数
004354AE  |.  51 push ecx                                       ; /注册码的位数
004354AF  |.  8D>lea ecx,dword ptr ss:[esp+18]                  ; |注册码值
004354B3  |.  51 push ecx                                       ; |压入注册码
004354B4  |.  53 push ebx                                       ; |Arg1
004354B5  |.  8D>lea ecx,dword ptr ss:[esp+1C]                  ; |
004354B9  |.  E8>call PC_Eyes.0044CC70                          ; \关键 进入,对注册码处理每三个注册码得到四个字符用于最后比较用
004354BE  |>  8D>lea edx,dword ptr ss:[esp+14]                  ;  取出用注册码得到的几个字符
004354C2  |.  8D>lea ecx,dword ptr ss:[esp+10]
004354C6  |.  52 push edx                                       ; /取出用注册码得到的几个字符
004354C7  |.  55 push ebp                                       ; |用户名
004354C8  |.  E8>call PC_Eyes.0044CD00                          ; \关键阿
004354CD  |.  8D>lea ecx,dword ptr ss:[esp+10]
004354D1  |.  8B>mov esi,eax
004354D3  |.  C7>mov dword ptr ss:[esp+120],-1
004354DE  |.  E8>call PC_Eyes.0044CAC0
004354E3  |.  8B>mov eax,esi
004354E5  |.  5E pop esi
004354E6  |.  EB>jmp short PC_Eyes.004354EA
004354E8  |>  33>xor eax,eax
004354EA  |>  8B>mov ecx,dword ptr ss:[esp+114]
004354F1  |.  5F pop edi
004354F2  |.  5D pop ebp
004354F3  |.  5B pop ebx
004354F4  |.  64>mov dword ptr fs:[0],ecx
004354FB  |.  81>add esp,114
00435501  \.  C3 retn
……………………………………………………………………………………………………………………………………………………………………
先进入处理注册码的地方:004354B9  |.  E8>call PC_Eyes.0044CC70       
………………………………………………………………………………………………………………………………………………………………
0044CC70  /$  6A>push -1
0044CC72  |.  68>push PC_Eyes.004BEFF8                          ;  SE 句柄安装
0044CC77  |.  64>mov eax,dword ptr fs:[0]
0044CC7D  |.  50 push eax
0044CC7E  |.  64>mov dword ptr fs:[0],esp
0044CC85  |.  83>sub esp,1C
0044CC88  |.  56 push esi
0044CC89  |.  57 push edi
0044CC8A  |.  8D>lea ecx,dword ptr ss:[esp+8]
0044CC8E  |.  E8>call PC_Eyes.0044CE00                          ;  没用
0044CC93  |.  8B>mov eax,dword ptr ss:[esp+34]
0044CC97  |.  8D>lea ecx,dword ptr ss:[esp+8]
0044CC9B  |.  50 push eax
0044CC9C  |.  C7>mov dword ptr ss:[esp+30],0
0044CCA4  |.  E8>call PC_Eyes.0044D0D0                          ;  对注册码处理每三个注册码得到四个字符
0044CCA9  |.  8D>lea ecx,dword ptr ss:[esp+8]
0044CCAD  |.  E8>call PC_Eyes.00444600                          ;  这里得到前面计算出来的值
0044CCB2  |.  8B>mov edi,eax
0044CCB4  |.  83>or ecx,FFFFFFFF
0044CCB7  |.  33>xor eax,eax
……………………………………………………………………………………………………………………………………………………
0044D0EB  |.  51 push ecx
0044D0EC  |.  56 push esi
0044D0ED  |.  8B>mov ecx,edx
0044D0EF  |.  FF>call dword ptr ds:[ebx+8]                      ;  关键!!
0044D0F2  |.  5F pop edi
…………………………………………………………………………………………………………………………………………
进入0044D0EF  |.  FF>call dword ptr ds:[ebx+8]
……………………………………………………………………………………………………………………………………
0044D024   > /8B>mov ecx,dword ptr ss:[ebp+4]
0044D027   . |8B>mov edi,dword ptr ss:[ebp+8]
0044D02A   . |03>add ecx,ebx
0044D02C   . |89>mov dword ptr ss:[esp+10],esi
0044D030   . |C6>mov byte ptr ss:[esp+14],0
0044D035   . |66>mov dx,word ptr ds:[ecx]                       ;  得到注册码或用户名的两位ASCII码
0044D038     |66>mov word ptr ss:[esp+10],dx                    ;  储存
0044D03D   . |8B>mov edx,dword ptr ss:[ebp]
0044D040   . |8A>mov al,byte ptr ds:[ecx+2]
0044D043   . |8D>lea ecx,dword ptr ss:[esp+10]
0044D047   . |88>mov byte ptr ss:[esp+12],al                    ;  再储存第三位与前2位组合在一起
0044D04B   . |8B>mov eax,dword ptr ss:[ebp+18]
0044D04E   . |03>add eax,edi
0044D050   . |C6>mov byte ptr ss:[esp+14],3
0044D055   . |50 push eax
0044D056   . |51 push ecx                                       ;  每次压入3个字符
0044D057   . |8B>mov ecx,ebp
0044D059   . |FF>call dword ptr ds:[edx+34]                     ;  关键,用3个字符得到4个字符在密码表中取值
0044D05C   . |8B>mov ecx,dword ptr ss:[ebp+18]
0044D05F   . |8B>mov eax,dword ptr ss:[esp+20]
0044D063   . |83>add ebx,3
0044D066   . |83>add ecx,4
0044D069   . |89>mov dword ptr ss:[ebp+18],ecx
0044D06C   . |8D>lea edx,dword ptr ds:[ebx+3]
0044D06F   . |3B>cmp edx,eax
0044D071   .^\76>jbe short PC_Eyes.0044D024                     ;  每次取3位,看字符的位数有几个3
0044D073   .  8B>mov ecx,eax
0044D075   >  3B>cmp ecx,ebx
0044D077   .  76>jbe short PC_Eyes.0044D0B8
0044D079   .  8A>mov al,cl
0044D07B   .  2B>sub ecx,ebx
0044D07D   .  89>mov dword ptr ss:[esp+10],esi
0044D081   .  8B>mov esi,dword ptr ss:[ebp+4]
0044D084   .  8B>mov edx,ecx
0044D086   .  2A>sub al,bl
0044D088   .  03>add esi,ebx
0044D08A   .  8D>lea edi,dword ptr ss:[esp+10]
0044D08E   .  C1>shr ecx,2
0044D091   .  88>mov byte ptr ss:[esp+14],al
0044D095   .  8B>mov eax,dword ptr ss:[ebp]
0044D098   .  F3>rep movs dword ptr es:[edi],dword ptr ds:[esi]
0044D09A   .  8B>mov ecx,edx
0044D09C   .  8D>lea edx,dword ptr ss:[esp+10]
0044D0A0   .  83>and ecx,3
0044D0A3   .  F3>rep movs byte ptr es:[edi],byte ptr ds:[esi]
0044D0A5   .  8B>mov ecx,dword ptr ss:[ebp+8]                   ;  取出得到的字符
0044D0A8   .  8B>mov esi,dword ptr ss:[ebp+18]
0044D0AB   .  03>add ecx,esi
0044D0AD   .  51 push ecx
0044D0AE   .  52 push edx
0044D0AF   .  8B>mov ecx,ebp
0044D0B1   .  FF>call dword ptr ds:[eax+34]                     ;  再将3倍以内的在这里再次处理处理方法和上面一样
0044D0B4   .  83>add dword ptr ss:[ebp+18],4
0044D0B8   >  5F pop edi
0044D0B9   .  5E pop esi
0044D0BA   .  5D pop ebp
0044D0BB   .  5B pop ebx
……………………………………………………………………………………………………………………………………
这里对注册码的处理(也是对用户名的部分处理)分两部分
1、每次取3位注册码进行处理成4个内存单元,每一个单元在密码表中取值
2、最后将3位的余数一样处理
………………………………………………………………………………………………………………………………………………
第一部分处理:0044D059   .  FF>call dword ptr ds:[edx+34]                     ;  关键,用3个字符得到4个字符在密码表中取值
………………………………………………………………………………………………………………………………………………
0044D2B0   .  8B>mov eax,dword ptr ds:[ecx]
0044D2B2   .  83>sub esp,8
0044D2B5   .  8D>lea edx,dword ptr ss:[esp]
0044D2B9   .  55 push ebp
0044D2BA   .  8B>mov ebp,dword ptr ss:[esp+10]
0044D2BE   .  56 push esi
0044D2BF   .  57 push edi
0044D2C0   .  55 push ebp
0044D2C1   .  52 push edx
0044D2C2   .  FF>call dword ptr ds:[eax+3C]                     ;  重要进入!把三位字符的ASCII就是6位变成8位(4组)用于下面在密码表中取值用
0044D2C5   .  8B>mov edi,dword ptr ss:[esp+1C]
0044D2C9   .  8D>lea ecx,dword ptr ss:[esp+C]
0044D2CD   .  8B>mov eax,edi
0044D2CF   .  2B>sub ecx,edi
0044D2D1   .  BE>mov esi,4
0044D2D6   >  33>xor edx,edx
0044D2D8   .  8A>mov dl,byte ptr ds:[ecx+eax]                   ;  依次得到刚才计算好的4组中的每1组
0044D2DB   .  40 inc eax
0044D2DC   .  4E dec esi
0044D2DD   .  8A>mov dl,byte ptr ds:[edx+4ECA44]                ;  用每组的值在一个密码表中取值
0044D2E3   .  88>mov byte ptr ds:[eax-1],dl                     ;  储存上面能得到4个字符值
0044D2E6   .^ 75>jnz short PC_Eyes.0044D2D6
0044D2E8   .  33>xor eax,eax
0044D2EA   .  B1>mov cl,3D
0044D2EC   .  8A>mov al,byte ptr ss:[ebp+4]
0044D2EF   .  48 dec eax                                        ;  Switch (cases 1..2)
0044D2F0   .  74>je short PC_Eyes.0044D2FE
0044D2F2   .  48 dec eax
0044D2F3   .  74>je short PC_Eyes.0044D301
0044D2F5   .  5F pop edi                                        ;  将看到得到的4个字符; Default case of switch 0044D2EF
0044D2F6   .  5E pop esi
0044D2F7   .  5D pop ebp
0044D2F8   .  83>add esp,8
0044D2FB   .  C2>retn 8
0044D2FE   > \88>mov byte ptr ds:[edi+2],cl                     ;  字符串数目除以3的余数是1的话最后就有2个“=”; Case 1 of switch 0044D2EF
0044D301   >  88>mov byte ptr ds:[edi+3],cl                     ;  字符串数目除以3的余数是2的话最后就有1个“=”; Case 2 of switch 0044D2EF
0044D304   .  5F pop edi
0044D305   .  5E pop esi
0044D306   .  5D pop ebp
0044D307   .  83>add esp,8
0044D30A   .  C2>retn 8
………………………………………………………………………………………………………………………………
进入0044D2C2   .  FF>call dword ptr ds:[eax+3C]      3位注册码进行处理成4个内存单元
…………………………………………………………………………………………………………………………………………………………
0044D364   .  56 push esi
0044D365   .  8B>mov esi,dword ptr ss:[esp+8]
0044D369   .  8A>mov cl,byte ptr ds:[eax]                       ;  得到第一位字符的ASCII
0044D36B   .  C0>shr cl,2                                       ;  第一位ASCII右移2就是除以4
0044D36E   .  88>mov byte ptr ds:[esi],cl                       ;  结果储存作为第1组
0044D370   .  8A>mov cl,byte ptr ds:[eax]                       ;  再次得到第一位字符的ASCII
0044D372   .  C0>shl cl,4                                       ;  第一位字符左移4就是乘以16取最后两位
0044D375   .  88>mov byte ptr ds:[esi+1],cl
0044D378   .  8A>mov dl,byte ptr ds:[eax+1]                     ;  得到字符的第2位ASCII
0044D37B   .  C0>shr dl,4                                       ;  第2个字符的ASCII右移4就是除以16
0044D37E   .  80>and cl,3F                                      ;  第一位字符左移4结果与3F进行与运算
0044D381   .  0A>or dl,cl                                       ;  第一位字符左移4结果与3F进行与运算的结果与第2个字符的ASCII右移4进行OR运算
0044D383   .  88>mov byte ptr ds:[esi+1],dl                     ;  结果储存作为第2组
0044D386   .  8A>mov cl,byte ptr ds:[eax+1]                     ;  再次取出第二位字符
0044D389   .  C0>shl cl,2                                       ;  将第二位字符左移2就是乘以4
0044D38C   .  88>mov byte ptr ds:[esi+2],cl
0044D38F   .  8A>mov dl,byte ptr ds:[eax+2]                     ;  取第3位字符的ASCII
0044D392   .  C0>shr dl,6                                       ;  第3位字符的ASCII右移6
0044D395   .  80>and cl,3F                                      ;  第二字符左移2的结果与3F AND运算
0044D398   .  0A>or dl,cl                                       ;  第二字符左移2的结果与3F AND运算的结果与第3位字符的ASCII右移6进行OR运算
0044D39A   .  88>mov byte ptr ds:[esi+2],dl                     ;  结果储存作为第3组
0044D39D   .  8A>mov al,byte ptr ds:[eax+2]                     ;  取第3组字符的ASCII
0044D3A0   .  24>and al,3F                                      ;  第3组字符的ASCII与3F进行AND运算
0044D3A2   .  88>mov byte ptr ds:[esi+3],al                     ;  结果储存作为第4组
0044D3A5   .  5E pop esi
0044D3A6   .  C2>retn 8
……………………………………………………………………………………………………………………………………………………
第一位ASCII右移2就是除以4就是第1个内存单元
第一位字符左移4结果与3F进行与运算的结果与第2个字符的ASCII右移4进行OR运算就是第2个内存单元
第二字符左移2的结果与3F AND运算的结果与第3位字符的ASCII右移6进行OR运算就是第3个内存单元
第三字符的ASCII与3F进行AND运算就是第4个内存单元
得到了4个内存单元之后就可以在密码表中取4个字符了,
最后一段:是0044D0B1   .  FF>call dword ptr ds:[eax+34]    ;  再将3倍以内的在这里再次处理处理方法和上面一样才有的:
0044D2FE   > \88>mov byte ptr ds:[edi+2],cl                     ;  字符串数目除以3的余数是1的话最后就有2个“=”; Case 1 of switch 0044D2EF
0044D301   >  88>mov byte ptr ds:[edi+3],cl                     ;  字符串数目除以3的余数是2的话最后就有1个“=”; Case 2 of switch 0044D2EF
0044D304   .  5F pop edi
0044D305   .  5E pop esi
0044D306   .  5D pop ebp
0044D307   .  83>add esp,8
0044D30A   .  C2>retn 8
注册码的位数可能不是正好是3的倍数,如果余数是1的话最后字符串就有2个“=”;余数是2的话最后字符串就有1个“=”
……………………………………………………………………………………………………………………………………………………
密码表是:
004ECA44  41 42 43 44 45 46 47 48  ABCDEFGH
004ECA4C  49 4A 4B 4C 4D 4E 4F 50  IJKLMNOP
004ECA54  51 52 53 54 55 56 57 58  QRSTUVWX
004ECA5C  59 5A 61 62 63 64 65 66  YZabcdef
004ECA64  67 68 69 6A 6B 6C 6D 6E  ghijklmn
004ECA6C  6F 70 71 72 73 74 75 76  opqrstuv
004ECA74  77 78 79 7A 30 31 32 33  wxyz0123
004ECA7C  34 35 36 37 38 39 2B 2F  456789+/
…………………………………………………………………………………………………………………………………………………………
进入:004354C6  |.  52 push edx                                       ; /取出用注册码得到的几个字符
004354C7  |.  55 push ebp                                       ; |用户名
004354C8  |.  E8>call PC_Eyes.0044CD00                          ; \关键阿
其实是3次处理用户名:1次也是和处理注册码一样得到一个字符串  
                     2次是将得到的这个字符串用MD5转换在打乱组合成新的5组字符串(其实它就是真正的注册码)
                     3次再次将这5组字符串与第一次一样在密码表中取值,得到的值与输入码在密码表中的值比较(多余)
…………………………………………………………………………………………………………………………………………………………
0044CD2E  |.  B9>mov ecx,20                                     ; |
0044CD33  |.  8D>lea edi,dword ptr ss:[esp+48]                  ; |
0044CD37  |.  F3>rep stos dword ptr es:[edi]                    ; |
0044CD39  |.  8B>mov ecx,dword ptr ss:[esp+D8]                  ; |
0044CD40  |.  8D>lea eax,dword ptr ss:[esp+28]                  ; |
0044CD44  |.  50 push eax                                       ; |Arg2
0044CD45  |.  51 push ecx                                       ; |Arg1
0044CD46  |.  8B>mov ecx,esi                                    ; |
0044CD48  |.  E8>call PC_Eyes.0044CAD0                          ; \关键
0044CD4D  |.  85>test eax,eax
0044CD4F  |.  0F>je PC_Eyes.0044CDDF
0044CD55  |.  53 push ebx
0044CD56  |.  8D>lea ecx,dword ptr ss:[esp+C]
0044CD5A  |.  E8>call PC_Eyes.0044CE00
0044CD5F  |.  8D>lea edx,dword ptr ss:[esp+48]
0044CD63  |.  68>push 80                                        ; /Arg3 = 00000080
0044CD68  |.  8D>lea eax,dword ptr ss:[esp+2C]                  ; |得到用用户名计算出来的5组
0044CD6C  |.  52 push edx                                       ; |Arg2
0044CD6D  |.  50 push eax                                       ; |Arg1
0044CD6E  |.  8B>mov ecx,esi                                    ; |
0044CD70  |.  C7>mov dword ptr ss:[esp+DC],0                    ; |
0044CD7B  |.  E8>call PC_Eyes.0044CC70                          ; \再次将用户名计算出来的5组数据在表中取值得到40个数据
0044CD80  |.  8B>mov esi,dword ptr ss:[esp+DC]
0044CD87  |.  8D>lea eax,dword ptr ss:[esp+48]
0044CD8B  |>  8A>/mov dl,byte ptr ds:[eax]                      ;  得到用户名2次计算出来的
0044CD8D  |.  8A>|mov bl,byte ptr ds:[esi]                      ;  用注册码一次取值计算出来的
0044CD8F  |.  8A>|mov cl,dl
0044CD91  |.  3A>|cmp dl,bl                                     ;  比较了阿!!!!
0044CD93  |.  75>|jnz short PC_Eyes.0044CDB3
0044CD95  |.  84>|test cl,cl
0044CD97  |.  74>|je short PC_Eyes.0044CDAF
0044CD99  |.  8A>|mov dl,byte ptr ds:[eax+1]
0044CD9C  |.  8A>|mov bl,byte ptr ds:[esi+1]
0044CD9F  |.  8A>|mov cl,dl
0044CDA1  |.  3A>|cmp dl,bl
0044CDA3  |.  75>|jnz short PC_Eyes.0044CDB3
0044CDA5  |.  83>|add eax,2
0044CDA8  |.  83>|add esi,2
0044CDAB  |.  84>|test cl,cl
0044CDAD  |.^ 75>\jnz short PC_Eyes.0044CD8B
0044CDAF  |>  33>xor eax,eax
0044CDB1  |.  EB>jmp short PC_Eyes.0044CDB8
0044CDB3  |>  1B>sbb eax,eax
0044CDB5  |.  83>sbb eax,-1
0044CDB8  |>  85>test eax,eax
0044CDBA  |.  5B pop ebx
0044CDBB  |.  C7>mov dword ptr ss:[esp+CC],-1
0044CDC6  |.  8D>lea ecx,dword ptr ss:[esp+8]
0044CDCA  |.  74>je short PC_Eyes.0044CDD5                      ;  必须跳
0044CDCC  |.  E8>call PC_Eyes.0044CE40
0044CDD1  |.  33>xor eax,eax
0044CDD3  |.  EB>jmp short PC_Eyes.0044CDDF
0044CDD5  |>  E8>call PC_Eyes.0044CE40
0044CDDA  |.  B8>mov eax,1
………………………………………………………………………………………………………………………………………………
进入:0044CD48  |.  E8>call PC_Eyes.0044CAD0                          ; \关键
………………………………………………………………………………………………………………………………………………
0044CB85  |.  8B>mov edx,dword ptr ss:[esp+8]
0044CB89  |.  8D>lea ecx,dword ptr ss:[esp+14]
0044CB8D  |.  52 push edx
0044CB8E  |.  C6>mov byte ptr ss:[esp+3C],3
0044CB93  |.  E8>call PC_Eyes.0044D0D0                          ;  根据用户名先3个字符变成4个内存单元再在密码表中产生一个字符串(和注册码一样)
0044CB98  |.  8D>lea ecx,dword ptr ss:[esp+14]
0044CB9C  |.  E8>call PC_Eyes.00444600                          ;  得到这个字符串
0044CBA1  |.  50 push eax
0044CBA2  |.  8D>lea ecx,dword ptr ss:[esp+14]
0044CBA6  |.  E8>call PC_Eyes.00499098
0044CBAB  |.  8B>mov eax,dword ptr ss:[esp+10]
0044CBAF  |.  8B>mov ecx,dword ptr ds:[eax-8]
0044CBB2  |.  51 push ecx
0044CBB3  |.  50 push eax
0044CBB4  |.  8D>lea eax,dword ptr ss:[esp+48]
0044CBB8  |.  50 push eax
0044CBB9  |.  E8>call PC_Eyes.0044D450                          ;  将用户名计算出来的值,MD5组合称5组
0044CBBE  |.  83>add esp,0C
0044CBC1  |.  50 push eax
0044CBC2  |.  8D>lea ecx,dword ptr ss:[esp+10]
0044CBC6  |.  C6>mov byte ptr ss:[esp+3C],4
0044CBCB  |.  E8>call PC_Eyes.00499048
………………………………………………………………………………………………………………………………………………
0044CB93  |.  E8>call PC_Eyes.0044D0D0      根据用户名先3个字符变成4个内存单元再在密码表中产生一个字符串(和注册码一样)
和上面一样,就重复了

进入:0044CBB9  |.  E8>call PC_Eyes.0044D450                          ;  将用户名计算出来的值,MD5组合称5组
………………………………………………………………………………………………………………………………………………
0044D474  |.  56 push esi                                       ; |Arg2
0044D475  |.  57 push edi                                       ; |Arg1
0044D476  |.  C7>mov dword ptr ss:[esp+14],0                    ; |
0044D47E  |.  E8>call PC_Eyes.00492751                          ; \PC_Eyes.00492751
0044D483  |.  8D>lea ecx,dword ptr ss:[esp+C]
0044D487  |.  E8>call PC_Eyes.0044DF30                          ;  装载MD5算法常数的地方
0044D48C  |.  56 push esi
0044D48D  |.  57 push edi
0044D48E  |.  8D>lea ecx,dword ptr ss:[esp+14]
0044D492  |.  C7>mov dword ptr ss:[esp+78],0
0044D49A  |.  E8>call PC_Eyes.0044E2F0
0044D49F  |.  8B>mov esi,dword ptr ss:[esp+78]
0044D4A3  |.  8D>lea ecx,dword ptr ss:[esp+C]
0044D4A7  |.  56 push esi                                       ; /Arg1
0044D4A8  |.  E8>call PC_Eyes.0044DFC0                          ; \将用户名计算出来的值MD5,并组合称5组
0044D4AD  |.  8B>mov ecx,dword ptr ss:[esp+68]
0044D4B1  |.  8B>mov eax,esi
……………………………………………………………………………………………………
进入0044D487  |.  E8>call PC_Eyes.0044DF30                          ;  装载MD5算法常数的地方
………………………………………………………………………………………………………………
0044DF32  |.  57 push edi
0044DF33  |.  B9>mov ecx,10
0044DF38  |.  33>xor eax,eax
0044DF3A  |.  8D>lea edi,dword ptr ds:[edx+4]
0044DF3D  |.  C7>mov dword ptr ds:[edx],PC_Eyes.004CA8F0
0044DF43  |.  F3>rep stos dword ptr es:[edi]
0044DF45  |.  89>mov dword ptr ds:[edx+48],eax
0044DF48  |.  89>mov dword ptr ds:[edx+44],eax
0044DF4B  |.  C7>mov dword ptr ds:[edx+4C],67452301
0044DF52  |.  C7>mov dword ptr ds:[edx+50],EFCDAB89
0044DF59  |.  C7>mov dword ptr ds:[edx+54],98BADCFE
0044DF60  |.  C7>mov dword ptr ds:[edx+58],10325476
0044DF67  |.  8B>mov eax,edx
很明显:MD5
…………………………………………………………………………………………………………………………………………
继续进入0044D4A8  |.  E8>call PC_Eyes.0044DFC0                          ; \将用户名计算出来的值MD5,并组合称5组
………………………………………………………………………………………………………………………………………………
0044DFCD  |.  50 push eax
0044DFCE  |.  64>mov dword ptr fs:[0],esp
0044DFD5  |.  83>sub esp,30
0044DFD8  |.  53 push ebx
0044DFD9  |.  56 push esi
0044DFDA  |.  8B>mov esi,ecx
0044DFDC  |.  57 push edi
0044DFDD  |.  6A>push 8
0044DFDF  |.  8D>lea eax,dword ptr ss:[esp+28]
0044DFE3  |.  8D>lea edi,dword ptr ds:[esi+44]
0044DFE6  |.  C7>mov dword ptr ss:[esp+24],0
0044DFEE  |.  57 push edi
0044DFEF  |.  50 push eax
0044DFF0  |.  E8>call PC_Eyes.0044DF70
0044DFF5  |.  8B>mov eax,dword ptr ds:[edi]
0044DFF7  |.  B9>mov ecx,38
0044DFFC  |.  C1>shr eax,3
0044DFFF  |.  83>and eax,3F
0044E002  |.  83>cmp eax,38
0044E005  |.  72>jb short PC_Eyes.0044E00C
0044E007  |.  B9>mov ecx,78
0044E00C  |>  2B>sub ecx,eax
0044E00E  |.  51 push ecx
0044E00F  |.  68>push PC_Eyes.004ECA88
0044E014  |.  8B>mov ecx,esi
0044E016  |.  E8>call PC_Eyes.0044E2F0
0044E01B  |.  8D>lea ecx,dword ptr ss:[esp+24]
0044E01F  |.  6A>push 8
0044E021  |.  51 push ecx
0044E022  |.  8B>mov ecx,esi
0044E024  |.  E8>call PC_Eyes.0044E2F0
0044E029  |.  8D>lea edx,dword ptr ds:[esi+4C]
0044E02C  |.  6A>push 10
0044E02E  |.  8D>lea eax,dword ptr ss:[esp+30]
0044E032  |.  52 push edx
0044E033  |.  50 push eax
0044E034  |.  8B>mov ecx,esi
0044E036  |.  E8>call PC_Eyes.0044DF70
0044E03B  |.  8B>mov ecx,dword ptr ds:[4ED94C]                  ;  PC_Eyes.004ED960
0044E041  |.  89>mov dword ptr ss:[esp+14],ecx
0044E045  |.  BF>mov edi,1
0044E04A  |.  33>xor esi,esi
0044E04C  |.  89>mov dword ptr ss:[esp+44],edi
0044E050  |.  B3>mov bl,2
0044E052  |>  8B>/mov edx,dword ptr ds:[4ED94C]                 ;  PC_Eyes.004ED960
0044E058  |.  89>|mov dword ptr ss:[esp+18],edx
0044E05C  |.  8A>|mov al,byte ptr ss:[esp+esi+2C]
0044E060  |.  88>|mov byte ptr ss:[esp+44],bl
0044E064  |.  84>|test al,al
0044E066  |.  75>|jnz short PC_Eyes.0044E094
0044E068  |.  68>|push PC_Eyes.004ECB34                         ;  ASCII "00"
0044E06D  |.  8D>|lea ecx,dword ptr ss:[esp+20]
0044E071  |.  E8>|call PC_Eyes.00498F7D
0044E076  |.  50 |push eax
0044E077  |.  8D>|lea ecx,dword ptr ss:[esp+1C]
0044E07B  |.  C6>|mov byte ptr ss:[esp+48],3
0044E080  |.  E8>|call PC_Eyes.00499048
0044E085  |.  8D>|lea ecx,dword ptr ss:[esp+1C]
0044E089  |.  88>|mov byte ptr ss:[esp+44],bl
0044E08D  |.  E8>|call PC_Eyes.00498F0F
0044E092  |.  EB>|jmp short PC_Eyes.0044E0C2
0044E094  |>  3C>|cmp al,10
0044E096  |.  73>|jnb short PC_Eyes.0044E0AA
0044E098  |.  25>|and eax,0FF
0044E09D  |.  50 |push eax
0044E09E  |.  8D>|lea eax,dword ptr ss:[esp+1C]
0044E0A2  |.  68>|push PC_Eyes.004ECB30                         ;  ASCII "0%x"
0044E0A7  |.  50 |push eax
0044E0A8  |.  EB>|jmp short PC_Eyes.0044E0BA
0044E0AA  |>  25>|and eax,0FF
0044E0AF  |.  8D>|lea ecx,dword ptr ss:[esp+18]
0044E0B3  |.  50 |push eax
0044E0B4  |.  68>|push PC_Eyes.004EBE60                         ;  ASCII "%x"
0044E0B9  |.  51 |push ecx
0044E0BA  |>  E8>|call PC_Eyes.00491CD8                         ;  产生地方
0044E0BF  |.  83>|add esp,0C
0044E0C2  |>  8D>|lea edx,dword ptr ss:[esp+18]
0044E0C6  |.  8D>|lea ecx,dword ptr ss:[esp+14]
0044E0CA  |.  52 |push edx
0044E0CB  |.  E8>|call PC_Eyes.00499327                         ;  合并
0044E0D0  |.  8D>|lea ecx,dword ptr ss:[esp+18]
0044E0D4  |.  C6>|mov byte ptr ss:[esp+44],1
0044E0D9  |.  E8>|call PC_Eyes.00498F0F
0044E0DE  |.  46 |inc esi
0044E0DF  |.  83>|cmp esi,10
0044E0E2  |.^ 0F>\jl PC_Eyes.0044E052                           ;  上面就是将用户名产生的字符串用MD5处理的循环
0044E0E8  |.  A1>mov eax,dword ptr ds:[4ED94C]                  ;  下面对32位MD5的值进行重新组合成5组用“-”连接
0044E0ED  |.  89>mov dword ptr ss:[esp+10],eax
0044E0F1  |.  89>mov dword ptr ss:[esp+C],eax
0044E0F5  |.  BB>mov ebx,5                                      ;  就是每次取5个字符
0044E0FA  |.  8D>lea eax,dword ptr ss:[esp+1C]
0044E0FE  |.  53 push ebx
0044E0FF  |.  6A>push 3                                         ;  从第4位开始取
0044E101  |.  50 push eax
0044E102  |.  8D>lea ecx,dword ptr ss:[esp+20]
0044E106  |.  88>mov byte ptr ss:[esp+50],bl
0044E10A  |.  E8>call PC_Eyes.004917EB                          ;  第1组:从第4位开始连续取5个字符作为一组
0044E10F  |.  50 push eax
0044E110  |.  8D>lea ecx,dword ptr ss:[esp+10]
0044E114  |.  C6>mov byte ptr ss:[esp+48],6
0044E119  |.  E8>call PC_Eyes.00499048
0044E11E  |.  8D>lea ecx,dword ptr ss:[esp+1C]
0044E122  |.  88>mov byte ptr ss:[esp+44],bl
0044E126  |.  E8>call PC_Eyes.00498F0F
0044E12B  |.  8D>lea ecx,dword ptr ss:[esp+C]
0044E12F  |.  6A>push 2D                                        ;  固定字符“-”
0044E131  |.  8D>lea edx,dword ptr ss:[esp+20]
0044E135  |.  51 push ecx
0044E136  |.  52 push edx
0044E137  |.  E8>call PC_Eyes.00491472                          ;  在后面组合一个“-”
0044E13C  |.  50 push eax
0044E13D  |.  8D>lea ecx,dword ptr ss:[esp+14]
0044E141  |.  C6>mov byte ptr ss:[esp+48],7
0044E146  |.  E8>call PC_Eyes.00499048
0044E14B  |.  8D>lea ecx,dword ptr ss:[esp+1C]
0044E14F  |.  88>mov byte ptr ss:[esp+44],bl
0044E153  |.  E8>call PC_Eyes.00498F0F
0044E158  |.  8D>lea ecx,dword ptr ss:[esp+C]
0044E15C  |.  E8>call PC_Eyes.00498E9A
0044E161  |.  53 push ebx
0044E162  |.  8D>lea eax,dword ptr ss:[esp+20]
0044E166  |.  6A>push 0B                                        ;  从12个字符开始
0044E168  |.  50 push eax
0044E169  |.  8D>lea ecx,dword ptr ss:[esp+20]
0044E16D  |.  E8>call PC_Eyes.004917EB                          ;  第2组:从第12位开始连续取5个字符作为一组
0044E172  |.  50 push eax
0044E173  |.  8D>lea ecx,dword ptr ss:[esp+10]
0044E177  |.  C6>mov byte ptr ss:[esp+48],8
0044E17C  |.  E8>call PC_Eyes.00499048
0044E181  |.  8D>lea ecx,dword ptr ss:[esp+1C]
0044E185  |.  88>mov byte ptr ss:[esp+44],bl
0044E189  |.  E8>call PC_Eyes.00498F0F
0044E18E  |.  8D>lea ecx,dword ptr ss:[esp+C]
0044E192  |.  51 push ecx
0044E193  |.  8D>lea ecx,dword ptr ss:[esp+14]
0044E197  |.  E8>call PC_Eyes.00499327                          ;  组合在一起了
0044E19C  |.  6A>push 2D
0044E19E  |.  8D>lea ecx,dword ptr ss:[esp+14]
0044E1A2  |.  E8>call PC_Eyes.00499312                          ;  后面接一个“-”
0044E1A7  |.  8D>lea ecx,dword ptr ss:[esp+C]
0044E1AB  |.  E8>call PC_Eyes.00498E9A
0044E1B0  |.  53 push ebx
0044E1B1  |.  8D>lea edx,dword ptr ss:[esp+20]
0044E1B5  |.  6A>push 15                                        ;  从22个字符开始
0044E1B7  |.  52 push edx
0044E1B8  |.  8D>lea ecx,dword ptr ss:[esp+20]
0044E1BC  |.  E8>call PC_Eyes.004917EB                          ;  第3组:从第22位开始连续取5个字符作为一组
0044E1C1  |.  50 push eax
0044E1C2  |.  8D>lea ecx,dword ptr ss:[esp+10]
0044E1C6  |.  C6>mov byte ptr ss:[esp+48],9
0044E1CB  |.  E8>call PC_Eyes.00499048
0044E1D0  |.  8D>lea ecx,dword ptr ss:[esp+1C]
0044E1D4  |.  88>mov byte ptr ss:[esp+44],bl
0044E1D8  |.  E8>call PC_Eyes.00498F0F
0044E1DD  |.  8D>lea eax,dword ptr ss:[esp+C]
0044E1E1  |.  8D>lea ecx,dword ptr ss:[esp+10]
0044E1E5  |.  50 push eax
0044E1E6  |.  E8>call PC_Eyes.00499327                          ;  组合在一起
0044E1EB  |.  6A>push 2D
0044E1ED  |.  8D>lea ecx,dword ptr ss:[esp+14]
0044E1F1  |.  E8>call PC_Eyes.00499312                          ;  后面接一个“-”
0044E1F6  |.  8D>lea ecx,dword ptr ss:[esp+14]
0044E1FA  |.  E8>call PC_Eyes.00499467
0044E1FF  |.  8D>lea ecx,dword ptr ss:[esp+C]
0044E203  |.  E8>call PC_Eyes.00498E9A                          ;  将32位MD5值反过来
0044E208  |.  53 push ebx
0044E209  |.  8D>lea ecx,dword ptr ss:[esp+20]
0044E20D  |.  6A>push 0D                                        ;  第14位开始
0044E20F  |.  51 push ecx
0044E210  |.  8D>lea ecx,dword ptr ss:[esp+20]
0044E214  |.  E8>call PC_Eyes.004917EB                          ;  第4组:从反过来的MD5值中从第14位开始连续取5个字符作为一组
0044E219  |.  50 push eax
0044E21A  |.  8D>lea ecx,dword ptr ss:[esp+10]
0044E21E  |.  C6>mov byte ptr ss:[esp+48],0A
0044E223  |.  E8>call PC_Eyes.00499048
0044E228  |.  8D>lea ecx,dword ptr ss:[esp+1C]
0044E22C  |.  88>mov byte ptr ss:[esp+44],bl
0044E230  |.  E8>call PC_Eyes.00498F0F
0044E235  |.  8D>lea edx,dword ptr ss:[esp+C]
0044E239  |.  8D>lea ecx,dword ptr ss:[esp+10]
0044E23D  |.  52 push edx
0044E23E  |.  E8>call PC_Eyes.00499327                          ;  组合在一起
0044E243  |.  6A>push 2D
0044E245  |.  8D>lea ecx,dword ptr ss:[esp+14]
0044E249  |.  E8>call PC_Eyes.00499312                          ;  后面连接一个“-”
0044E24E  |.  8D>lea ecx,dword ptr ss:[esp+C]
0044E252  |.  E8>call PC_Eyes.00498E9A
0044E257  |.  53 push ebx
0044E258  |.  8D>lea eax,dword ptr ss:[esp+20]
0044E25C  |.  57 push edi                                       ;  从第2位开始
0044E25D  |.  50 push eax
0044E25E  |.  8D>lea ecx,dword ptr ss:[esp+20]
0044E262  |.  E8>call PC_Eyes.004917EB                          ;  第5组:从反过来的MD5值中从第2位开始连续取5个字符作为一组
0044E267  |.  50 push eax
0044E268  |.  8D>lea ecx,dword ptr ss:[esp+10]
0044E26C  |.  C6>mov byte ptr ss:[esp+48],0B
0044E271  |.  E8>call PC_Eyes.00499048
0044E276  |.  8D>lea ecx,dword ptr ss:[esp+1C]
0044E27A  |.  88>mov byte ptr ss:[esp+44],bl
0044E27E  |.  E8>call PC_Eyes.00498F0F
0044E283  |.  8D>lea ecx,dword ptr ss:[esp+C]
0044E287  |.  51 push ecx
0044E288  |.  8D>lea ecx,dword ptr ss:[esp+14]
0044E28C  |.  E8>call PC_Eyes.00499327                          ;  组合在一起了   组合完毕
0044E291  |.  8D>lea ecx,dword ptr ss:[esp+10]
0044E295  |.  E8>call PC_Eyes.00499443                          ;  将组合好的5组字符串中的字符全部改写成大写(这个就是真正的注册码
0044E29A  |.  8B>mov esi,dword ptr ss:[esp+4C]
0044E29E  |.  8D>lea edx,dword ptr ss:[esp+10]
0044E2A2  |.  52 push edx
0044E2A3  |.  8B>mov ecx,esi
0044E2A5  |.  E8>call PC_Eyes.00498C84
0044E2AA  |.  89>mov dword ptr ss:[esp+20],edi
0044E2AE  |.  8D>lea ecx,dword ptr ss:[esp+C]
0044E2B2  |.  C6>mov byte ptr ss:[esp+44],4
0044E2B7  |.  E8>call PC_Eyes.00498F0F
0044E2BC  |.  8D>lea ecx,dword ptr ss:[esp+10]
0044E2C0  |.  C6>mov byte ptr ss:[esp+44],1
0044E2C5  |.  E8>call PC_Eyes.00498F0F
0044E2CA  |.  8D>lea ecx,dword ptr ss:[esp+14]
0044E2CE  |.  C6>mov byte ptr ss:[esp+44],0
0044E2D3  |.  E8>call PC_Eyes.00498F0F
0044E2D8  |.  8B>mov ecx,dword ptr ss:[esp+3C]
0044E2DC  |.  8B>mov eax,esi
…………………………………………………………………………………………………………………………
就可以到了这里:
………………………………………………………………………………………………………………………………
0044CD63  |.  68>push 80                                        ; /Arg3 = 00000080
0044CD68  |.  8D>lea eax,dword ptr ss:[esp+2C]                  ; |得到用用户名计算出来的5组
0044CD6C  |.  52 push edx                                       ; |Arg2
0044CD6D  |.  50 push eax                                       ; |Arg1
0044CD6E  |.  8B>mov ecx,esi                                    ; |
0044CD70  |.  C7>mov dword ptr ss:[esp+DC],0                    ; |
0044CD7B  |.  E8>call PC_Eyes.0044CC70                          ; \再次将用户名计算出来的5组数据在表中取值得到40个数据
0044CD80  |.  8B>mov esi,dword ptr ss:[esp+DC]
0044CD87  |.  8D>lea eax,dword ptr ss:[esp+48]
0044CD8B  |>  8A>/mov dl,byte ptr ds:[eax]                      ;  得到用户名处理后的5组注册码
0044CD8D  |.  8A>|mov bl,byte ptr ds:[esi]                      ;  用注册码取值计算出来的
0044CD8F  |.  8A>|mov cl,dl
0044CD91  |.  3A>|cmp dl,bl                                     ;  最后比较了!!!!
0044CD93  |.  75>|jnz short PC_Eyes.0044CDB3
0044CD95  |.  84>|test cl,cl
0044CD97  |. /74>|je short PC_Eyes.0044CDAF
0044CD99  |. |8A>|mov dl,byte ptr ds:[eax+1]
0044CD9C  |. |8A>|mov bl,byte ptr ds:[esi+1]
0044CD9F  |. |8A>|mov cl,dl
0044CDA1  |. |3A>|cmp dl,bl
0044CDA3  |. |75>|jnz short PC_Eyes.0044CDB3
0044CDA5  |. |83>|add eax,2
0044CDA8  |. |83>|add esi,2
0044CDAB  |. |84>|test cl,cl
0044CDAD  |.^|75>\jnz short PC_Eyes.0044CD8B
0044CDAF  |> \33>xor eax,eax
0044CDB1  |.  EB>jmp short PC_Eyes.0044CDB8
0044CDB3  |>  1B>sbb eax,eax
0044CDB5  |.  83>sbb eax,-1
0044CDB8  |>  85>test eax,eax
0044CDBA  |.  5B pop ebx
0044CDBB  |.  C7>mov dword ptr ss:[esp+CC],-1
0044CDC6  |.  8D>lea ecx,dword ptr ss:[esp+8]
0044CDCA  |.  74>je short PC_Eyes.0044CDD5                      ;  必须跳
0044CDCC  |.  E8>call PC_Eyes.0044CE40
0044CDD1  |.  33>xor eax,eax
0044CDD3  |.  EB>jmp short PC_Eyes.0044CDDF
0044CDD5  |>  E8>call PC_Eyes.0044CE40
0044CDDA  |.  B8>mov eax,1                                      ;  真正的标志位
0044CDDF  |>  8B>mov ecx,dword ptr ss:[esp+C4]
0044CDE6  |.  5F pop edi
0044CDE7  |.  5E pop esi
0044CDE8  |.  64>mov dword ptr fs:[0],ecx
0044CDEF  |.  81>add esp,0C8
0044CDF5  \.  C2>retn 8
………………………………………………………………………………………………………………………………
总结:
首先检查用户名是否是crsky,如果是它,完了,关机。
第一先处理注册码分两步
1、先每次取三位注册码将它们转化为4个内存单元
2、每个内存单元在密码表取值得到4个字符
如果注册码不是3的倍数,如果余数是1最后的2个字符将变成“=”如果余数是2最后的1个字符将变成“=”
第二对用户名处理:分3次
第1步:初步处理用户名和上面处理注册码过程一样
第2步:将上面处理过的用户名用MD5算法处理,得到的32结果再分成5组中间用“-”连接:
         第1组:从第4位开始连续取5个字符作为一组
         第2组:从第12位开始连续取5个字符作为一组
         第3组:从第22位开始连续取5个字符作为一组
         第4组:从反过来的MD5值中从第14位开始连续取5个字符作为一组
         第5组:从反过来的MD5值中从第2位开始连续取5个字符作为一组
第3步:再将得到5组数据再和处理注册码一样得到40位数据
最后40位数据和对注册码处理出来的数据比较

这里面处理注册码与用户名部分算法一样(密码表)这样就觉得“形同虚设”没多少意义。
算法简单,自己搞定!