【破文标题】:Multi desktop V3.00 注册算法分析

【破文作者】:KuNgBiM[DFCG]

【作者邮箱】:gb_1227@163.com

【软件名称】:Multi desktop V3.00

【软件大小】:528 KB

【软件语言】:英文

【软件类别】:国外软件 / 共享版 / 桌面工具

【整理时间】:2005-10-27

【开 发 商】:http://www.8848soft.com/

【下载地址】:http://www.8848soft.com/d1/multidesktop_setup.exe

【软件简介】:Multi Desktop 是一个非常不错的虚拟桌面管理软件!支持4个虚拟桌面;支持为各个虚拟桌面建立自己的图标、名字、壁纸,通过拖放操作将窗口在虚拟桌面之间移动;支持使用快捷键在虚拟桌面之间切换;支持为虚拟桌面选择壁纸风格。 

【保护方式】:注册码 + 启动NAG + 15天试用限制

【编译语言】:Microsoft Visual C++ 6.0

【调试环境】:WinXP、PEiD、Ollydbg

【破解日期】:2005-10-29

【破解目的】:研究算法分析

【作者声明】:初学Crack,只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!

—————————————————————————————————
【破解过程】:

侦测:用PEiD查壳,无壳,Microsoft Visual C++ 6.0 编译。

试探:运行主程序注册,输入试炼码,确认!程序提示:"Registration failed, please check the code and try again!"

下药:Ollydbg载入主程序,命令下断:bpx MessageBoxA,回车,F9运行,输入试炼信息:

************* 试炼信息 **************

Registered name:KuNgBiM

Registered code:1111-2222-3333-4444

*************************************

0041CB34    51              push ecx
0041CB35    FF15 2CD34200   call dword ptr ds:[<&USER32.MessageBoxA>]   ; 这里中断,Alt+F9返回!
0041CB3B    5E              pop esi
0041CB3C    C2 0C00         retn 0C
........

返回到:

