因为学习Dephi7,很长时间没来了,Guan shui一下,软件破解很简单。
软件名称:智能开关机 3.20
下载地址:http://www.shareware.cn/pub/5556.html
智能开关机能够在关机状态自动开启你的计算机,以及s3待机状态下唤醒计算机执行指定任务。
****主要功能****
・ 控制计算机从关机状态自动开启。
・ 在待机状态下自动唤醒计算机。
・ 在指定的时间运行指定程序、打开指定文档、打开指定网址以及关闭指定程序。
・ 在指定的时间调用系统默认程序播放mp3、wma、wav以及flash等声音文件。
・ 计算机开启后自动登陆系统以及锁定系统。
・ 在指定的时间关闭、重启系统,以及使系统进入待机、休眠状态。
破解作者:wofan[OCN]
可以免费试用30天!!!
软件作者E_mail:gwbsoft@163.com
主页网址http://www.gwbsoft.com
Borland Delphi 6.0 - 7.0
本机机器码:6A6LW00HC
本机注册码:654321
用OD载入:
开始吧:
先下断,初看一下:
004B7C42 |. E8 85CAF4FF call autoss.004046CC **************call autoss.004046CC F2在这里下断!
004B7C47 |. 0F84 BD010000 je autoss.004B7E0A
004B7C4D |. 8D55 E8 lea edx,dword ptr ss:[ebp-18]
004B7C50 |. 8B83 4C030000 mov eax,dword ptr ds:[ebx+34C]
004B7C56 |. E8 15E0F9FF call autoss.00455C70 *******得到注册码654321位数
004B7C5B |. 837D E8 00 cmp dword ptr ss:[ebp-18],0 ******得明显的,看看是否填入了注册码
004B7C5F |. 0F84 A5010000 je autoss.004B7E0A *****怎么能跳呢????
004B7C65 |. 8D55 E0 lea edx,dword ptr ss:[ebp-20]
004B7C68 |. 8B83 48030000 mov eax,dword ptr ds:[ebx+348]
004B7C6E |. E8 FDDFF9FF call autoss.00455C70 ******得到机器码6A6LW00HC位数9送EAX
004B7C73 |. 8B45 E0 mov eax,dword ptr ss:[ebp-20]
004B7C76 |. 8D4D E4 lea ecx,dword ptr ss:[ebp-1C]
004B7C79 |. BA 987E4B00 mov edx,autoss.004B7E98 ; ASCII "DS$%^TG" ****压栈一串ASCII
004B7C7E |. E8 51CA0200 call autoss.004E46D4 ******产生新串1:2B2IY47L@
004B7C83 |. 8B45 E4 mov eax,dword ptr ss:[ebp-1C]
004B7C86 |. 50 push eax
004B7C87 |. 8D55 D8 lea edx,dword ptr ss:[ebp-28]
004B7C8A |. 8B83 48030000 mov eax,dword ptr ds:[ebx+348]
004B7C90 |. E8 DBDFF9FF call autoss.00455C70 *****还是取机器码
004B7C95 |. 8B45 D8 mov eax,dword ptr ss:[ebp-28]
004B7C98 |. 8D55 DC lea edx,dword ptr ss:[ebp-24]
004B7C9B |. E8 1CCB0200 call autoss.004E47BC *****产生新串2:?I5HU44MG
004B7CA0 |. 8B55 DC mov edx,dword ptr ss:[ebp-24]
004B7CA3 |. 8D45 F8 lea eax,dword ptr ss:[ebp-8]
004B7CA6 |. 59 pop ecx *****弹出新串1
004B7CA7 |. E8 20C9F4FF call autoss.004045CC *****那么这里要么就该连接了
004B7CAC |. 8D55 D4 lea edx,dword ptr ss:[ebp-2C]
004B7CAF |. 8B83 4C030000 mov eax,dword ptr ds:[ebx+34C]
004B7CB5 |. E8 B6DFF9FF call autoss.00455C70 ****取注册码654321
004B7CBA |. 8B45 D4 mov eax,dword ptr ss:[ebp-2C]
***********************************
Stack ss:[0012F9F8]=00F878F0, (ASCII "654321")
eax=00000006
**********************************
004B7CBD |. 8B55 F8 mov edx,dword ptr ss:[ebp-8]
************************************
Stack ss:[0012FA1C]=00FBB014, (ASCII "?I5HU44MG2B2IY47L@") *****看一下,这就是连接后的字串,看这个经典样子,就知道它是真注册码了!!!
edx=00140608
***********************************
004B7CC0 |. E8 07CAF4FF call autoss.004046CC **************call autoss.004046CC 这里应该就是比较了吧!
004B7CC5 |. 74 57 je short autoss.004B7D1E **************Je 到:注册成功!
看看真注册码是出来了,今天主要是看算法的,那么就在下面两个地方下断,看个仔细。
004B7C7E |. E8 51CA0200 call autoss.004E46D4
004B7C9B |. E8 1CCB0200 call autoss.004E47BC
细看之一:
004B7C7E |. E8 51CA0200 call autoss.004E46D4
……
004E46E0 |. 8955 F8 mov dword ptr ss:[ebp-8],edx ; autoss.004B7E98 *****EDX是字串DS$%^TG的地址
004E46E3 |. 8945 FC mov dword ptr ss:[ebp-4],eax ****EAX是机器码:6A6LW00HC的地址
004E46E6 |. 8B45 FC mov eax,dword ptr ss:[ebp-4]
004E46E9 |. E8 8200F2FF call autoss.00404770
004E46EE |. 8B45 F8 mov eax,dword ptr ss:[ebp-8]
004E46F1 |. E8 7A00F2FF call autoss.00404770
004E46F6 |. 33C0 xor eax,eax
004E46F8 |. 55 push ebp
004E46F9 |. 68 9E474E00 push autoss.004E479E
004E46FE |. 64:FF30 push dword ptr fs:[eax]
004E4701 |. 64:8920 mov dword ptr fs:[eax],esp
004E4704 |. 837D F8 00 cmp dword ptr ss:[ebp-8],0
004E4708 |. 75 0D jnz short autoss.004E4717
004E470A |. 8D45 F8 lea eax,dword ptr ss:[ebp-8]
004E470D |. BA B4474E00 mov edx,autoss.004E47B4 ; ASCII "TG^u"
004E4712 |. E8 41FCF1FF call autoss.00404358
004E4717 |> BE 01000000 mov esi,1 *****ESI=1
004E471C |. 8B45 FC mov eax,dword ptr ss:[ebp-4] *****机器码
004E471F |. E8 5CFEF1FF call autoss.00404580 *****取机器码位数9送EAX
004E4724 |. 8BF8 mov edi,eax
004E4726 |. 85FF test edi,edi
004E4728 |. 7E 4E jle short autoss.004E4778
004E472A |. BB 01000000 mov ebx,1 **** EBX=1
004E472F |> 8B45 FC /mov eax,dword ptr ss:[ebp-4] ****机器码6A6LW00HC
004E4732 |. 8A4418 FF |mov al,byte ptr ds:[eax+ebx-1] ****很典型的取ASCII行为!第一位是6,ASCII码是36送AL
004E4736 |. 24 0F |and al,0F ****屏蔽高位,取低位,6
004E4738 |. 8B55 F8 |mov edx,dword ptr ss:[ebp-8] ****字串DS$%^TG
004E473B |. 8A5432 FF |mov dl,byte ptr ds:[edx+esi-1] ***第一次:edx+esi-1=EDX 指向第一位D,它的ASCII是44
004E473F |. 80E2 0F |and dl,0F ****同样,取低位4
004E4742 |. 32C2 |xor al,dl ****异或一下,6 xor 4=2
004E4744 |. 8845 F3 |mov byte ptr ss:[ebp-D],al ****还是存起来吧
004E4747 |. 8D45 FC |lea eax,dword ptr ss:[ebp-4] ****机器码地址传
004E474A |. E8 8900F2FF |call autoss.004047D8
004E474F |. 8B55 FC |mov edx,dword ptr ss:[ebp-4]
004E4752 |. 8A541A FF |mov dl,byte ptr ds:[edx+ebx-1] ****因为开始时,EBX=1,这里还是取机器码的首位6(36)
004E4756 |. 80E2 F0 |and dl,0F0 ****这一回屏敝低位,使低位归零!
004E4759 |. 8A4D F3 |mov cl,byte ptr ss:[ebp-D] ****byte ptr ss:[ebp-D]存的是刚才异或的值
004E475C |. 02D1 |add dl,cl ****Add,加起来,30+2=32
004E475E |. 885418 FF |mov byte ptr ds:[eax+ebx-1],dl ****就在原地修改吧,在FPU中可以看到变化(6变成了2),相当于C语言中的有关指针的作用!地址传递而不是By val)
004E4762 |. 46 |inc esi ****ESI++ ,使指向下一个目标!
004E4763 |. 8B45 F8 |mov eax,dword ptr ss:[ebp-8] ****字串:DS$%^TG
004E4766 |. E8 15FEF1FF |call autoss.00404580 ****取字串:DS$%^TG 位数7送EAX
004E476B |. 3BF0 |cmp esi,eax ****比一比,看看这个字串是否使用完了吗?
004E476D |. 7E 05 |jle short autoss.004E4774 ****还没有,就跳过下面一句:mov esi,1 然后继续
004E476F |. BE 01000000 |mov esi,1 ****否则使ESI=1,重新使用字串DS$%^TG
004E4774 |> 43 |inc ebx *****EBX++ (EBX用来作指针的)
004E4775 |. 4F |dec edi *****EDI-- (EDI保存的是机器码的位数)EDI控制总循环
004E4776 |.^ 75 B7 \jnz short autoss.004E472F 当EDI为零时,就结束循环。
004E4778 |> 8B45 F4 mov eax,dword ptr ss:[ebp-C]
004E477B |. 8B55 FC mov edx,dword ptr ss:[ebp-4]
004E477E |. E8 91FBF1FF call autoss.00404314
004E4783 |. 33C0 xor eax,eax
004E4785 |. 5A pop edx
004E4786 |. 59 pop ecx
004E4787 |. 59 pop ecx
004E4788 |. 64:8910 mov dword ptr fs:[eax],edx
004E478B |. 68 A5474E00 push autoss.004E47A5
004E4790 |> 8D45 F8 lea eax,dword ptr ss:[ebp-8]
004E4793 |. BA 02000000 mov edx,2
004E4798 |. E8 47FBF1FF call autoss.004042E4
004E479D \. C3 retn
细看之二:
004B7C9B |. E8 1CCB0200 call autoss.004E47BC
……
004E47CC |. 8945 FC mov dword ptr ss:[ebp-4],eax *****机器码6A6LW00HC
004E47CF |. 8B45 FC mov eax,dword ptr ss:[ebp-4]
004E47D2 |. E8 99FFF1FF call autoss.00404770
004E47D7 |. 33C0 xor eax,eax
004E47D9 |. 55 push ebp
004E47DA |. 68 91484E00 push autoss.004E4891
004E47DF |. 64:FF30 push dword ptr fs:[eax]
004E47E2 |. 64:8920 mov dword ptr fs:[eax],esp
004E47E5 |. 837D FC 00 cmp dword ptr ss:[ebp-4],0
004E47E9 |. 75 0A jnz short autoss.004E47F5
004E47EB |. 8B45 F8 mov eax,dword ptr ss:[ebp-8]
004E47EE |. E8 CDFAF1FF call autoss.004042C0
004E47F3 |. EB 79 jmp short autoss.004E486E
004E47F5 |> 8D45 F4 lea eax,dword ptr ss:[ebp-C]
004E47F8 |. BA A8484E00 mov edx,autoss.004E48A8 ; ASCII "a1b5JHT^UJKLKj8dk9l0welks%^$#@)(" ****一个字串!!!
004E47FD |. E8 56FBF1FF call autoss.00404358
004E4802 |. 8D45 F0 lea eax,dword ptr ss:[ebp-10]
004E4805 |. E8 B6FAF1FF call autoss.004042C0
004E480A |. 8B45 FC mov eax,dword ptr ss:[ebp-4]
004E480D |. E8 6EFDF1FF call autoss.00404580 *****取机器码的位数9送EAX
004E4812 |. 8BF0 mov esi,eax *****复制一下,ESI=EAX=9
004E4814 |. 85F6 test esi,esi
004E4816 |. 7E 4B jle short autoss.004E4863
004E4818 |. BB 01000000 mov ebx,1 *****EBX=1
004E481D |> 8B45 F4 /mov eax,dword ptr ss:[ebp-C] *****字串:a1b5JHT^UJKLKj8dk9l0welks%^$#@)(
004E4820 |. E8 5BFDF1FF |call autoss.00404580 *****取它的位数0x20
004E4825 |. 50 |push eax *****把位数0x20压栈
004E4826 |. 8BC3 |mov eax,ebx *****EAX=EBX=1
004E4828 |. 5A |pop edx *****弹出位数0x20到EDX
004E4829 |. 8BCA |mov ecx,edx *****ECX=EDX=0x20
004E482B |. 99 |cdq *****双字变四字
004E482C |. F7F9 |idiv ecx *****取余 ,第一次: 1 idiv 0x20余数保存在EDX,EDX=1
004E482E |. 8BFA |mov edi,edx *****余数是要有用的,复制到EDI,EDI=EDX=1
004E4830 |. 47 |inc edi *****再EDI++ EDI=EDI+1=1+1=2 用它来确定,下面该取那一个位置的字符
004E4831 |. 8B45 F4 |mov eax,dword ptr ss:[ebp-C] ****字串:a1b5JHT^UJKLKj8dk9l0welks%^$#@)(
004E4834 |. 0FB64438 FF |movzx eax,byte ptr ds:[eax+edi-1] ****按EDI中的值取其ASCII,因为刚才得到EDI=2,那么第一次,这里取的是1的ASCII码31送EAX
004E4839 |. B9 0A000000 |mov ecx,0A **** ECX=A
004E483E |. 33D2 |xor edx,edx ****EDX清零
004E4840 |. F7F1 |div ecx ****Div,除一下,31 div A,余数保存在EDX,EDX=9
004E4842 |. 8B45 FC |mov eax,dword ptr ss:[ebp-4] *****机器码6A6LW00HC
004E4845 |. 0FB64418 FF |movzx eax,byte ptr ds:[eax+ebx-1] *****逐位其ASCII,第一位是36(6)
004E484A |. 33D0 |xor edx,eax *****与刚才div得到的余数异或,第一次,9 xor 36=3F
004E484C |. 8D45 EC |lea eax,dword ptr ss:[ebp-14]
004E484F |. E8 54FCF1FF |call autoss.004044A8
004E4854 |. 8B55 EC |mov edx,dword ptr ss:[ebp-14]
004E4857 |. 8D45 F0 |lea eax,dword ptr ss:[ebp-10]
004E485A |. E8 29FDF1FF |call autoss.00404588
004E485F |. 43 |inc ebx ****EBX++ (EBX是指针)
004E4860 |. 4E |dec esi ****ESI-- (ESI保存机器码位数9)
004E4861 |.^ 75 BA \jnz short autoss.004E481D ****当ESI=0时,就结束循环
**********************************
虽然简单,也总结一下:
a1b5JHT^UJKLKj8dk9l0welks%^$#@)(
为什么不直接从第二位开始?
31 mod A=9
62 mod A=8
35 mod A=3
4A mod A=4
……
机器码:6A6LW00HC
36 xor 9=3F(?)
41 xor 8=49(I)
36 xor 3=35(5)
4C xor 4=48(H)
……
得到另一个字串(注册码的另一部分):?I5HU44MG
**********************************
004E4863 |> 8B45 F8 mov eax,dword ptr ss:[ebp-8]
004E4866 |. 8B55 F0 mov edx,dword ptr ss:[ebp-10]
004E4869 |. E8 A6FAF1FF call autoss.00404314
004E486E |> 33C0 xor eax,eax
004E4870 |. 5A pop edx
004E4871 |. 59 pop ecx
004E4872 |. 59 pop ecx
004E4873 |. 64:8910 mov dword ptr fs:[eax],edx
004E4876 |. 68 98484E00 push autoss.004E4898 ; ASCII "_^[?]?
004E487B |> 8D45 EC lea eax,dword ptr ss:[ebp-14]
004E487E |. BA 03000000 mov edx,3
004E4883 |. E8 5CFAF1FF call autoss.004042E4
004E4888 |. 8D45 FC lea eax,dword ptr ss:[ebp-4]
004E488B |. E8 30FAF1FF call autoss.004042C0
004E4890 \. C3 retn
总结,超级容易,好像与固定注册码没有区别。
注册机器码:6A6LW00HC
有效注册码:?I5HU44MG2B2IY47L@
注册成功,注册码会记录在wake.ini中。
[reg]
name=6A6LW00HC
code=?I5HU44MG2B2IY47L@
输入真正的注册码,在原来的Edit中出现:已注册
最近在学Delphi,就使用Dephi作个注册机吧
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)