因为学习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作个注册机吧