00409E60    64:A1 00000000  mov eax,dword ptr fs:[0]            ; 这里F2下断!Ctrl+F2重新加载程序!
00409E66    6A FF           push -1
00409E68    68 68BD4200     push MultiDes.0042BD68
00409E6D    50              push eax
00409E6E    64:8925 0000000>mov dword ptr fs:[0],esp
00409E75    83EC 14         sub esp,14
00409E78    53              push ebx
00409E79    55              push ebp
00409E7A    56              push esi
00409E7B    8BF1            mov esi,ecx
00409E7D    57              push edi
00409E7E    8B86 70010000   mov eax,dword ptr ds:[esi+170]
00409E84    83F8 02         cmp eax,2
00409E87    0F8F E8010000   jg MultiDes.0040A075
00409E8D    40              inc eax
00409E8E    6A 01           push 1
00409E90    8986 70010000   mov dword ptr ds:[esi+170],eax
00409E96    E8 A2350100     call MultiDes.0041D43D
00409E9B    8D86 60010000   lea eax,dword ptr ds:[esi+160]
00409EA1    8DBE 5C010000   lea edi,dword ptr ds:[esi+15C]
00409EA7    50              push eax
00409EA8    8D4C24 1C       lea ecx,dword ptr ss:[esp+1C]
00409EAC    57              push edi
00409EAD    51              push ecx
00409EAE    E8 154D0100     call MultiDes.0041EBC8
00409EB3    8D96 64010000   lea edx,dword ptr ds:[esi+164]
00409EB9    33DB            xor ebx,ebx
00409EBB    52              push edx
00409EBC    50              push eax
00409EBD    8D4424 1C       lea eax,dword ptr ss:[esp+1C]
00409EC1    895C24 34       mov dword ptr ss:[esp+34],ebx
00409EC5    50              push eax
00409EC6    E8 FD4C0100     call MultiDes.0041EBC8
00409ECB    8D8E 68010000   lea ecx,dword ptr ds:[esi+168]
00409ED1    8D5424 10       lea edx,dword ptr ss:[esp+10]
00409ED5    51              push ecx
00409ED6    50              push eax
00409ED7    52              push edx
00409ED8    C64424 38 01    mov byte ptr ss:[esp+38],1
00409EDD    E8 E64C0100     call MultiDes.0041EBC8
00409EE2    50              push eax
00409EE3    8BCF            mov ecx,edi
00409EE5    C64424 30 02    mov byte ptr ss:[esp+30],2
00409EEA    E8 E34B0100     call MultiDes.0041EAD2
00409EEF    8D4C24 10       lea ecx,dword ptr ss:[esp+10]
00409EF3    C64424 2C 01    mov byte ptr ss:[esp+2C],1
00409EF8    E8 E84A0100     call MultiDes.0041E9E5
00409EFD    8D4C24 14       lea ecx,dword ptr ss:[esp+14]
00409F01    885C24 2C       mov byte ptr ss:[esp+2C],bl
00409F05    E8 DB4A0100     call MultiDes.0041E9E5
00409F0A    8D4C24 18       lea ecx,dword ptr ss:[esp+18]
00409F0E    C74424 2C FFFFF>mov dword ptr ss:[esp+2C],-1
00409F16    E8 CA4A0100     call MultiDes.0041E9E5
00409F1B    68 90C54300     push MultiDes.0043C590
00409F20    8D4C24 14       lea ecx,dword ptr ss:[esp+14]
00409F24    E8 2A4B0100     call MultiDes.0041EA53
00409F29    8DAE 58010000   lea ebp,dword ptr ds:[esi+158]
00409F2F    8D4424 18       lea eax,dword ptr ss:[esp+18]
00409F33    BB 03000000     mov ebx,3
00409F38    55              push ebp
00409F39    50              push eax
00409F3A    B9 88C64300     mov ecx,MultiDes.0043C688
00409F3F    895C24 34       mov dword ptr ss:[esp+34],ebx
00409F43    E8 D8F4FFFF     call MultiDes.00409420              ; ★用户名检测CALL★F7跟进
00409F48    50              push eax
00409F49    8D4C24 14       lea ecx,dword ptr ss:[esp+14]
00409F4D    C64424 30 04    mov byte ptr ss:[esp+30],4
00409F52    E8 7B4B0100     call MultiDes.0041EAD2
00409F57    8D4C24 18       lea ecx,dword ptr ss:[esp+18]
00409F5B    885C24 2C       mov byte ptr ss:[esp+2C],bl
00409F5F    E8 814A0100     call MultiDes.0041E9E5              ; 取用户名前2位转为大写后与“wfeewwf3deda”相连
00409F64    8B4424 10       mov eax,dword ptr ss:[esp+10]       ; ASCII "KUwfeewwf3deda"
00409F68    8B48 F8         mov ecx,dword ptr ds:[eax-8]        ; 得到组合后的计算名长度,ds:[009138C8]=0000000E
00409F6B    51              push ecx                            ; ecx=0000000E,(14位)
00409F6C    8D4C24 18       lea ecx,dword ptr ss:[esp+18]
00409F70    50              push eax                            ; 计算名压栈,ASCII "KUwfeewwf3deda"
00409F71    51              push ecx
00409F72    E8 59C9FFFF     call MultiDes.004068D0              ; ★重要CALL★F7跟进
00409F77    83C4 0C         add esp,0C
00409F7A    50              push eax
00409F7B    8D4C24 14       lea ecx,dword ptr ss:[esp+14]
00409F7F    C64424 30 05    mov byte ptr ss:[esp+30],5
00409F84    E8 494B0100     call MultiDes.0041EAD2
00409F89    8D4C24 14       lea ecx,dword ptr ss:[esp+14]
00409F8D    885C24 2C       mov byte ptr ss:[esp+2C],bl
00409F91    E8 4F4A0100     call MultiDes.0041E9E5
00409F96    8D5424 1C       lea edx,dword ptr ss:[esp+1C]
00409F9A    6A 10           push 10
00409F9C    52              push edx
00409F9D    8D4C24 18       lea ecx,dword ptr ss:[esp+18]
00409FA1    E8 4CE00000     call MultiDes.00417FF2
00409FA6    50              push eax
00409FA7    8D4C24 14       lea ecx,dword ptr ss:[esp+14]
00409FAB    C64424 30 06    mov byte ptr ss:[esp+30],6
00409FB0    E8 1D4B0100     call MultiDes.0041EAD2
00409FB5    8D4C24 1C       lea ecx,dword ptr ss:[esp+1C]
00409FB9    885C24 2C       mov byte ptr ss:[esp+2C],bl
00409FBD    E8 234A0100     call MultiDes.0041E9E5              ; 获得用户输入的假注册码
00409FC2    8B07            mov eax,dword ptr ds:[edi]
00409FC4    50              push eax                            ; 假码压栈,ASCII "1111222233334444"
00409FC5    8B4424 14       mov eax,dword ptr ss:[esp+14]       ; 取出真注册码,准备与假码比较!
00409FC9    50              push eax                            ; 真码压栈,ASCII "687fcda714009cf4"
00409FCA    E8 653E0000     call MultiDes.0040DE34              ; ★真假码经典比较CALL★
00409FCF    83C4 08         add esp,8
00409FD2    85C0            test eax,eax
00409FD4    75 53           jnz short MultiDes.0040A029         ; 若不相等,跳走则Game Over!
00409FD6    83CB FF         or ebx,FFFFFFFF
00409FD9    8D4C24 10       lea ecx,dword ptr ss:[esp+10]
00409FDD    895C24 2C       mov dword ptr ss:[esp+2C],ebx
00409FE1    E8 FF490100     call MultiDes.0041E9E5
00409FE6    8D4C24 1C       lea ecx,dword ptr ss:[esp+1C]
00409FEA    51              push ecx
00409FEB    B9 88C64300     mov ecx,MultiDes.0043C688
00409FF0    E8 BBF5FFFF     call MultiDes.004095B0
00409FF5    8B00            mov eax,dword ptr ds:[eax]
00409FF7    6A 40           push 40
00409FF9    50              push eax
00409FFA    68 9C874300     push MultiDes.0043879C              ; ASCII "Registration finished, thank for your registration!"
00409FFF    8BCE            mov ecx,esi
0040A001    C74424 38 07000>mov dword ptr ss:[esp+38],7
0040A009    E8 FF2A0100     call MultiDes.0041CB0D
0040A00E    8D4C24 1C       lea ecx,dword ptr ss:[esp+1C]
0040A012    895C24 2C       mov dword ptr ss:[esp+2C],ebx
0040A016    E8 CA490100     call MultiDes.0041E9E5
0040A01B    57              push edi
0040A01C    55              push ebp
0040A01D    B9 88C64300     mov ecx,MultiDes.0043C688
0040A022    E8 99F2FFFF     call MultiDes.004092C0
0040A027    EB 45           jmp short MultiDes.0040A06E
0040A029    83CF FF         or edi,FFFFFFFF
0040A02C    8D4C24 10       lea ecx,dword ptr ss:[esp+10]
0040A030    897C24 2C       mov dword ptr ss:[esp+2C],edi
0040A034    E8 AC490100     call MultiDes.0041E9E5
0040A039    8D5424 20       lea edx,dword ptr ss:[esp+20]
0040A03D    B9 88C64300     mov ecx,MultiDes.0043C688
0040A042    52              push edx
0040A043    E8 68F5FFFF     call MultiDes.004095B0
0040A048    8B00            mov eax,dword ptr ds:[eax]
0040A04A    6A 10           push 10
0040A04C    50              push eax
0040A04D    68 60874300     push MultiDes.00438760        ; ASCII "Registration failed, please check the code and try again!"
0040A052    8BCE            mov ecx,esi
0040A054    C74424 38 08000>mov dword ptr ss:[esp+38],8
0040A05C    E8 AC2A0100     call MultiDes.0041CB0D
0040A061    8D4C24 20       lea ecx,dword ptr ss:[esp+20]       ; 返回到这里,向上找到可以处下断!
0040A065    897C24 2C       mov dword ptr ss:[esp+2C],edi
0040A069    E8 77490100     call MultiDes.0041E9E5
0040A06E    8BCE            mov ecx,esi
0040A070    E8 500D0100     call MultiDes.0041ADC5
0040A075    8B4C24 24       mov ecx,dword ptr ss:[esp+24]
0040A079    5F              pop edi
0040A07A    5E              pop esi
0040A07B    5D              pop ebp
0040A07C    5B              pop ebx
0040A07D    64:890D 0000000>mov dword ptr fs:[0],ecx
0040A084    83C4 20         add esp,20
0040A087    C3              retn                                ; 返回程序界面
........

