简单分析:易我数据恢复向导V2.0
【破解作者】 jsliyangsj
【作者邮箱】 sjcrack@yahoo.com.cn
【使用工具】 peid OllyDbg1.10
【破解平台】 Winxp
【软件名称】 易我数据恢复向导V2.0
【软件地址】 http://www.easeus.com.cn/
【编写语言】 C6

暂停法一次来到这里:
00440D06  /.  55     push ebp
00440D07  |.  8BEC   mov ebp,esp
00440D09  |.  6A FF  push -1
00440D0B  |.  68 D7F>push DRW.0047F7D7                       ;  SE 句柄安装
00440D10  |.  64:A1 >mov eax,dword ptr fs:[0]
00440D16  |.  50     push eax
00440D17  |.  64:892>mov dword ptr fs:[0],esp
00440D1E  |.  83EC 2>sub esp,20
00440D21  |.  894D E>mov dword ptr ss:[ebp-20],ecx
00440D24  |.  6A 01  push 1
00440D26  |.  8B4D E>mov ecx,dword ptr ss:[ebp-20]
00440D29  |.  E8 929>call <jmp.&MFC42.#6334>
00440D2E  |.  8D4D E>lea ecx,dword ptr ss:[ebp-14]
00440D31  |.  E8 6C9>call <jmp.&MFC42.#540>
00440D36  |.  C745 F>mov dword ptr ss:[ebp-4],0
00440D3D  |.  8D4D F>lea ecx,dword ptr ss:[ebp-10]
00440D40  |.  E8 5D9>call <jmp.&MFC42.#540>
00440D45  |.  C645 F>mov byte ptr ss:[ebp-4],1
00440D49  |.  8B45 E>mov eax,dword ptr ss:[ebp-20]
00440D4C  |.  05 540>add eax,354
00440D51  |.  50     push eax                                ; /这里是用户名的地址
00440D52  |.  8B4D E>mov ecx,dword ptr ss:[ebp-20]           ; |
00440D55  |.  81C1 5>add ecx,350                             ; |
00440D5B  |.  51     push ecx                                ; |这里放有注册码
00440D5C  |.  E8 0F4>call DRW.00475470                       ; \关键   进入
00440D61  |.  85C0   test eax,eax
00440D63  |.  75 56  jnz short DRW.00440DBB                  ;  关键跳转
00440D65  |.  68 F3E>push 0EFF3
00440D6A  |.  8D4D F>lea ecx,dword ptr ss:[ebp-10]
00440D6D  |.  E8 969>call <jmp.&MFC42.#4160>
00440D72  |.  68 37E>push 0EF37
00440D77  |.  8D4D E>lea ecx,dword ptr ss:[ebp-14]
00440D7A  |.  E8 899>call <jmp.&MFC42.#4160>
00440D7F  |.  6A 10  push 10
00440D81  |.  8D4D E>lea ecx,dword ptr ss:[ebp-14]
00440D84  |.  E8 074>call DRW.00465290
00440D89  |.  50     push eax
00440D8A  |.  8D4D F>lea ecx,dword ptr ss:[ebp-10]
00440D8D  |.  E8 FE4>call DRW.00465290
00440D92  |.  50     push eax
00440D93  |.  8B4D E>mov ecx,dword ptr ss:[ebp-20]
00440D96  |.  E8 BB9>call <jmp.&MFC42.#4224>                 ;  错误窗口
00440D9B  |.  C645 F>mov byte ptr ss:[ebp-4],0
00440D9F  |.  8D4D F>lea ecx,dword ptr ss:[ebp-10]
00440DA2  |.  E8 E39>call <jmp.&MFC42.#800>
00440DA7  |.  C745 F>mov dword ptr ss:[ebp-4],-1
…………………………………………………………………………………………………………………………………………
00440D5C  |.  E8 0F4>call DRW.00475470                       ; \关键   进入
………………………………………………………………………………………………………………
00474BE1  /$  55     push ebp
00474BE2  |.  8BEC   mov ebp,esp
00474BE4  |.  81EC A>sub esp,0AAC
00474BEA  |.  C785 7>mov dword ptr ss:[ebp-488],950B4B61
00474BF4  |.  66:C78>mov word ptr ss:[ebp-484],0FA41
00474BFD  |.  66:C78>mov word ptr ss:[ebp-482],4DC2
00474C06  |.  C685 8>mov byte ptr ss:[ebp-480],0AD
00474C0D  |.  C685 8>mov byte ptr ss:[ebp-47F],7E
00474C14  |.  C685 8>mov byte ptr ss:[ebp-47E],63
00474C1B  |.  C685 8>mov byte ptr ss:[ebp-47D],0CF
00474C22  |.  C685 8>mov byte ptr ss:[ebp-47C],62
00474C29  |.  C685 8>mov byte ptr ss:[ebp-47B],11
00474C30  |.  C685 8>mov byte ptr ss:[ebp-47A],0B2
00474C37  |.  C685 8>mov byte ptr ss:[ebp-479],11
00474C3E  |.  C785 8>mov dword ptr ss:[ebp-478],90E7EED0
00474C48  |.  66:C78>mov word ptr ss:[ebp-474],3005
00474C51  |.  66:C78>mov word ptr ss:[ebp-472],4A09
00474C5A  |.  C685 9>mov byte ptr ss:[ebp-470],9D
00474C61  |.  C685 9>mov byte ptr ss:[ebp-46F],55
00474C68  |.  C685 9>mov byte ptr ss:[ebp-46E],50
00474C6F  |.  C685 9>mov byte ptr ss:[ebp-46D],72
00474C76  |.  C685 9>mov byte ptr ss:[ebp-46C],0FB
00474C7D  |.  C685 9>mov byte ptr ss:[ebp-46B],65
00474C84  |.  C685 9>mov byte ptr ss:[ebp-46A],95
00474C8B  |.  C685 9>mov byte ptr ss:[ebp-469],0F9
00474C92  |.  C785 9>mov dword ptr ss:[ebp-468],AA4591F2
00474C9C  |.  66:C78>mov word ptr ss:[ebp-464],80D2
00474CA5  |.  66:C78>mov word ptr ss:[ebp-462],42A5
00474CAE  |.  C685 A>mov byte ptr ss:[ebp-460],0B3
00474CB5  |.  C685 A>mov byte ptr ss:[ebp-45F],0AB
00474CBC  |.  C685 A>mov byte ptr ss:[ebp-45E],0C
00474CC3  |.  C685 A>mov byte ptr ss:[ebp-45D],96
00474CCA  |.  C685 A>mov byte ptr ss:[ebp-45C],5F
00474CD1  |.  C685 A>mov byte ptr ss:[ebp-45B],25
00474CD8  |.  C685 A>mov byte ptr ss:[ebp-45A],53
00474CDF  |.  C685 A>mov byte ptr ss:[ebp-459],1D
00474CE6  |.  C785 A>mov dword ptr ss:[ebp-458],1177BA51
00474CF0  |.  66:C78>mov word ptr ss:[ebp-454],5DDA
00474CF9  |.  66:C78>mov word ptr ss:[ebp-452],4F35
00474D02  |.  C685 B>mov byte ptr ss:[ebp-450],0B2
00474D09  |.  C685 B>mov byte ptr ss:[ebp-44F],57
00474D10  |.  C685 B>mov byte ptr ss:[ebp-44E],64
00474D17  |.  C685 B>mov byte ptr ss:[ebp-44D],0F0
00474D1E  |.  C685 B>mov byte ptr ss:[ebp-44C],0CA
00474D25  |.  C685 B>mov byte ptr ss:[ebp-44B],0FD
00474D2C  |.  C685 B>mov byte ptr ss:[ebp-44A],0D
00474D33  |.  C685 B>mov byte ptr ss:[ebp-449],52
00474D3A  |.  C785 B>mov dword ptr ss:[ebp-448],DC7C1345
00474D44  |.  66:C78>mov word ptr ss:[ebp-444],7686
00474D4D  |.  66:C78>mov word ptr ss:[ebp-442],40D4
00474D56  |.  C685 C>mov byte ptr ss:[ebp-440],0AD
00474D5D  |.  C685 C>mov byte ptr ss:[ebp-43F],0CD
00474D64  |.  C685 C>mov byte ptr ss:[ebp-43E],0C1
00474D6B  |.  C685 C>mov byte ptr ss:[ebp-43D],88
00474D72  |.  C685 C>mov byte ptr ss:[ebp-43C],15
00474D79  |.  C685 C>mov byte ptr ss:[ebp-43B],9A
00474D80  |.  C685 C>mov byte ptr ss:[ebp-43A],1B
00474D87  |.  C685 C>mov byte ptr ss:[ebp-439],55
00474D8E  |.  C785 C>mov dword ptr ss:[ebp-438],E0C3DE22
00474D98  |.  66:C78>mov word ptr ss:[ebp-434],0BFDB
00474DA1  |.  66:C78>mov word ptr ss:[ebp-432],4ABE
00474DAA  |.  C685 D>mov byte ptr ss:[ebp-430],8A
00474DB1  |.  C685 D>mov byte ptr ss:[ebp-42F],0F9
00474DB8  |.  C685 D>mov byte ptr ss:[ebp-42E],89
00474DBF  |.  C685 D>mov byte ptr ss:[ebp-42D],76
00474DC6  |.  C685 D>mov byte ptr ss:[ebp-42C],0AE
00474DCD  |.  C685 D>mov byte ptr ss:[ebp-42B],52
00474DD4  |.  C685 D>mov byte ptr ss:[ebp-42A],79
00474DDB  |.  C685 D>mov byte ptr ss:[ebp-429],38
00474DE2  |.  C785 D>mov dword ptr ss:[ebp-428],79F83686
00474DEC  |.  66:C78>mov word ptr ss:[ebp-424],18B9
00474DF5  |.  66:C78>mov word ptr ss:[ebp-422],4F8A
00474DFE  |.  C685 E>mov byte ptr ss:[ebp-420],0A0
00474E05  |.  C685 E>mov byte ptr ss:[ebp-41F],3
00474E0C  |.  C685 E>mov byte ptr ss:[ebp-41E],2C
00474E13  |.  C685 E>mov byte ptr ss:[ebp-41D],0C2
00474E1A  |.  C685 E>mov byte ptr ss:[ebp-41C],0E3
00474E21  |.  C685 E>mov byte ptr ss:[ebp-41B],7
00474E28  |.  C685 E>mov byte ptr ss:[ebp-41A],0F7
00474E2F  |.  C685 E>mov byte ptr ss:[ebp-419],0CB           ;  上面产生一个密码表
………………………………………………………………………………………………………………………………
EBP-488  0> 950B4B61
EBP-484  0> 4DC2FA41
EBP-480  0> CF637EAD
EBP-47C  0> 11B21162
EBP-478  0> 90E7EED0
EBP-474  0> 4A093005
EBP-470  0> 7250559D
EBP-46C  0> F99565FB
EBP-468  0> AA4591F2
EBP-464  0> 42A580D2
EBP-460  0> 960CABB3
EBP-45C  0> 1D53255F
EBP-458  0> 1177BA51
EBP-454  0> 4F355DDA
EBP-450  0> F06457B2
EBP-44C  0> 520DFDCA
EBP-448  0> DC7C1345
EBP-444  0> 40D47686
EBP-440  0> 88C1CDAD
EBP-43C  0> 551B9A15
EBP-438  0> E0C3DE22
EBP-434  0> 4ABEBFDB
EBP-430  0> 7689F98A
EBP-42C  0> 387952AE
EBP-428  0> 79F83686
EBP-424  0> 4F8A18B9
EBP-420  0> C22C03A0
EBP-41C  0> CBF707E3
……………………………………………………………………………………………………………………
00474E36  |.  837D 0>cmp dword ptr ss:[ebp+8],0              ;  比较用户名是否位0
00474E3A  |.  74 06  je short DRW.00474E42
00474E3C  |.  837D 0>cmp dword ptr ss:[ebp+C],0              ;  注册码是否位0
00474E40  |.  75 07  jnz short DRW.00474E49
00474E42  |>  33C0   xor eax,eax
00474E44  |.  E9 1D0>jmp DRW.00475166
00474E49  |>  8B45 0>mov eax,dword ptr ss:[ebp+8]
00474E4C  |.  50     push eax                                ; /s
00474E4D  |.  E8 106>call <jmp.&MSVCRT.strlen>               ; \测用户名的长度
00474E52  |.  83C4 0>add esp,4
00474E55  |.  3D FD0>cmp eax,3FD
00474E5A  |.  76 07  jbe short DRW.00474E63
00474E5C  |.  33C0   xor eax,eax
00474E5E  |.  E9 030>jmp DRW.00475166
00474E63  |>  8B4D 0>mov ecx,dword ptr ss:[ebp+8]
00474E66  |.  51     push ecx                                ; /s
00474E67  |.  E8 F66>call <jmp.&MSVCRT.strlen>               ; \strlen
00474E6C  |.  83C4 0>add esp,4
00474E6F  |.  8985 5>mov dword ptr ss:[ebp-6AC],eax          ;  用户名长度储存
00474E75  |.  C685 6>mov byte ptr ss:[ebp-698],0
00474E7C  |.  C785 F>mov dword ptr ss:[ebp-410],0
00474E86  |.  C785 F>mov dword ptr ss:[ebp-408],0
00474E90  |.  8B55 0>mov edx,dword ptr ss:[ebp+8]            ;  用户名
00474E93  |.  52     push edx                                ; /src
00474E94  |.  8D85 F>lea eax,dword ptr ss:[ebp-404]          ; |用户名位数地址
00474E9A  |.  50     push eax                                ; |dest
00474E9B  |.  E8 C86>call <jmp.&MSVCRT.strcpy>               ; \拷贝用户名
00474EA0  |.  83C4 0>add esp,8
00474EA3  |.  C785 7>mov dword ptr ss:[ebp-48C],0            ;  让密码表的第一组为0(这里与位数比较)
00474EAD  |.  EB 0F  jmp short DRW.00474EBE
00474EAF  |>  8B8D 7>/mov ecx,dword ptr ss:[ebp-48C]
00474EB5  |.  83C1 0>|add ecx,1                              ;  循环次数
00474EB8  |.  898D 7>|mov dword ptr ss:[ebp-48C],ecx
00474EBE  |>  8B95 7> mov edx,dword ptr ss:[ebp-48C]
00474EC4  |.  3B95 5>|cmp edx,dword ptr ss:[ebp-6AC]         ;  判断是否结束
00474ECA  |.  7D 35  |jge short DRW.00474F01
00474ECC  |.  8B85 7>|mov eax,dword ptr ss:[ebp-48C]
00474ED2  |.  8A8D 6>|mov cl,byte ptr ss:[ebp-698]
00474ED8  |.  028C05>|add cl,byte ptr ss:[ebp+eax-404]       ;  依次将用户名的每一个字母的ACSII加上上一次之和(取最后两位)
00474EDF  |.  888D 6>|mov byte ptr ss:[ebp-698],cl           ;  储存
00474EE5  |.  8B95 6>|mov edx,dword ptr ss:[ebp-698]
00474EEB  |.  81E2 F>|and edx,0FF                            ;  只取后面两位
00474EF1  |.  8B85 F>|mov eax,dword ptr ss:[ebp-410]
00474EF7  |.  03C2   |add eax,edx
00474EF9  |.  8985 F>|mov dword ptr ss:[ebp-410],eax         ;  储存最后相加得数sjcrack得到的结果是3AC
00474EFF  |.^ EB AE  \jmp short DRW.00474EAF                 ;  这个循环:先两位用户名的ASCII的和(取最后2位)再加上前一位ASCII
00474F01  |>  68 000>push 200                                ; /n = 200 (512.)
00474F06  |.  6A 00  push 0                                  ; |c = 00
00474F08  |.  8D8D 7>lea ecx,dword ptr ss:[ebp-690]          ; |
00474F0E  |.  51     push ecx                                ; |s
00474F0F  |.  E8 BC6>call <jmp.&MSVCRT.memset>               ; \memset
00474F14  |.  83C4 0>add esp,0C
00474F17  |.  6A 08  push 8                                  ; /n = 8
00474F19  |.  8B55 0>mov edx,dword ptr ss:[ebp+C]            ; |
00474F1C  |.  52     push edx                                ; |注册码
00474F1D  |.  8D85 7>lea eax,dword ptr ss:[ebp-690]          ; |
00474F23  |.  50     push eax                                ; |dest
00474F24  |.  E8 336>call <jmp.&MSVCRT.memcpy>               ; \拷贝注册码的前8位
00474F29  |.  83C4 0>add esp,0C
00474F2C  |.  8D8D 7>lea ecx,dword ptr ss:[ebp-690]
00474F32  |.  51     push ecx                                ; /Arg1
00474F33  |.  E8 FEF>call DRW.00474A36                       ; \前8位将字符转换位数字
00474F38  |.  8985 F>mov dword ptr ss:[ebp-40C],eax          ;  将输入码的前8位储存
00474F3E  |.  8B95 F>mov edx,dword ptr ss:[ebp-410]          ;  用户名计算出来的数字
00474F44  |.  0395 F>add edx,dword ptr ss:[ebp-40C]          ;  用户名计算出来的数字加上前8位数字
00474F4A  |.  8995 F>mov dword ptr ss:[ebp-410],edx          ;  储存覆盖原来用户名计算出来的
00474F50  |.  8B85 F>mov eax,dword ptr ss:[ebp-40C]          ;  输入码前8
00474F56  |.  0385 F>add eax,dword ptr ss:[ebp-410]          ;  结果再加上注册码的前8
00474F5C  |.  8B8D 6>mov ecx,dword ptr ss:[ebp-698]
00474F62  |.  81E1 F>and ecx,0FF                             ;  得到用户名最后一次相加的结果
00474F68  |.  03C1   add eax,ecx                             ;  再加上取
00474F6A  |.  8B95 7>mov edx,dword ptr ss:[ebp-48C]          ;  用户名的位数
00474F70  |.  33C9   xor ecx,ecx
00474F72  |.  8A8C15>mov cl,byte ptr ss:[ebp+edx-405]        ;  得到用户名的最后一位ACSII
00474F79  |.  03C1   add eax,ecx                             ;  又加上去
00474F7B  |.  33D2   xor edx,edx
00474F7D  |.  B9 070>mov ecx,7
00474F82  |.  F7F1   div ecx                                 ;  上面相加的结果除以7
00474F84  |.  8995 F>mov dword ptr ss:[ebp-408],edx          ;  余数储存
00474F8A  |.  8B95 F>mov edx,dword ptr ss:[ebp-408]
00474F90  |.  C1E2 0>shl edx,4                               ;  将余数左移4位   作为在密码表的指针
00474F93  |.  8D8415>lea eax,dword ptr ss:[ebp+edx-488]      ;  密码表指向
00474F9A  |.  8985 7>mov dword ptr ss:[ebp-490],eax
00474FA0  |.  8B8D 7>mov ecx,dword ptr ss:[ebp-490]
00474FA6  |.  8B51 0>mov edx,dword ptr ds:[ecx+C]            ;  取值了密码表中
00474FA9  |.  3395 F>xor edx,dword ptr ss:[ebp-410]          ;  这个就是第2组注册码-在密码表中得到的数据XOR用户名得出的值加上前8的结果
00474FAF  |.  8995 5>mov dword ptr ss:[ebp-6A8],edx          ;  储存
00474FB5  |.  8B85 7>mov eax,dword ptr ss:[ebp-490]
00474FBB  |.  8B48 0>mov ecx,dword ptr ds:[eax+4]            ;  密码表中取值了
00474FBE  |.  338D F>xor ecx,dword ptr ss:[ebp-410]          ;  这个就是第3组注册码-在密码表中得到的数据XOR用户名得出的值加上前8的结果
00474FC4  |.  898D 5>mov dword ptr ss:[ebp-6A4],ecx          ;  储存
00474FCA  |.  8B95 7>mov edx,dword ptr ss:[ebp-490]
00474FD0  |.  8B42 0>mov eax,dword ptr ds:[edx+8]            ;  密码表中取值了
00474FD3  |.  3385 F>xor eax,dword ptr ss:[ebp-410]          ;  这个就是第4组注册码-在密码表中得到的数据XOR用户名得出的值加上前8的结果
00474FD9  |.  8985 6>mov dword ptr ss:[ebp-6A0],eax          ;  储存
00474FDF  |.  8B8D 7>mov ecx,dword ptr ss:[ebp-490]
00474FE5  |.  8B11   mov edx,dword ptr ds:[ecx]              ;  密码表中取值了
00474FE7  |.  3395 F>xor edx,dword ptr ss:[ebp-410]          ;  这个就是第5组注册码-在密码表中得到的数据XOR用户名得出的值加上前8的结果
00474FED  |.  8995 6>mov dword ptr ss:[ebp-69C],edx          ;  储存
00474FF3  |.  68 000>push 200                                ; /n = 200 (512.)
00474FF8  |.  6A 00  push 0                                  ; |c = 00
00474FFA  |.  8D85 5>lea eax,dword ptr ss:[ebp-8AC]          ; |
00475000  |.  50     push eax                                ; |s
00475001  |.  E8 CA6>call <jmp.&MSVCRT.memset>               ; \memset
00475006  |.  83C4 0>add esp,0C
00475009  |.  8B8D F>mov ecx,dword ptr ss:[ebp-40C]
0047500F  |.  51     push ecx                                ; /<%.8x>
00475010  |.  68 441>push DRW.004A1C44                       ; |format = "%.8x-"
00475015  |.  8D95 5>lea edx,dword ptr ss:[ebp-8AC]          ; |
0047501B  |.  52     push edx                                ; |s
0047501C  |.  FF15 6>call dword ptr ds:[<&MSVCRT.sprintf>]   ; \在第一组注册码后面加上一个“-”
00475022  |.  83C4 0>add esp,0C
00475025  |.  C785 7>mov dword ptr ss:[ebp-48C],0
0047502F  |.  EB 0F  jmp short DRW.00475040
00475031  |>  8B85 7>/mov eax,dword ptr ss:[ebp-48C]
00475037  |.  83C0 0>|add eax,1
0047503A  |.  8985 7>|mov dword ptr ss:[ebp-48C],eax
00475040  |>  83BD 7> cmp dword ptr ss:[ebp-48C],4
00475047  |.  73 3B  |jnb short DRW.00475084
00475049  |.  8B8D 7>|mov ecx,dword ptr ss:[ebp-48C]
0047504F  |.  8B948D>|mov edx,dword ptr ss:[ebp+ecx*4-6A8]
00475056  |.  52     |push edx                               ; /<%.8x>
00475057  |.  68 4C1>|push DRW.004A1C4C                      ; |format = "%.8x-"
0047505C  |.  8D85 5>|lea eax,dword ptr ss:[ebp-AAC]         ; |
00475062  |.  50     |push eax                               ; |s
00475063  |.  FF15 6>|call dword ptr ds:[<&MSVCRT.sprintf>]  ; \将每一组的数据后面加上“-”
00475069  |.  83C4 0>|add esp,0C
0047506C  |.  8D8D 5>|lea ecx,dword ptr ss:[ebp-AAC]
00475072  |.  51     |push ecx                               ; /src
00475073  |.  8D95 5>|lea edx,dword ptr ss:[ebp-8AC]         ; |
00475079  |.  52     |push edx                               ; |dest
0047507A  |.  E8 996>|call <jmp.&MSVCRT.strcat>              ; \将数据组合在一起
0047507F  |.  83C4 0>|add esp,8
00475082  |.^ EB AD  \jmp short DRW.00475031
00475084  |>  8D85 5>lea eax,dword ptr ss:[ebp-8AC]          ;  上面一个循环的目的是将每一组数据加上“-”后组合
0047508A  |.  50     push eax                                ; /s
0047508B  |.  FF15 E>call dword ptr ds:[<&MSVCRT._strupr>]   ; \将组合后的注册码中的字符全部变成大写
00475091  |.  83C4 0>add esp,4
00475094  |.  8D8D 5>lea ecx,dword ptr ss:[ebp-8AC]
0047509A  |.  51     push ecx                                ; /s
0047509B  |.  E8 C26>call <jmp.&MSVCRT.strlen>               ; \测出注册码的长度
004750A0  |.  83C4 0>add esp,4
004750A3  |.  C68405>mov byte ptr ss:[ebp+eax-8AD],0         ;  去掉注册码最后一位的“-”
004750AB  |.  8D95 5>lea edx,dword ptr ss:[ebp-8AC]
004750B1  |.  52     push edx                                ; /s
004750B2  |.  E8 AB6>call <jmp.&MSVCRT.strlen>               ; \测出注册码的长度
004750B7  |.  83C4 0>add esp,4
004750BA  |.  8985 E>mov dword ptr ss:[ebp-418],eax
004750C0  |.  8B45 0>mov eax,dword ptr ss:[ebp+C]            ;  得到输入码
004750C3  |.  50     push eax                                ; /s
004750C4  |.  E8 996>call <jmp.&MSVCRT.strlen>               ; \测输入码的长度
004750C9  |.  83C4 0>add esp,4
004750CC  |.  8945 F>mov dword ptr ss:[ebp-4],eax
004750CF  |.  8B8D E>mov ecx,dword ptr ss:[ebp-418]
004750D5  |.  3B4D F>cmp ecx,dword ptr ss:[ebp-4]            ;  输入码的长度与注册码的长度要相等
004750D8      74 07  je short DRW.004750E1
004750DA  |.  33C0   xor eax,eax
004750DC  |.  E9 850>jmp DRW.00475166
004750E1  |>  C785 6>mov dword ptr ss:[ebp-694],0
004750EB  |.  C785 E>mov dword ptr ss:[ebp-414],0
004750F5  |.  C785 7>mov dword ptr ss:[ebp-48C],0
004750FF  |.  EB 0F  jmp short DRW.00475110
00475101  |>  8B95 7>/mov edx,dword ptr ss:[ebp-48C]
00475107  |.  83C2 0>|add edx,1
0047510A  |.  8995 7>|mov dword ptr ss:[ebp-48C],edx
00475110  |>  8B85 7> mov eax,dword ptr ss:[ebp-48C]
00475116  |.  3B45 F>|cmp eax,dword ptr ss:[ebp-4]
00475119  |.  7D 3A  |jge short DRW.00475155
0047511B  |.  8B8D 7>|mov ecx,dword ptr ss:[ebp-48C]
00475121  |.  33D2   |xor edx,edx
00475123  |.  8A940D>|mov dl,byte ptr ss:[ebp+ecx-8AC]       ;  这里是依次得到用用户名和输入码的前8位计算出来的注册码每一位的ACSII
0047512A  |.  8B85 6>|mov eax,dword ptr ss:[ebp-694]         ;  得到前一次的结果
00475130  |.  03C2   |add eax,edx                            ;  前一次的结果加上本次注册码的ASCII
00475132  |.  8985 6>|mov dword ptr ss:[ebp-694],eax         ;  储存就是将用用户名和输入码前8位计算出来的注册码每一位ASCII相加
00475138  |.  8B4D 0>|mov ecx,dword ptr ss:[ebp+C]           ;  我的输入码
0047513B  |.  038D 7>|add ecx,dword ptr ss:[ebp-48C]
00475141  |.  33D2   |xor edx,edx
00475143  |.  8A11   |mov dl,byte ptr ds:[ecx]               ;  这里是依次得到输入码每一位的ACSII
00475145  |.  8B85 E>|mov eax,dword ptr ss:[ebp-414]         ;  得到前一次的结果
0047514B  |.  03C2   |add eax,edx                            ;  加上这一次输入码的ACSII
0047514D  |.  8985 E>|mov dword ptr ss:[ebp-414],eax
00475153  |.^ EB AC  \jmp short DRW.00475101
00475155  |>  8B8D 6>mov ecx,dword ptr ss:[ebp-694]
0047515B      33C0   xor eax,eax
0047515D      3B8D E>cmp ecx,dword ptr ss:[ebp-414]          ;  比较如果两次相加的结果相等
00475163      0F94C0 sete al                                 ;  置1  (标志位)
00475166      8BE5   mov esp,ebp
00475168  |.  5D     pop ebp
00475169  \.  C2 080>retn 8

