在 winsoftice 里下以下命令可以见到:
:d ds:eax
0167:006DF33C 34 34 34 34 34 34 34 34-34 34 34 34 34 34 00 00 44444444444444..
0167:006DF34C 80 00 BC 58 C8 F3 6D 00-7E 51 46 00 8C 29 47 00 ...X..m.~QF..)G.
0167:006DF35C 1C F3 6D 00 14 00 00 00-00 00 78 83 F5 10 00 00 ..m.......x.....
0167:006DF36C 00 00 00 00 A0 0E 08 00-00 00 00 00 00 00 00 00 ................
:d ds:edx
0167:006DF328 32 39 34 46 41 41 38 36-33 30 44 30 35 39 00 58 294FAA8630D059.X
0167:006DF338 80 00 00 00 34 34 34 34-34 34 34 34 34 34 34 34 ....444444444444
0167:006DF348 34 34 00 00 80 00 BC 58-C8 F3 6D 00 7E 51 46 00 44.....X..m.~QF.
0167:006DF358 8C 29 47 00 1C F3 6D 00-14 00 00 00 00 00 78 83 .)G...m.......x.
好了,来段 INI 文件把帮它做一个注册机吧!
[Options]
CommandLine=Decompile Winhelp.exe 这是被取注册码的 EXE 文件名
Mode=0 采用模式 0 读取注册码
First_Break_Address=40E4AF 程式的中断地址,它和 ICE 中见到的是一样的
First_Break_Address_Code=8A 中断程式的 1 Byte 代码,这个 8A 就是 015f:0040e4af 的 8A
First_Break_Address_Code_Lenth=2 中断行代码的长度(单位: byte )
Save_Code_Address=EDX 存放注册码的内存地址
生成后保存为 CRACKCODE.INI 文件,把 CRACKCODE.EXE 和 CRACKCODE.INI 一起 copy 到被注册的 软件的安装目录下,运行 CRACKCODE.EXE 。哦!被取注册码的软件也运行了,到注册的窗口去,随便输入足够数量的注册码,按确定,哦!跳出一个显示窗来,里面出现了你想要的正 确注册码了。是不是觉得很神奇呢!来试一试你就知道了!大家现在可以见到,用寄存器寻 址是多么好的一件事啊! 下面我们再来看一看 CrackCode2000 的另一个工作模式吧!以下是关于美萍网管大师 3.1 的注册
机的写法:
大家看一看这个软件的比较程式吧!
015f:00460759 8bd8 mov ebx,eax
015f:0046075b b87c074600 mov eax,0046077c
015f:00460760 e81f000000 call 00460784
015f:00460765 3bd8 cmp ebx,eax 这里的 ebx 就是放你台机器
015f:00460767 7507 jnz 00460770 的正确的注册码了
015f:00460769 b801000000 mov eax,00000001
015f:0046076e 5b pop ebx
015f:0046076f c3 ret
好我们来写注册机了:
[Options]
CommandLine=scon.exe 这是被取注册码的 EXE 文件名
Mode=1 采用模式 1 读取注册码
First_Break_Address=460765 程式的中断地址,它和 ICE 中见到的是一样的
First_Break_Address_Code=3B 中断程式的 1 Byte 代码,这个 3B 就是 015f:00460765 的 3B
First_Break_Address_Code_Lenth=2 中断行代码的长度(单位: byte )
Save_Code_Address=EBX 存放注册码的内存地址
大家看到了吗?今次 CrackCode2000 使用了模式 1 来读取了,因为今次的注册码不是直接用 ASCII 的形式放在内存中的,而是用数值的形式放在寄存器处的,所以这时就要用模式 1 了。 生成后保存为 CRACKCODE.INI 文件,把 CRACKCODE.EXE 和 CRACKCODE.INI 一起 copy 到被注册的 软件的安装目录下,运行 CRACKCODE.EXE 。哦!被取注册码的软件也运行了,哦!软件一运行 注册码就出来了!哈哈。。。。。。 好了,我们再来进一步地研究 CrackCode 的加强模式吧!这是正式版本才具有的,二重断点读取注册码,这是 CrackCode 的增强模式,它可以使用二次重点的方法,来达到的目的,大 家可能还不了解为什么要这样做吧!好,让我们看一看下面这个软件,你就明白这是多么 的重要啊! 下面的实现例子是大家熟悉的 Winzip7.0 !好了开始吧!我们找到了它的比较程式了:
015f:00457920 8a06 mov al,[esi] 输入的注册码
015f:00457922 46 inc esi
015f:00457923 8a27 mov ah,[edi] 正确的注册码
015f:00457925 47 inc edi
015f:00457926 38c4 cmp ah,al
015f:00457928 74f2 jz 0045791c
015f:0045792a 2c41 sub al,41
015f:0045792c 3c1a cmp al,1a
015f:0045792e 1ac9 sbb cl,cl
015f:00457930 80e120 and cl,20
015f:00457933 02c1 add al,cl
015f:00457935 0441 add al,41
015f:00457937 86e0 xchg ah,al
015f:00457939 2c41 sub al,41
015f:0045793b 3c1a cmp al,1a
015f:0045793d 1ac9 sbb cl,cl
015f:0045793f 80e120 and cl,20
015f:00457942 02c1 add al,cl
015f:00457944 0441 add al,41
015f:00457946 38e0 cmp al,ah
015f:00457948 74d2 jz 0045791c
我们在 winsoftice 中下以下的命令:
:d ds:esi
0167:0047D958 34 38 34 38 34 38 34 38-34 38 00 00 00 00 00 00 4848484848......
0167:0047D968 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0167:0047D978 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
:d ds:edi
0167:0072F41C 43 39 36 32 30 35 45 42-00 00 01 00 00 00 0A 00 C96205EB........
0167:0072F42C D0 00 36 18 DA F4 0C 00-2C 20 0C 00 CE 1F 1A 84 ..6....., ......
0167:0072F43C 3F 19 5C 84 97 0F 47 04-00 00 0A 00 00 00 0A 00 ?.\...G.........
看到了吗?那 ds:edi 放的就是你要的东西啊!
好了,我们先试一试用普通模式 0 来写注册机吧!
[Options]
CommandLine=winzip32.exe 这是被取注册码的 EXE 文件名
Mode=0 采用模式 1 读取注册码
First_Break_Address=457923 程式的中断地址,它和 ICE 中见到的是一样的
First_Break_Address_Code=8A 中断程式的 1 Byte 代码,这个 3B 就是 015f:00460765 的 3B
First_Break_Address_Code_Lenth=2 中断行代码的长度(单位: byte )
Save_Code_Address=EDI 存放注册码的内存地址
生成后保存为 CRACKCODE.INI 文件,把 CRACKCODE.EXE 和 CRACKCODE.INI 一起 copy 到被注册的 软件的安装目录下,运行 CRACKCODE.EXE 。哦! winzip 会说很多的 dll 找不到,不能正常运行。 哦!发生了什么事啊!好我们用 winsoftice 在那 cs:457923 下一个断点,重新运行 winzip , 哦!我们的 winsoftice 不断地中断,原来 winzip 的设计很特殊性,它会用比较注册码的程式来加载其它的 dll ,所以 CrackCode 的跟踪就不能正常地进行下去了。 好吧!我们再看一看程式吧!经过分析我们知道,上面的比较程式是由下面的程式调用去
做比较注册码的工作的。
015f:00407c14 50 push eax
015f:00407c15 57 push edi
015f:00407c16 e8ab000000 call 00407cc6 带过这个 Call 在上面的
015f:00407c1b 59 pop ecx 0167:0072F41C 址中注册
015f:00407c1c be58d94700 mov esi,0047d958 码就出来了。
015f:00407c21 59 pop ecx
015f:00407c22 8d85c0feffff lea eax,[ebp-0140]
015f:00407c28 56 push esi
015f:00407c29 50 push eax
015f:00407c2a e8d1fc0400 call 00457900 这个 Call 就是调用比较
015f:00407c2f f7d8 neg eax 注册码的 Call 了。
015f:00407c31 1bc0 sbb eax,eax
015f:00407c33 59 pop ecx
015f:00407c34 40 inc eax
015f:00407c35 59 pop ecx
015f:00407c36 a37cb04700 mov [0047b07c],eax
本来我们可以在上面出现了注册之后就找一个中断地址中断用模式 0 去取注册啊!但有一点你们切记,那是到了万不得意时才使用的,我们要尽可能地用寄存器寻址。所以我们使用增强模式来解决这个问题。好了,我们在出现了注册码和调用比较注册码程式的 Call 之间 找一个地址,但经过分析我选取 015f:00407c1c 这个地址,当然你也可以选择其它的。 下面大家看一看 INI 文件是如何写的: [Options]
CommandLine=winzip32.exe 这是被取注册码的 EXE 文件名
Mode=2 采用增强模式 2 读取注册码
First_Break_Address=407C1C 程式的中断地址 1 ,它和 ICE 中见到的是一样的
First_Break_Address_Code=BE 中断程式的 1 Byte 代码,这个 3B 就是 015f:00407c1c 的 BE
First_Break_Address_Code_Lenth=5 中断行代码的长度(单位: byte )
Second_Break_Address=457923 程式的中断地址 2 ,它和 ICE 中见到的是一样的
Second_Break_Address_Code_Lenth=2 中断行代码的长度(单位: byte )
Save_Code_Address=EDI 存放注册码的内存地址
生成后保存为 CRACKCODE.INI 文件,把 CRACKCODE.EXE 和 CRACKCODE.INI 一起 copy 到被注册的 软件的安装目录下,运行 CRACKCODE.EXE 。哦!被取注册码的软件也运行了,哦!软件一运行 注册码就出来了!哈哈。。。。。。