========================= 跟进 00409F43    E8 D8F4FFFF     call MultiDes.00409420 =========================

00409420    6A FF           push -1                             ; 跟进来到这里
00409422    68 8FBB4200     push MultiDes.0042BB8F
00409427    64:A1 00000000  mov eax,dword ptr fs:[0]
0040942D    50              push eax
0040942E    64:8925 0000000>mov dword ptr fs:[0],esp
00409435    83EC 0C         sub esp,0C
00409438    8B4424 20       mov eax,dword ptr ss:[esp+20]
0040943C    53              push ebx
0040943D    56              push esi
0040943E    50              push eax
0040943F    8D4C24 2C       lea ecx,dword ptr ss:[esp+2C]
00409443    C74424 14 00000>mov dword ptr ss:[esp+14],0
0040944B    E8 0A530100     call MultiDes.0041E75A
00409450    BB 01000000     mov ebx,1
00409455    8D4C24 28       lea ecx,dword ptr ss:[esp+28]
00409459    895C24 1C       mov dword ptr ss:[esp+1C],ebx
0040945D    E8 EDEF0000     call MultiDes.0041844F              ; 取用户名
00409462    8D4C24 28       lea ecx,dword ptr ss:[esp+28]       ; ASCII "KuNgBiM"
00409466    E8 98EF0000     call MultiDes.00418403
0040946B    8D4C24 28       lea ecx,dword ptr ss:[esp+28]
0040946F    E8 125A0100     call MultiDes.0041EE86              ; 用户名所有字符由小写转为大写
00409474    6A 42           push 42                             ; ASCII "KUNGBIM"
00409476    6A 2E           push 2E
00409478    8D4C24 30       lea ecx,dword ptr ss:[esp+30]       ; 转换完毕后,重新赋值给ecx
0040947C    E8 34EB0000     call MultiDes.00417FB5
00409481    6A 42           push 42
00409483    6A 20           push 20
00409485    8D4C24 30       lea ecx,dword ptr ss:[esp+30]
00409489    E8 27EB0000     call MultiDes.00417FB5
0040948E    8B4C24 28       mov ecx,dword ptr ss:[esp+28]       ; 取转换后的用户名,ASCII "KUNGBIM"
00409492    8B41 F8         mov eax,dword ptr ds:[ecx-8]        ; 取用户名长度,ds:[009139B8]=00000007
00409495    83F8 02         cmp eax,2                           ; 用户名长度与2比较
00409498    7E 4C           jle short MultiDes.004094E6         ; 若用户名长度小于或等于2就跳向自定义用户名
0040949A    8D5424 0C       lea edx,dword ptr ss:[esp+C]
0040949E    6A 02           push 2                              ; (取用户名个数)2入栈
004094A0    52              push edx
004094A1    8D4C24 30       lea ecx,dword ptr ss:[esp+30]       ; 取前2位转换后的用户名,ASCII "KUNGBIM"
004094A5    E8 48EB0000     call MultiDes.00417FF2              ; 取固定字符串
004094AA    68 44844300     push MultiDes.00438444              ; ASCII "wfeewwf3deda"
004094AF    50              push eax
004094B0    8D4424 10       lea eax,dword ptr ss:[esp+10]
004094B4    C64424 24 02    mov byte ptr ss:[esp+24],2
004094B9    50              push eax
004094BA    E8 6F570100     call MultiDes.0041EC2E
004094BF    50              push eax
004094C0    8D4C24 2C       lea ecx,dword ptr ss:[esp+2C]
004094C4    C64424 20 03    mov byte ptr ss:[esp+20],3
004094C9    E8 04560100     call MultiDes.0041EAD2
004094CE    8D4C24 08       lea ecx,dword ptr ss:[esp+8]
004094D2    C64424 1C 02    mov byte ptr ss:[esp+1C],2
004094D7    E8 09550100     call MultiDes.0041E9E5
004094DC    885C24 1C       mov byte ptr ss:[esp+1C],bl
004094E0    8D4C24 0C       lea ecx,dword ptr ss:[esp+C]
004094E4    EB 58           jmp short MultiDes.0040953E
004094E6    68 40844300     push MultiDes.00438440              ; 程序自定义用户名为“AA”来计算,ASCII "AA"
004094EB    8D4C24 2C       lea ecx,dword ptr ss:[esp+2C]
004094EF    E8 81580100     call MultiDes.0041ED75
004094F4    8D4C24 08       lea ecx,dword ptr ss:[esp+8]
004094F8    6A 02           push 2
004094FA    51              push ecx
004094FB    8D4C24 30       lea ecx,dword ptr ss:[esp+30]       ; 取自定义用户名,ASCII "AA"
004094FF    E8 EEEA0000     call MultiDes.00417FF2              ; 取固定字符串
00409504    68 44844300     push MultiDes.00438444              ; ASCII "wfeewwf3deda"
00409509    8D5424 10       lea edx,dword ptr ss:[esp+10]
0040950D    50              push eax
0040950E    52              push edx
0040950F    C64424 28 04    mov byte ptr ss:[esp+28],4
00409514    E8 15570100     call MultiDes.0041EC2E
00409519    50              push eax
0040951A    8D4C24 2C       lea ecx,dword ptr ss:[esp+2C]
0040951E    C64424 20 05    mov byte ptr ss:[esp+20],5
00409523    E8 AA550100     call MultiDes.0041EAD2
00409528    8D4C24 0C       lea ecx,dword ptr ss:[esp+C]
0040952C    C64424 1C 04    mov byte ptr ss:[esp+1C],4
00409531    E8 AF540100     call MultiDes.0041E9E5
00409536    885C24 1C       mov byte ptr ss:[esp+1C],bl
0040953A    8D4C24 08       lea ecx,dword ptr ss:[esp+8]
0040953E    E8 A2540100     call MultiDes.0041E9E5
00409543    8B7424 24       mov esi,dword ptr ss:[esp+24]
00409547    8D4424 28       lea eax,dword ptr ss:[esp+28]
0040954B    50              push eax
0040954C    8BCE            mov ecx,esi
0040954E    E8 07520100     call MultiDes.0041E75A
00409553    895C24 10       mov dword ptr ss:[esp+10],ebx
00409557    8D4C24 28       lea ecx,dword ptr ss:[esp+28]
0040955B    C64424 1C 00    mov byte ptr ss:[esp+1C],0
00409560    E8 80540100     call MultiDes.0041E9E5
00409565    8B4C24 14       mov ecx,dword ptr ss:[esp+14]
00409569    8BC6            mov eax,esi
0040956B    5E              pop esi
0040956C    5B              pop ebx
0040956D    64:890D 0000000>mov dword ptr fs:[0],ecx
00409574    83C4 18         add esp,18
00409577    C2 0800         retn 8
........