总结:注册码只与用户名及注册码的前8位有关(注册码一共有5组分别用“-”相连每组分别有8个)
1、先计算用户名:先用户名的ASCII累加的和(取最后2位)结果位A,再把每一次的A累加起来总的结果为B(其中最后依次A有用)
2、将注册码的前8位将字符当作数字加上B,作为结果C。
3、将C+注册码的前8位+A+用户名的最后一位的ASCII的总结果除以7的余数=D。
4、将D左移4位作为指针在密码表中连续取四组值作为注册码的后4组。
最后注册码:第一组随意-指针向下第4组-指针向下第2组-指针向下第3组-指针本身
密码表:
EBP-488  0> 950B4B61
EBP-484  0> 4DC2FA41
EBP-480  0> CF637EAD
EBP-47C  0> 11B21162
EBP-478  0> 90E7EED0
EBP-474  0> 4A093005
EBP-470  0> 7250559D
EBP-46C  0> F99565FB
EBP-468  0> AA4591F2
EBP-464  0> 42A580D2
EBP-460  0> 960CABB3
EBP-45C  0> 1D53255F
EBP-458  0> 1177BA51
EBP-454  0> 4F355DDA
EBP-450  0> F06457B2
EBP-44C  0> 520DFDCA
EBP-448  0> DC7C1345
EBP-444  0> 40D47686
EBP-440  0> 88C1CDAD
EBP-43C  0> 551B9A15
EBP-438  0> E0C3DE22
EBP-434  0> 4ABEBFDB
EBP-430  0> 7689F98A
EBP-42C  0> 387952AE
EBP-428  0> 79F83686
EBP-424  0> 4F8A18B9
EBP-420  0> C22C03A0
EBP-41C  0> CBF707E3

sjcrack
12345678-EBA13FDF-583D6A21-60640FB9-82D3B4F4