【破解作者】 jsliyangsj
【作者邮箱】 sjcrack@yahoo.com.cn
【使用工具】 peid OllyDbg1.10
【破解平台】 Winxp
【软件名称】 自明排课9.0最新版本
【下载地址】 http://www.zimingsoft.com/soft/zmrj.arj
【软件介绍】一个贼好的排课软件,名副其实可以算最好的了,我们单位就用它,
(以前一直用排课王,没它好)速度快,40个班级,全部优化好,y约1个小时。
分析:
……………………………………………………………………………………………………………………
程序是用C++编写的
运行软件后输入序列号,有一个错误信息
首先用OD的插件ustrref.dll查找有一个错误信息!
:您输入的序列号有误,您述而的名单将不能保持
双击到了:
00431E30 |. 68 B0354600 push ZMPK.004635B0 ; |Title = "注册许可证号"
00431E35 |. 68 80354600 push ZMPK.00463580 ; |Text = "您输入的许可证号有误,您输入的名单将不能保存。"
00431E3A |. 8B48 08 mov ecx,dword ptr ds:[eax+8] ; |
………………………………………………………………………………………………………………………………
再向上看:
00431D77 |. 6A 00 push 0 ; /lParam = NULL
00431D79 |. 8B51 08 mov edx,dword ptr ds:[ecx+8] ; |
00431D7C |. 8B0D CCF54600 mov ecx,dword ptr ds:[46F5CC] ; |
00431D82 |. 68 201F4300 push ZMPK.00431F20 ; |DlgProc = ZMPK.00431F20
00431D87 |. 8B8432 900B00>mov eax,dword ptr ds:[edx+esi+B90] ; |
00431D8E |. 50 push eax ; |hOwner
00431D8F |. 68 C0354600 push ZMPK.004635C0 ; |pTemplate = "CheckUse"
00431D94 |. 51 push ecx ; |hInst => NULL
00431D95 |. FF15 4CB24500 call dword ptr ds:[<&USER32.DialogBoxPar>; \此处是得到输入的输入码
00431D9B |. 85C0 test eax,eax
00431D9D |. 8B06 mov eax,dword ptr ds:[esi]
00431D9F |. 8B3D ECB14500 mov edi,dword ptr ds:[<&USER32.SendMessa>; USER32.SendMessageA
00431DA5 |. 0F95C2 setne dl
00431DA8 |. 8B48 08 mov ecx,dword ptr ds:[eax+8]
00431DAB |. 885424 10 mov byte ptr ss:[esp+10],dl
00431DAF |. 8BD0 mov edx,eax
00431DB1 |. 6A 00 push 0 ; /lParam = 0
00431DB3 |. 8D1C31 lea ebx,dword ptr ds:[ecx+esi] ; |
00431DB6 |. 68 33750000 push 7533 ; |压入一个错误参数7533为了得到一个错误的注册码
00431DBB |. 8B42 08 mov eax,dword ptr ds:[edx+8] ; |
00431DBE |. 68 11010000 push 111 ; |Message = WM_COMMAND
00431DC3 |. 8B8C30 900B00>mov ecx,dword ptr ds:[eax+esi+B90] ; |
00431DCA |. 51 push ecx ; |hWnd
00431DCB |. FFD7 call edi ; \产生一个错误的注册码 这里也可以跟进的一样的
00431DCD |. 3983 B4000000 cmp dword ptr ds:[ebx+B4],eax ; 比较你的输入码与错误的注册码是否相等
00431DD3 |. 0F84 81000000 je ZMPK.00431E5A ; 相等就完了(可能是迷惑破解吧)
00431DD9 |. 8B16 mov edx,dword ptr ds:[esi]
00431DDB |. 6A 00 push 0 ; /lParam = 0
00431DDD |. 68 32750000 push 7532 ; |压入一个错误参数7532为了得到一个错误的注册码
00431DE2 |. 68 11010000 push 111 ; |Message = WM_COMMAND
00431DE7 |. 8B42 08 mov eax,dword ptr ds:[edx+8] ; |
00431DEA |. 8B8C30 900B00>mov ecx,dword ptr ds:[eax+esi+B90] ; |
00431DF1 |. 8D1C30 lea ebx,dword ptr ds:[eax+esi] ; |
00431DF4 |. 51 push ecx ; |hWnd
00431DF5 |. FFD7 call edi ; \产生一个错误的注册码
00431DF7 |. 3983 B4000000 cmp dword ptr ds:[ebx+B4],eax ; 比较你的输入码与错误的注册码是否相等
00431DFD |. 74 5B je short ZMPK.00431E5A ; 相等就完了
00431DFF |. 8B93 900B0000 mov edx,dword ptr ds:[ebx+B90]
00431E05 |. 6A 00 push 0 ; /lParam = 0
00431E07 |. 68 31750000 push 7531 ; |压入一个正确参数7531为了得到一个正确的注册码
00431E0C |. 68 11010000 push 111 ; |Message = WM_COMMAND
00431E11 |. 52 push edx ; |hWnd
00431E12 |. FFD7 call edi ; \产生一个正确的注册码
00431E14 |. 8B0E mov ecx,dword ptr ds:[esi]
00431E16 |. 8B51 08 mov edx,dword ptr ds:[ecx+8]
00431E19 |. 398432 B40000>cmp dword ptr ds:[edx+esi+B4],eax ; 正确的注册码与你的输入码进行比较
00431E20 |. 74 38 je short ZMPK.00431E5A ; 此处一定要跳了
00431E22 |. C705 88344600>mov dword ptr ds:[463488],1
00431E2C |> 8B06 mov eax,dword ptr ds:[esi]
00431E2E |. 6A 30 push 30 ; /Style = MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL
00431E30 |. 68 B0354600 push ZMPK.004635B0 ; |Title = "注册许可证号"
00431E35 |. 68 80354600 push ZMPK.00463580 ; |Text = "您输入的许可证号有误,您输入的名单将不能保存。"
00431E3A |. 8B48 08 mov ecx,dword ptr ds:[eax+8] ; |
00431E3D |. 8B9431 900B00>mov edx,dword ptr ds:[ecx+esi+B90] ; |
00431E44 |. 52 push edx ; |hOwner
00431E45 |. FF15 90B24500 call dword ptr ds:[<&USER32.MessageBoxA>>; \显示出错信息
00431E4B |. 8B4424 10 mov eax,dword ptr ss:[esp+10]
00431E4F |. 5F pop edi
00431E50 |. 5B pop ebx
00431E51 |. 25 FF000000 and eax,0FF
00431E56 |. 5E pop esi
00431E57 |. C2 0400 retn 4
00431E5A |> C705 88344600>mov dword ptr ds:[463488],0 ; 跳这里再次计算注册码
00431E64 |. 8B06 mov eax,dword ptr ds:[esi]
00431E66 |. 8BD0 mov edx,eax
00431E68 |. 6A 00 push 0
00431E6A |. 8B48 08 mov ecx,dword ptr ds:[eax+8]
00431E6D |. 68 31750000 push 7531 ; 再压入一个正确参数7531为了得到一个正确的注册码
00431E72 |. 8B42 08 mov eax,dword ptr ds:[edx+8]
00431E75 |. 68 11010000 push 111
00431E7A |. 8D1C31 lea ebx,dword ptr ds:[ecx+esi]
00431E7D |. 8B8C30 900B00>mov ecx,dword ptr ds:[eax+esi+B90]
00431E84 |. 51 push ecx
00431E85 |. FFD7 call edi ; 产生一个正确的注册码 关键F7进入
00431E87 |. 3983 B4000000 cmp dword ptr ds:[ebx+B4],eax ; 比较了
00431E8D |. 74 4D je short ZMPK.00431EDC
00431E8F |. 8B16 mov edx,dword ptr ds:[esi]
00431E91 |. 6A 00 push 0
00431E93 |. 68 32750000 push 7532 ; 错误参数
00431E98 |. 68 11010000 push 111
00431E9D |. 8B42 08 mov eax,dword ptr ds:[edx+8]
00431EA0 |. 8B8C30 900B00>mov ecx,dword ptr ds:[eax+esi+B90]
00431EA7 |. 8D1C30 lea ebx,dword ptr ds:[eax+esi]
00431EAA |. 51 push ecx
00431EAB |. FFD7 call edi ; 错误注册码
00431EAD |. 3983 B4000000 cmp dword ptr ds:[ebx+B4],eax
00431EB3 |. 74 27 je short ZMPK.00431EDC
00431EB5 |. 8B93 900B0000 mov edx,dword ptr ds:[ebx+B90]
00431EBB |. 6A 00 push 0
00431EBD |. 68 33750000 push 7533
00431EC2 |. 68 11010000 push 111
00431EC7 |. 52 push edx
00431EC8 |. FFD7 call edi ; 错误注册码
00431ECA |. 8B0E mov ecx,dword ptr ds:[esi]
00431ECC |. 8B51 08 mov edx,dword ptr ds:[ecx+8]
00431ECF |. 398432 B40000>cmp dword ptr ds:[edx+esi+B4],eax
00431ED6 |.^ 0F85 50FFFFFF jnz ZMPK.00431E2C ; 如果是错误注册码就向上跳到错误中去
00431EDC |> C705 9C254700>mov dword ptr ds:[47259C],1 ; 走到这里成功
00431EE6 |. 8B06 mov eax,dword ptr ds:[esi]
00431EE8 |. 68 38314600 push ZMPK.00463138 ; ASCII "1
1"
00431EED |. 68 74354600 push ZMPK.00463574
00431EF2 |. 8B48 08 mov ecx,dword ptr ds:[eax+8]
00431EF5 |. 68 18354600 push ZMPK.00463518
00431EFA |. 68 0C354600 push ZMPK.0046350C
00431EFF |. 8B9431 900B00>mov edx,dword ptr ds:[ecx+esi+B90]
00431F06 |. B9 28244700 mov ecx,ZMPK.00472428
00431F0B |. 52 push edx
00431F0C |. E8 2F92FEFF call ZMPK.0041B140 ; 显示正确对话框
00431F11 |. 8B4424 10 mov eax,dword ptr ss:[esp+10]
00431F15 |. 5F pop edi
00431F16 |. 5B pop ebx
00431F17 |. 25 FF000000 and eax,0FF
00431F1C |. 5E pop esi
00431F1D \. C2 0400 retn 4
………………………………………………………………………………………………………………………………
F7进入关键00431E12 |. FFD7 call edi 其他错误的CALL也可以跟进的,一样的CALL
………………………………………………………………………………………………………………………………
77D15F22 U> 55 push ebp
77D15F23 8BEC mov ebp,esp
77D15F25 56 push esi
77D15F26 8B75 0C mov esi,dword ptr ss:[ebp+C]
77D15F29 F7C6 0000FEFF test esi,FFFE0000
77D15F2F 0F85 0AFD0200 jnz USER32.77D45C3F
77D15F35 8B4D 08 mov ecx,dword ptr ss:[ebp+8]
77D15F38 83F9 FF cmp ecx,-1
77D15F3B 0F84 BF320200 je USER32.77D39200
77D15F41 81F9 FFFF0000 cmp ecx,0FFFF
77D15F47 0F84 B3320200 je USER32.77D39200
77D15F4D E8 D2DAFFFF call USER32.77D13A24
77D15F52 85C0 test eax,eax
77D15F54 0F84 90280100 je USER32.77D287EA
77D15F5A 6A 01 push 1
77D15F5C FF75 14 push dword ptr ss:[ebp+14]
77D15F5F FF75 10 push dword ptr ss:[ebp+10]
77D15F62 56 push esi
77D15F63 50 push eax
77D15F64 E8 32F4FFFF call USER32.77D1539B F7进入它,走过之后就计算好了!
77D15F69 5E pop esi
77D15F6A 5D pop ebp
77D15F6B C2 1000 retn 10
……………………………………………………………………………………………………………………
77D15F64 E8 32F4FFFF call USER32.77D1539B
……………………………………………………………………………………………………………………
77D1539B 55 push ebp
77D1539C 8BEC mov ebp,esp
77D1539E 51 push ecx
77D1539F 51 push ecx
77D153A0 8065 FF 00 and byte ptr ss:[ebp-1],0
77D153A4 53 push ebx
77D153A5 56 push esi
77D153A6 8B75 08 mov esi,dword ptr ss:[ebp+8]
77D153A9 8B06 mov eax,dword ptr ds:[esi]
77D153AB 8065 0B 00 and byte ptr ss:[ebp+B],0
77D153AF 57 push edi
77D153B0 8B7D 0C mov edi,dword ptr ss:[ebp+C]
77D153B3 81FF E0030000 cmp edi,3E0
77D153B9 8945 F8 mov dword ptr ss:[ebp-8],eax
77D153BC 72 0C jb short USER32.77D153CA
77D153BE 81FF E8030000 cmp edi,3E8
77D153C4 0F86 3F150000 jbe USER32.77D16909
77D153CA E8 AAEDFFFF call USER32.77D14179
77D153CF 3B46 08 cmp eax,dword ptr ds:[esi+8]
77D153D2 0F85 31150000 jnz USER32.77D16909
77D153D8 F646 16 04 test byte ptr ds:[esi+16],4
77D153DC 0F85 27150000 jnz USER32.77D16909
77D153E2 64:A1 18000000 mov eax,dword ptr fs:[18]
77D153E8 8B88 E4060000 mov ecx,dword ptr ds:[eax+6E4]
77D153EE 8B49 0C mov ecx,dword ptr ds:[ecx+C]
77D153F1 0B88 F0060000 or ecx,dword ptr ds:[eax+6F0]
77D153F7 66:F7C1 2020 test cx,2020
77D153FC 0F85 07150000 jnz USER32.77D16909
77D15402 33C0 xor eax,eax
77D15404 8A46 16 mov al,byte ptr ds:[esi+16]
77D15407 C0E8 03 shr al,3
77D1540A F6D0 not al
77D1540C 33C9 xor ecx,ecx
77D1540E 33DB xor ebx,ebx
77D15410 83E0 01 and eax,1
77D15413 395D 18 cmp dword ptr ss:[ebp+18],ebx
77D15416 0F94C1 sete cl
77D15419 3BC8 cmp ecx,eax
77D1541B 0F85 92090000 jnz USER32.77D15DB3
77D15421 8B5E 64 mov ebx,dword ptr ds:[esi+64]
77D15424 2B5E 10 sub ebx,dword ptr ds:[esi+10]
77D15427 03DE add ebx,esi
77D15429 895D 0C mov dword ptr ss:[ebp+C],ebx
77D1542C E8 D0E5FFFF call USER32.77D13A01
77D15431 85C0 test eax,eax
77D15433 75 0E jnz short USER32.77D15443
77D15435 66:8B43 08 mov ax,word ptr ds:[ebx+8]
77D15439 66:3D A102 cmp ax,2A1
77D1543D 0F83 95FE0000 jnb USER32.77D252D8
77D15443 807D FF 00 cmp byte ptr ss:[ebp-1],0
77D15447 0F85 BC140000 jnz USER32.77D16909
77D1544D 8D5E 14 lea ebx,dword ptr ds:[esi+14]
77D15450 6A 01 push 1
77D15452 53 push ebx
77D15453 FF75 14 push dword ptr ss:[ebp+14]
77D15456 FF75 10 push dword ptr ss:[ebp+10]
77D15459 57 push edi
77D1545A FF75 F8 push dword ptr ss:[ebp-8]
77D1545D FF76 60 push dword ptr ds:[esi+60]
77D15460 FFB6 9C000000 push dword ptr ds:[esi+9C]
77D15466 E8 15E6FFFF call USER32.77D13A80 F7进入它,走过之后就计算好了!
77D1546B 8BC8 mov ecx,eax
77D1546D A1 60C0D677 mov eax,dword ptr ds:[77D6C060]
77D15472 F640 02 04 test byte ptr ds:[eax+2],4
77D15476 0F85 03DA0200 jnz USER32.77D42E7F
77D1547C 8BC1 mov eax,ecx
77D1547E 5F pop edi
77D1547F 5E pop esi
77D15480 5B pop ebx
77D15481 C9 leave
77D15482 C2 1400 retn 14
…………………………………………………………………………………………………………………………
进入77D15466 E8 15E6FFFF call USER32.77D13A80
…………………………………………………………………………………………………………………………
77D13A80 6A 30 push 30
77D13A82 68 704FD677 push USER32.77D64F70
77D13A87 E8 1DFFFFFF call USER32.77D139A9
77D13A8C 33DB xor ebx,ebx
77D13A8E 895D E4 mov dword ptr ss:[ebp-1C],ebx
77D13A91 64:A1 18000000 mov eax,dword ptr fs:[18]
77D13A97 8B80 08070000 mov eax,dword ptr ds:[eax+708]
77D13A9D 3BC3 cmp eax,ebx
77D13A9F 74 09 je short USER32.77D13AAA
77D13AA1 F600 04 test byte ptr ds:[eax],4
77D13AA4 0F85 C95E0000 jnz USER32.77D19973
77D13AAA 895D E0 mov dword ptr ss:[ebp-20],ebx
77D13AAD 33F6 xor esi,esi
77D13AAF 46 inc esi
77D13AB0 C745 CC 1400000>mov dword ptr ss:[ebp-34],14
77D13AB7 8975 D0 mov dword ptr ss:[ebp-30],esi
77D13ABA 33C0 xor eax,eax
77D13ABC 8D7D D4 lea edi,dword ptr ss:[ebp-2C]
77D13ABF AB stos dword ptr es:[edi]
77D13AC0 AB stos dword ptr es:[edi]
77D13AC1 AB stos dword ptr es:[edi]
77D13AC2 895D C8 mov dword ptr ss:[ebp-38],ebx
77D13AC5 395D E0 cmp dword ptr ss:[ebp-20],ebx
77D13AC8 75 15 jnz short USER32.77D13ADF
77D13ACA FF75 08 push dword ptr ss:[ebp+8]
77D13ACD 8D45 CC lea eax,dword ptr ss:[ebp-34]
77D13AD0 50 push eax
77D13AD1 FF15 7010D177 call dword ptr ds:[<&ntdll.RtlActivateAc>; ntdll.RtlActivateActivationContextUnsafeFast
77D13AD7 E8 06FFFFFF call USER32.77D139E2
77D13ADC 8945 C8 mov dword ptr ss:[ebp-38],eax
77D13ADF 895D FC mov dword ptr ss:[ebp-4],ebx
77D13AE2 395D C8 cmp dword ptr ss:[ebp-38],ebx
77D13AE5 74 1A je short USER32.77D13B01
77D13AE7 395D 24 cmp dword ptr ss:[ebp+24],ebx
77D13AEA 74 15 je short USER32.77D13B01
77D13AEC 68 D8C1D677 push USER32.77D6C1D8
77D13AF1 FF75 14 push dword ptr ss:[ebp+14]
77D13AF4 E8 62050000 call USER32.77D1405B
77D13AF9 85C0 test eax,eax
77D13AFB 0F85 186E0000 jnz USER32.77D1A919
77D13B01 33C0 xor eax,eax
77D13B03 8945 C4 mov dword ptr ss:[ebp-3C],eax
77D13B06 8B75 0C mov esi,dword ptr ss:[ebp+C]
77D13B09 8975 0C mov dword ptr ss:[ebp+C],esi
77D13B0C 3BC3 cmp eax,ebx
77D13B0E 0F85 A36D0000 jnz USER32.77D1A8B7
77D13B14 8BCE mov ecx,esi
77D13B16 B8 000000C0 mov eax,C0000000
77D13B1B 23C8 and ecx,eax
77D13B1D 3BC8 cmp ecx,eax
77D13B1F 0F84 8CB50300 je USER32.77D4F0B1
77D13B25 FF75 1C push dword ptr ss:[ebp+1C]
77D13B28 FF75 18 push dword ptr ss:[ebp+18]
77D13B2B FF75 14 push dword ptr ss:[ebp+14]
77D13B2E FF75 10 push dword ptr ss:[ebp+10]
77D13B31 56 push esi
77D13B32 E8 16FFFFFF call USER32.77D13A4D F7进入它,走过之后就计算好了!
77D13B37 8945 E4 mov dword ptr ss:[ebp-1C],eax
77D13B3A 834D FC FF or dword ptr ss:[ebp-4],FFFFFFFF
77D13B3E E8 0B000000 call USER32.77D13B4E
77D13B43 8B45 E4 mov eax,dword ptr ss:[ebp-1C]
77D13B46 E8 4DFEFFFF call USER32.77D13998
77D13B4B C2 2000 retn 20
…………………………………………………………………………………………………………………………
进入77D13B32 E8 16FFFFFF call USER32.77D13A4D
………………………………………………………………………………………………………………
77D13A4D 55 push ebp
77D13A4E 8BEC mov ebp,esp
77D13A50 56 push esi
77D13A51 57 push edi
77D13A52 53 push ebx
77D13A53 68 CDABBADC push DCBAABCD
77D13A58 56 push esi
77D13A59 FF75 18 push dword ptr ss:[ebp+18]
77D13A5C FF75 14 push dword ptr ss:[ebp+14]
77D13A5F FF75 10 push dword ptr ss:[ebp+10]
77D13A62 FF75 0C push dword ptr ss:[ebp+C]
77D13A65 FF55 08 call dword ptr ss:[ebp+8] F7进入它,发现已经从系统出来了!
77D13A68 817C24 04 CDABB>cmp dword ptr ss:[esp+4],DCBAABCD
77D13A70 0F85 CD150300 jnz USER32.77D45043
77D13A76 83C4 08 add esp,8
77D13A79 5B pop ebx
77D13A7A 5F pop edi
77D13A7B 5E pop esi
77D13A7C 5D pop ebp
77D13A7D C2 1400 retn 14
…………………………………………………………………………………………………………
进入77D13A65 FF55 08 call dword ptr ss:[ebp+8]
………………………………………………………………………………………………………………
00427310 . 8B4424 10 mov eax,dword ptr ss:[esp+10]
00427314 . 8B4C24 0C mov ecx,dword ptr ss:[esp+C]
00427318 . 8B5424 08 mov edx,dword ptr ss:[esp+8]
0042731C . 50 push eax ; /Arg5
0042731D . 8B4424 08 mov eax,dword ptr ss:[esp+8] ; |
00427321 . 51 push ecx ; |Arg4
00427322 . 8B0D F8274700 mov ecx,dword ptr ds:[4727F8] ; |
00427328 . 52 push edx ; |Arg3
00427329 . 50 push eax ; |Arg2
0042732A . 51 push ecx ; |Arg1 => 003D59D0
0042732B . E8 40F6FFFF call ZMPK.00426970 F7进入 ; \ZMPK.00426970
00427330 . C2 1000 retn 10
…………………………………………………………………………………………………………………
F7进入0042732B . E8 40F6FFFF call ZMPK.00426970 算法了!!
……………………………………………………………………………………………………………………
00426970 /$ 83EC 08 sub esp,8
00426973 |. 53 push ebx
00426974 |. 55 push ebp
00426975 |. 56 push esi
00426976 |. 57 push edi
00426977 |. C74424 10 000>mov dword ptr ss:[esp+10],0
0042697F |. E8 BC02FEFF call ZMPK.00406C40
00426984 |. 8B6C24 24 mov ebp,dword ptr ss:[esp+24]
00426988 |. 8B7C24 2C mov edi,dword ptr ss:[esp+2C]
0042698C |. 8B7424 28 mov esi,dword ptr ss:[esp+28]
00426990 |. 8B5C24 1C mov ebx,dword ptr ss:[esp+1C]
00426994 |. 81FD 11010000 cmp ebp,111 ; Switch (cases 0..111)
0042699A |. 894424 14 mov dword ptr ss:[esp+14],eax
0042699E |. 0F85 13010000 jnz ZMPK.00426AB7
004269A4 |. 8B4424 20 mov eax,dword ptr ss:[esp+20] ; Case 111 (WM_COMMAND) of switch 00426994
004269A8 |. 57 push edi
004269A9 |. 56 push esi
004269AA |. 50 push eax
004269AB |. 8BCB mov ecx,ebx
004269AD |. E8 8E270000 call ZMPK.00429140
004269B2 |. 81FE 33750000 cmp esi,7533
004269B8 |. 74 14 je short ZMPK.004269CE
004269BA |. 81FE 31750000 cmp esi,7531
004269C0 |. 74 0C je short ZMPK.004269CE
004269C2 |. 81FE 32750000 cmp esi,7532
004269C8 |. 0F85 B7010000 jnz ZMPK.00426B85
004269CE |> E8 6D02FEFF call ZMPK.00406C40
004269D3 |. 2B4424 14 sub eax,dword ptr ss:[esp+14]
004269D7 |. 3D D0070000 cmp eax,7D0
004269DC |. 7E 1D jle short ZMPK.004269FB 这里一定要用F4直接来到,不能一步一步
004269DE |. 8B4C24 20 mov ecx,dword ptr ss:[esp+20]
004269E2 |. 6A 00 push 0 ; /lParam = 0
004269E4 |. 6A 00 push 0 ; |wParam = 0
004269E6 |. 6A 10 push 10 ; |Message = WM_CLOSE
004269E8 |. 51 push ecx ; |hWnd
004269E9 |. FF15 E0B24500 call dword ptr ds:[<&USER32.PostMessageA>; \PostMessageA
004269EF |. 5F pop edi
004269F0 |. 5E pop esi
004269F1 |. 5D pop ebp
004269F2 |. 33C0 xor eax,eax
004269F4 |. 5B pop ebx
004269F5 |. 83C4 08 add esp,8
004269F8 |. C2 1400 retn 14
004269FB |> 81FE 33750000 cmp esi,7533 如果是参数7533就安下面的算法
00426A01 |. 75 33 jnz short ZMPK.00426A36
00426A03 |. 8B13 mov edx,dword ptr ds:[ebx]
00426A05 |. B9 00CA9A3B mov ecx,3B9ACA00
00426A0A |. 5F pop edi
00426A0B |. 5E pop esi
00426A0C |. 8B42 08 mov eax,dword ptr ds:[edx+8]
00426A0F |. 33D2 xor edx,edx
00426A11 |. 5D pop ebp
00426A12 |. 8B8418 B00000>mov eax,dword ptr ds:[eax+ebx+B0]
00426A19 |. 5B pop ebx
00426A1A |. 05 23057719 add eax,19770523
00426A1F |. 35 2D220F33 xor eax,330F222D
00426A24 |. F7D0 not eax
00426A26 |. 69C0 88366387 imul eax,eax,87633688
00426A2C |. F7F1 div ecx
00426A2E |. 8BC2 mov eax,edx
00426A30 |. 83C4 08 add esp,8
00426A33 |. C2 1400 retn 14
00426A36 |> 81FE 32750000 cmp esi,7532 如果是参数7532就安下面的算法
00426A3C |. 75 35 jnz short ZMPK.00426A73
00426A3E |. 8B13 mov edx,dword ptr ds:[ebx]
00426A40 |. B9 00CA9A3B mov ecx,3B9ACA00
00426A45 |. 5F pop edi
00426A46 |. 5E pop esi
00426A47 |. 8B42 08 mov eax,dword ptr ds:[edx+8]
00426A4A |. 33D2 xor edx,edx
00426A4C |. 5D pop ebp
00426A4D |. 8B8418 B00000>mov eax,dword ptr ds:[eax+ebx+B0]
00426A54 |. 5B pop ebx
00426A55 |. 05 23057719 add eax,19770523
00426A5A |. 35 2D220F33 xor eax,330F222D
00426A5F |. F7D0 not eax
00426A61 |. 69C0 33321387 imul eax,eax,87133233
00426A67 |. F7F1 div ecx
00426A69 |. 8BC2 mov eax,edx
00426A6B |. 03C1 add eax,ecx
00426A6D |. 83C4 08 add esp,8
00426A70 |. C2 1400 retn 14
00426A73 |> 81FE 31750000 cmp esi,7531 如果是参数7531就安下面的算法(正确的)
00426A79 |. 0F85 06010000 jnz ZMPK.00426B85
00426A7F |. 8B13 mov edx,dword ptr ds:[ebx]
00426A81 |. B9 00CA9A3B mov ecx,3B9ACA00 用于计算的参数1000000000
00426A86 |. 5F pop edi
00426A87 |. 5E pop esi
00426A88 |. 8B42 08 mov eax,dword ptr ds:[edx+8] 指针用于得到机器码
00426A8B |. 33D2 xor edx,edx 清零
00426A8D |. 5D pop ebp
00426A8E |. 8B8418 B00000>mov eax,dword ptr ds:[eax+ebx+B0] 得到我的机器码1010405983
00426A95 |. 5B pop ebx
00426A96 |. 05 23057719 add eax,19770523 机器码加上19770523(作者的生日?)
00426A9B |. 35 2D220F33 xor eax,330F222D 结果在与330F222D异或
00426AA0 |. F7D0 not eax 结果取反
00426AA2 |. 69C0 66922987 imul eax,eax,87299266 结果与87299266相乘
00426AA8 |. F7F1 div ecx 结果除以1000000000
00426AAA |. 8BC2 mov eax,edx 取它的余数
00426AAC |. 05 00943577 add eax,77359400 余数与77359400相加就是真正的注册码!
00426AB1 |. 83C4 08 add esp,8
00426AB4 |. C2 1400 retn 14
………………………………………………………………………………………………………………………………
算法总结:
得到机器码加上19770523的结果,再与330F222D,把结果取反,取反的结果与87299266相乘
结果除以1000000000取它的余数,余数与77359400相加就是真正的注册码
算法写出来了,注册机你自己搞定吧
……………………………………………………………………………………………………
我的机器码:1010405983
我的注册码:2503242208
…………………………………………………………………………………………………………
明码比较
也可以作内存注册机!
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!