========================= 跟进 00409F72    E8 59C9FFFF     call MultiDes.004068D0 =========================

004068D0    6A FF           push -1                                    ; 跟进来到这里
004068D2    68 F8B54200     push MultiDes.0042B5F8
004068D7    64:A1 00000000  mov eax,dword ptr fs:[0]                   ; 取出计算名,ASCII "KUwfeewwf3deda"
004068DD    50              push eax
004068DE    64:8925 0000000>mov dword ptr fs:[0],esp
004068E5    83EC 60         sub esp,60
004068E8    56              push esi
004068E9    8B7424 7C       mov esi,dword ptr ss:[esp+7C]              ; 得到计算名位数
004068ED    57              push edi
004068EE    8B7C24 7C       mov edi,dword ptr ss:[esp+7C]              ; 得到计算名
004068F2    6A 00           push 0
004068F4    56              push esi                                   ; esi=0000000E(14位)
004068F5    57              push edi                                   ; edi=009138D0, (ASCII "KUwfeewwf3deda")
004068F6    C74424 14 00000>mov dword ptr ss:[esp+14],0
004068FE    E8 9E1B0100     call MultiDes.004184A1
00406903    8D4C24 0C       lea ecx,dword ptr ss:[esp+C]
00406907    E8 A40A0000     call MultiDes.004073B0                     ; ★调用MD5标准算法常数★F7跟进
0040690C    56              push esi
0040690D    57              push edi
0040690E    8D4C24 14       lea ecx,dword ptr ss:[esp+14]
00406912    C74424 78 00000>mov dword ptr ss:[esp+78],0
0040691A    E8 810C0000     call MultiDes.004075A0                     ; ★调用MD5标准算法机制★F7跟进
0040691F    8B7424 78       mov esi,dword ptr ss:[esp+78]
00406923    8D4C24 0C       lea ecx,dword ptr ss:[esp+C]
00406927    56              push esi
00406928    E8 130B0000     call MultiDes.00407440                     ; ★使用MD5标准算法,转换计算名★
0040692D    8B4C24 68       mov ecx,dword ptr ss:[esp+68]
00406931    8BC6            mov eax,esi
00406933    5F              pop edi
00406934    5E              pop esi
00406935    64:890D 0000000>mov dword ptr fs:[0],ecx
0040693C    83C4 6C         add esp,6C
0040693F    C3              retn
........

========================= 跟进 00406907    E8 A40A0000     call MultiDes.004073B0 =========================

004073B0    8BD1            mov edx,ecx                                ; 下面是MD5算法的标准常数
004073B2    57              push edi
004073B3    B9 10000000     mov ecx,10
004073B8    33C0            xor eax,eax
004073BA    8D7A 04         lea edi,dword ptr ds:[edx+4]
004073BD    C702 78DE4200   mov dword ptr ds:[edx],MultiDes.0042DE78
004073C3    F3:AB           rep stos dword ptr es:[edi]
004073C5    8942 48         mov dword ptr ds:[edx+48],eax
004073C8    8942 44         mov dword ptr ds:[edx+44],eax
004073CB    C742 4C 0123456>mov dword ptr ds:[edx+4C],67452301
004073D2    C742 50 89ABCDE>mov dword ptr ds:[edx+50],EFCDAB89
004073D9    C742 54 FEDCBA9>mov dword ptr ds:[edx+54],98BADCFE
004073E0    C742 58 7654321>mov dword ptr ds:[edx+58],10325476
004073E7    8BC2            mov eax,edx
004073E9    5F              pop edi
004073EA    C3              retn
........

========================= 跟进 0040691A    E8 810C0000     call MultiDes.004075A0 =========================

004075A0    53              push ebx                                 ; 以下是MD5算法的标准变换运算机制
004075A1    8BD9            mov ebx,ecx
004075A3    8B4C24 0C       mov ecx,dword ptr ss:[esp+C]
004075A7    55              push ebp
004075A8    8B53 44         mov edx,dword ptr ds:[ebx+44]
004075AB    56              push esi
004075AC    8BC2            mov eax,edx
004075AE    8D34CD 00000000 lea esi,dword ptr ds:[ecx*8]
004075B5    C1E8 03         shr eax,3
004075B8    8D14CA          lea edx,dword ptr ds:[edx+ecx*8]
004075BB    83E0 3F         and eax,3F
004075BE    3BD6            cmp edx,esi
004075C0    57              push edi
004075C1    8953 44         mov dword ptr ds:[ebx+44],edx
004075C4    73 03           jnb short MultiDes.004075C9
004075C6    FF43 48         inc dword ptr ds:[ebx+48]
004075C9    8B7B 48         mov edi,dword ptr ds:[ebx+48]
004075CC    8BD1            mov edx,ecx
004075CE    BD 40000000     mov ebp,40
004075D3    C1EA 1D         shr edx,1D
004075D6    2BE8            sub ebp,eax
004075D8    03FA            add edi,edx
004075DA    3BCD            cmp ecx,ebp
004075DC    897B 48         mov dword ptr ds:[ebx+48],edi
004075DF    72 52           jb short MultiDes.00407633
004075E1    8B7424 14       mov esi,dword ptr ss:[esp+14]
004075E5    8BCD            mov ecx,ebp
004075E7    8D7C18 04       lea edi,dword ptr ds:[eax+ebx+4]
004075EB    8BC1            mov eax,ecx
004075ED    C1E9 02         shr ecx,2
004075F0    F3:A5           rep movs dword ptr es:[edi],dword ptr ds:[esi]
004075F2    8BC8            mov ecx,eax
004075F4    83E1 03         and ecx,3
004075F7    F3:A4           rep movs byte ptr es:[edi],byte ptr ds:[esi]
004075F9    8D4B 04         lea ecx,dword ptr ds:[ebx+4]
004075FC    51              push ecx
004075FD    8BCB            mov ecx,ebx
004075FF    E8 8CF3FFFF     call MultiDes.00406990
00407604    8BFD            mov edi,ebp
00407606    8D75 3F         lea esi,dword ptr ss:[ebp+3F]
00407609    8B6C24 18       mov ebp,dword ptr ss:[esp+18]
0040760D    3BF5            cmp esi,ebp
0040760F    73 1A           jnb short MultiDes.0040762B
00407611    8B5424 14       mov edx,dword ptr ss:[esp+14]
00407615    8BCB            mov ecx,ebx
00407617    8D4432 C1       lea eax,dword ptr ds:[edx+esi-3F]
0040761B    50              push eax
0040761C    E8 6FF3FFFF     call MultiDes.00406990
00407621    83C6 40         add esi,40
00407624    83C7 40         add edi,40
00407627    3BF5            cmp esi,ebp
00407629  ^ 72 E6           jb short MultiDes.00407611
0040762B    8B4C24 18       mov ecx,dword ptr ss:[esp+18]
0040762F    33C0            xor eax,eax
00407631    EB 02           jmp short MultiDes.00407635
00407633    33FF            xor edi,edi
00407635    8B5424 14       mov edx,dword ptr ss:[esp+14]
00407639    2BCF            sub ecx,edi
0040763B    8D3417          lea esi,dword ptr ds:[edi+edx]
0040763E    8D7C18 04       lea edi,dword ptr ds:[eax+ebx+4]
00407642    8BC1            mov eax,ecx
00407644    C1E9 02         shr ecx,2
00407647    F3:A5           rep movs dword ptr es:[edi],dword ptr ds:[esi]
00407649    8BC8            mov ecx,eax
0040764B    83E1 03         and ecx,3
0040764E    F3:A4           rep movs byte ptr es:[edi],byte ptr ds:[esi]
00407650    5F              pop edi
00407651    5E              pop esi
00407652    5D              pop ebp
00407653    5B              pop ebx
00407654    C2 0800         retn 8
........

-------------------------------------------------------------------------------------------------------------------------
【算法总结】:

注册验证非常简单:

1、注册码固定为16位。

2、用户名位数小于或等于2位,则调用程序固定用户名“AA”来作为用户名。

3、把用户名所有字符由小写转为大写,结果记为N1。

4、N1前两位与固定字符串“wfeewwf3deda”连接组合成计算名,结果记为N2。

5、将N2进行标准MD5运算转换,结果记为KEY1。

6、取KEY1前16位转换为小写输出,则为注册码,结果记为KEY2。

【完美爆破点】:

00409FD4    75 53           jnz short MultiDes.0040A029         ; nop掉!

-------------------------------------------------------------------------------------------------------------------------
【注册机】:

注册机我就不写了,很简单的。。。

【注册信息】:

Registered name:KuNgBiM

Registered code:687f-cda7-1400-9cf4

--------------------------------------------------------------------------------------------


版权所有(C)2005 KuNgBiM[DFCG]         Copyright (C) 2005 KuNgBiM[DFCG]


--------------------------------------------------------------------------------------------
          Cracked By KuNgBiM[DFCG]

                2005-10-29

                01:46:00 AM