找回密码
 加入网盟
分割线

a4857390

3

官方精品推荐
第三节 注册机制作工具
1、CrackCode2000使用介绍
以前我们写注册机时,一般都要了解程式的算法,之后用汇编语言或 C 语言来把算法还原,这样做一个注册机一般都有要花不少的时间,而且要对汇编语言和编程有比较高的要求,所以对于初学者来说,是一件很难的事情,对于不少的初学者 ,有时他们能在内存中找到注册码,但却没有能力写出注册机来,这大大削弱了他 们的破解积极性,但还有更可恶的事,就是目前有不少的程式,它的注册码都与硬 件有关,就是在每一台机上安装都有一个机身码,要把这个机身码 E-MAIL 给作者,作者把收到的机身码用注册程式算出注册码后再寄回给用户,这样做使得软件的防 复制方面加强了,但造成了不少用户的麻烦,因为只要用户一重装系统或升级主板 ,就要重新去注册了。对于这种程式,一般初学者只能在内存中找到自己机器的注 册码,但这种注册码到了其它的机器上又不能用了,而自己又没有办法写出注册机来,为了解决这方面的问题,我写了一个小软件,它可以从另一进程内存中取出注 册码来,显示出来,而不需要你去了解注册程式的算法,但它的应用面是很有限的, 只能对付符合以下条件的软件:
一、必须在内存中或在寄存器中可以找到正确的注册码;
二、被取注册码的软件不能反跟踪程式;
三、被取注册码的软件的比较部分程式是静态的存在的;
四、注册码比较程式只作比较注册码使用。

好了,讲了这么多,不如来个例子说明一下如何使用它吧!哦对了,大家还不知那 个东西是什么呢?它叫 CrackCode2000 啊!
以下是一个软件的注册码比较程式,大家不要问我怎么样得到了,大家只要听下去 就可以了。

015F004149D2 8A06 MOV AL[ESI] 这里放你的输入的注册码
015F004149D4 84C0 TEST ALAL
015F004149D6 740D JZ 004149E5
015F004149D8 8A11 MOV DL[ECX] 这里放正确的注册码
015F004149DA 41 INC ECX
015F004149DB 46 INC ESI
015F004149DC 3AC2 CMP ALDL
015F004149DE 751F JNZ 004149FF
015F004149E0 803900 CMP BYTE PTR [ECX]00
015F004149E3 75ED JNZ 004149D2
015F004149E5 803900 CMP BYTE PTR [ECX]00
015F004149E8 7515 JNZ 004149FF
015F004149EA 803E00 CMP BYTE PTR [ESI]00
015F004149ED 7510 JNZ 004149FF
015F004149EF B801000000 MOV EAX00000001 最后正确就把 EAX=1
015F004149F4 5F POP EDI
015F004149F5 5E POP ESI
015F004149F6 5D POP EBP
015F004149F7 5B POP EBX
015F004149F8 81C460030000 ADD ESP00000360
015F004149FE C3 RET

好了,大家在 Winsoftice 下以下的命令可以看到:
d esi
01670041F1F8 34 38 34 38 34 38 34 38-34 38 34 38 00 00 00 00 484848484848....
01670041F208 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
01670041F218 04 0D 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
01670041F228 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
01670041F238 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
01670041F248 00 00 00 00 00 00 00 00-00 C0 00 00 0A 04 00 00 ................
01670041F258 04 00 00 00 0A 00 00 00-01 00 00 00 90 03 CA 00 ................
01670041F268 00 00 00 00 D0 03 CA 00-00 00 00 00 00 00 00 00 ................
d ecx
01670066F3E4 58 51 4D 50 5A 43 57 58-54 45 52 53 00 01 08 00 XQMPZCWXTERS....
01670066F3F4 9A EE 8B 17 E3 A4 00 00-10 00 E0 2C 00 00 00 01 ...............
01670066F404 00 03 00 00 00 00 00 00-80 01 AB 01 8D 01 9C 01 ................
01670066F414 00 00 AB 01 8D 01 00 00-80 01 9C 01 8C 01 A4 01 ................
01670066F424 8D 01 9C 01 8C 01 A4 01-8D 01 04 00 00 00 B6 0C ................
01670066F434 00 A9 52 FB 83 2A D1 78-21 88 73 DA A2 0B F0 59 ..R...x!.s....Y
01670066F444 65 CC 37 9E E6 4F B4 1D-44 ED 16 BF C7 6E 95 3C e.7..O..D....n.
01670066F454 ED 44 BF 16 6E C7 3C 95-CC 65 9E 37 4F E6 1D B4 .D..n...e.7O...

见到了吧!那个 XQMPZCWXTERS 就是正确的注册码了,但如果我们用以前的方法来写注册机, 就要去分析前面的程式了,但我们今次不是用这种方法来制作,而是用 CRACKCODE 来做,这样大家可以见到用 CRACKCODE 来做注册机实在是太方便了,太简单了! 好,我们为 CRACKCODE 来写一个 INI 文件吧!
第一种写法(这是一种不提倡的写法!):
内存直接寻址的方法:
[Options]
CommandLine=Axplorer.exe 这是被取注册码的 EXE 文件名
Mode=0 采用模式 0 读取注册码
First_Break_Address=4149D2 程式的中断地址,它和 ICE 中见到的是一样的
First_Break_Address_Code=8A 中断程式的 1 Byte 代码,这个 8A 就是 015F004149D2 的 8A
First_Break_Address_Code_Lenth=2 中断行代码的长度(单位: byte )
Save_Code_Address=66F3E4 存放注册码的内存地址

第二种写法(这种值得推荐!)
寄存器间接寻址的方法:
[Options]
CommandLine=test.exe 这是被取注册码的 EXE 文件名(化名)
Mode=0 取用模式 0 读取注册码
First_Break_Address=4149D2 程式的中断地址,它和 ICE 中见到的是一样的
First_Break_Address_Code=8A 中断程式的 1 Byte 代码,这个 8A 就是 015F004149D2 的 8A
First_Break_Address_Code_Lenth=2 中断行代码的长度(单位: byte )
Save_Code_Address=ECX 存放注册码的内存地址,这个 ECX 是从 015F004149D8 来
的,大家见到了吧!这和上前的方法相差就只是这句,
当你使用了这句,就不怕软件是否被压缩过了。
注意:
目前 CRACKCODE2000 对所中断地址的代码长度已经是无有要求的,只要把长度写进 INI
就可以了!
015F004149D2 8A06 MOV AL[ESI] 本行代码为 2 Bytes
015F004149DA 41 INC ECX 本行代码为 1 Byte
015F004149E0 803900 CMP BYTE PTR [ECX]00 本行代码为 3 Bytes

生成后保存为 CRACKCODE.INI 文件,把 CRACKCODE.EXE 和 CRACKCODE.INI 一起 copy 到被注册的 软件的安装目录下,运行 CRACKCODE.EXE 。哦!被取注册码的软件也运行了,到注册的窗口去,输入一个名字,随便输入注册码,按确定,哦!跳出一个显示窗来,里面出现了你想要的正确注册码了。是不是觉得很神奇呢!来试一试你就知道了!
好了,下面我再为大家显示 CrackCode2000 的另一种工作模式吧!
下面是 Decompile Winhelp 的注册机的写法,这个软件是加了壳的软件,我们来看一看加了壳 的软件对于 CrackCode2000 是否有影响 现在我把它注册码的部分那出来给大家看一看吧!而且它的注册码和硬件是有关系的,所以要想别人可以注册,就一定要写出注册机了!
下面就是它的比较程式了:
015f0040e4a9 8d45c0 lea eax[ebp-40]
015f0040e4ac 8d55ac lea edx[ebp-54]
015f0040e4af 8a08 mov cl[eax] dseax 放的是你输入的注册码
015f0040e4b1 3a0a cmp cl[edx] dsedx 放的是正确的注册码
015f0040e4b3 7516 jnz 0040e4cb
015f0040e4b5 84c9 test clcl
015f0040e4b7 746e jz 0040e527
015f0040e4b9 8a4801 mov cl[eax+01]
015f0040e4bc 3a4a01 cmp cl[edx+01]
015f0040e4bf 750a jnz 0040e4cb
015f0040e4c1 83c002 add eax02
015f0040e4c4 83c202 add edx02
015f0040e4c7 84c9 test clcl
015f0040e4c9 75e4 jnz 0040e4af
015f0040e4cb 745a jz 0040e527

在 winsoftice 里下以下命令可以见到:
d dseax
0167006DF33C 34 34 34 34 34 34 34 34-34 34 34 34 34 34 00 00 44444444444444..
0167006DF34C 80 00 BC 58 C8 F3 6D 00-7E 51 46 00 8C 29 47 00 ...X..m.~QF..)G.
0167006DF35C 1C F3 6D 00 14 00 00 00-00 00 78 83 F5 10 00 00 ..m.......x.....
0167006DF36C 00 00 00 00 A0 0E 08 00-00 00 00 00 00 00 00 00 ................
d dsedx
0167006DF328 32 39 34 46 41 41 38 36-33 30 44 30 35 39 00 58 294FAA8630D059.X
0167006DF338 80 00 00 00 34 34 34 34-34 34 34 34 34 34 34 34 ....444444444444
0167006DF348 34 34 00 00 80 00 BC 58-C8 F3 6D 00 7E 51 46 00 44.....X..m.~QF.
0167006DF358 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 就是 015f0040e4af 的 8A
First_Break_Address_Code_Lenth=2 中断行代码的长度(单位: byte )
Save_Code_Address=EDX 存放注册码的内存地址

生成后保存为 CRACKCODE.INI 文件,把 CRACKCODE.EXE 和 CRACKCODE.INI 一起 copy 到被注册的 软件的安装目录下,运行 CRACKCODE.EXE 。哦!被取注册码的软件也运行了,到注册的窗口去,随便输入足够数量的注册码,按确定,哦!跳出一个显示窗来,里面出现了你想要的正 确注册码了。是不是觉得很神奇呢!来试一试你就知道了!大家现在可以见到,用寄存器寻 址是多么好的一件事啊!
下面我们再来看一看 CrackCode2000 的另一个工作模式吧!以下是关于美萍网管大师 3.1 的注册
机的写法:
大家看一看这个软件的比较程式吧!
015f00460759 8bd8 mov ebxeax
015f0046075b b87c074600 mov eax0046077c
015f00460760 e81f000000 call 00460784
015f00460765 3bd8 cmp ebxeax 这里的 ebx 就是放你台机器
015f00460767 7507 jnz 00460770 的正确的注册码了
015f00460769 b801000000 mov eax00000001
015f0046076e 5b pop ebx
015f0046076f c3 ret
分享至 : QQ空间
收藏

4 个回复

倒序浏览
a4857390 3 2012-2-3 19:30:10
2#
好我们来写注册机了:


[Options]

CommandLine=scon.exe 这是被取注册码的 EXE 文件名

Mode=1 采用模式 1 读取注册码

First_Break_Address=460765 程式的中断地址,它和 ICE 中见到的是一样的

First_Break_Address_Code=3B 中断程式的 1 Byte 代码,这个 3B 就是 015f00460765 的 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 !好了开始吧!我们找到了它的比较程式了:

015f00457920 8a06 mov al[esi] 输入的注册码

015f00457922 46 inc esi

015f00457923 8a27 mov ah[edi] 正确的注册码

015f00457925 47 inc edi

015f00457926 38c4 cmp ahal

015f00457928 74f2 jz 0045791c

015f0045792a 2c41 sub al41

015f0045792c 3c1a cmp al1a

015f0045792e 1ac9 sbb clcl

015f00457930 80e120 and cl20

015f00457933 02c1 add alcl

015f00457935 0441 add al41

015f00457937 86e0 xchg ahal

015f00457939 2c41 sub al41

015f0045793b 3c1a cmp al1a

015f0045793d 1ac9 sbb clcl

015f0045793f 80e120 and cl20

015f00457942 02c1 add alcl

015f00457944 0441 add al41

015f00457946 38e0 cmp alah

015f00457948 74d2 jz 0045791c

我们在 winsoftice 中下以下的命令:

d dsesi

01670047D958 34 38 34 38 34 38 34 38-34 38 00 00 00 00 00 00 4848484848......

01670047D968 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

01670047D978 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

d dsedi

01670072F41C 43 39 36 32 30 35 45 42-00 00 01 00 00 00 0A 00 C96205EB........

01670072F42C D0 00 36 18 DA F4 0C 00-2C 20 0C 00 CE 1F 1A 84 ..6..... ......

01670072F43C 3F 19 5C 84 97 0F 47 04-00 00 0A 00 00 00 0A 00 ....G.........

看到了吗?那 dsedi 放的就是你要的东西啊!

好了,我们先试一试用普通模式 0 来写注册机吧!

[Options]

CommandLine=winzip32.exe 这是被取注册码的 EXE 文件名

Mode=0 采用模式 1 读取注册码

First_Break_Address=457923 程式的中断地址,它和 ICE 中见到的是一样的

First_Break_Address_Code=8A 中断程式的 1 Byte 代码,这个 3B 就是 015f00460765 的 3B

First_Break_Address_Code_Lenth=2 中断行代码的长度(单位: byte )

Save_Code_Address=EDI 存放注册码的内存地址


生成后保存为 CRACKCODE.INI 文件,把 CRACKCODE.EXE 和 CRACKCODE.INI 一起 copy 到被注册的 软件的安装目录下,运行 CRACKCODE.EXE 。哦! winzip 会说很多的 dll 找不到,不能正常运行。

哦!发生了什么事啊!好我们用 winsoftice 在那 cs457923 下一个断点,重新运行 winzip , 哦!我们的 winsoftice 不断地中断,原来 winzip 的设计很特殊性,它会用比较注册码的程式来加载其它的 dll ,所以 CrackCode 的跟踪就不能正常地进行下去了。

好吧!我们再看一看程式吧!经过分析我们知道,上面的比较程式是由下面的程式调用去

做比较注册码的工作的。

015f00407c14 50 push eax

015f00407c15 57 push edi

015f00407c16 e8ab000000 call 00407cc6 带过这个 Call 在上面的

015f00407c1b 59 pop ecx 01670072F41C 址中注册

015f00407c1c be58d94700 mov esi0047d958 码就出来了。

015f00407c21 59 pop ecx

015f00407c22 8d85c0feffff lea eax[ebp-0140]

015f00407c28 56 push esi

015f00407c29 50 push eax

015f00407c2a e8d1fc0400 call 00457900 这个 Call 就是调用比较

015f00407c2f f7d8 neg eax 注册码的 Call 了。

015f00407c31 1bc0 sbb eaxeax

015f00407c33 59 pop ecx

015f00407c34 40 inc eax

015f00407c35 59 pop ecx

015f00407c36 a37cb04700 mov [0047b07c]eax


本来我们可以在上面出现了注册之后就找一个中断地址中断用模式 0 去取注册啊!但有一点你们切记,那是到了万不得意时才使用的,我们要尽可能地用寄存器寻址。所以我们使用增强模式来解决这个问题。好了,我们在出现了注册码和调用比较注册码程式的 Call 之间 找一个地址,但经过分析我选取 015f00407c1c 这个地址,当然你也可以选择其它的。 下面大家看一看 INI 文件是如何写的:
[Options]

CommandLine=winzip32.exe 这是被取注册码的 EXE 文件名

Mode=2 采用增强模式 2 读取注册码

First_Break_Address=407C1C 程式的中断地址 1 ,它和 ICE 中见到的是一样的

First_Break_Address_Code=BE 中断程式的 1 Byte 代码,这个 3B 就是 015f00407c1c 的 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 。哦!被取注册码的软件也运行了,哦!软件一运行 注册码就出来了!哈哈。。。。。。

作者: Ru Feng

2、Keymake使用(作者:刘健英 知软网)

  这个注册机编写器以前一直是我自己为写注册机而编写的,通过它只要略有汇编基础很快就能写出一个注册机。而不需要再过多的了解程序的指令算法。 整个程序体实际上只是我用汇编写的一个模板。所以大家也可以在其中自定义自己的界面和提示信息。可以用VC++或BC++等资源编辑工具自行修改key1.res资源文件,但请不要修改它们对应的ID号。

  点击此下载例子程序,主要用来举例说明这个程序的使用(我先假设自己并不太懂Win32汇编)。

   通过动态调试或反汇编例子程序可以得到以下注册码的计算过程:

xxxx00401077 CALL GetCommandLineA
xxxx0040107C CMP BYTE PTR [EAX]22
xxxx0040107F JNZ 401082
xxxx00401081 INC EAX
xxxx00401082 MOV CXWORD PTR [EAX]
xxxx00401085 MOV WORD PTR [0040306C]CX
xxxx0040108C MOV WORD PTR [0040306E]5C
xxxx00401095 PUSH 0
xxxx00401097 PUSH 0
xxxx00401099 PUSH 0
xxxx0040109B PUSH 0
xxxx0040109D PUSH DWORD 00403058
xxxx004010A2 PUSH 0
xxxx004010A4 PUSH 0
xxxx004010A6 PUSH DWORD 0040306C
xxxx004010AB CALL GetVolumeInformationA
…………    …………
…………    …………
xxxx0040111E MOV EAX1
xxxx00401123 CPUID
xxxx00401125 MOV ECXDWORD PTR [00403058]
xxxx0040112B XOR EDXEDX
xxxx0040112D MUL ECX
xxxx0040112F ADD EAXEDX
xxxx00401131 PUSH EAX
xxxx00401132 PUSH DWORD 0040303E    ; 在这里下D 40303E可以看到数据窗口中显示为“%1X”
xxxx00401137 PUSH DWORD 0040305C
xxxx0040113C CALL wsprintfA

  对于以上的指令并不需要过多的了解它在干什么,只要将其中的每个地址改成一个变量地址的声明,然后再原封不动的抄到注册机编写器的代码窗口中即可。

  这是写好的声明:
回复 使用道具 举报
a4857390 3 2012-2-3 19:30:46
3#
a1 dd 0 ; 这是一个双字的内存空间,对应于上面的403058。
;(因为40109D处的指令是DWORD 403058,所以用dd,如果是WORD就用dw,如果是BYTE就用db)
a2 dd 0 ; 对应于上面的40306C
a3 db %1X0 ; 对应于上面的40303E指向的字符串
a4 db 20 dup (0)
; 这是20个字节的内存空间,用来存放输出的注册码,对应于上面的40305C

  输入如图所示:


    这是写好的程序代码:

CALL GetCommandLineA CMP BYTE PTR [EAX]22h ; 后面加h表示是十六进制
JNZ n1
INC EAX
n1
MOV CXWORD PTR [EAX]
MOV WORD PTR a2CX
MOV WORD PTR a2+25Ch
PUSH 0
PUSH 0
PUSH 0
PUSH 0
LEA EAXa1 ; 令EAX指向a1
PUSH EAX
PUSH 0
PUSH 0
LEA EAXa2
PUSH EAX ; 令EAX指向a2
CALL GetVolumeInformationA ; 当然这几条语句也可以直接写成
invoke GetVolumeInformationAaddr a200addr a10000
的形式
MOV EAX1
CPUID
MOV ECXa1
XOR EDXEDX
MUL ECX
ADD EAXEDX
PUSH EAX
LEA EAXa3 ; 令EAX指向a3,也就是指向字符“%1X”。
PUSH EAX
LEA EAXa4
PUSH EAX
CALL wsprintfA
LEA EAXa4
; 令EAX指向a4。因为程序最后显示的就是EAX寄存器所指向的内存地址的数据。

  输入如下图所示:


  可以看到这与上面的反汇编代码基本相同。点击编译就可以很容易的得到一个注册机了。   生成的注册机如下图所示(这只是我写的外观,你也可以自行修改):


  需要说明的是因为这只是我写的一个模板,所以我也在程序中使用了几个变量。
  请不要再重复声明:hCursorHandle、hInstance、hIcon、hTempEbp、hInput、hMode以免出错。
  还有就是你一定要在指令结束时令EAX指向正确的注册码地址。

  这种算注册码的方法不是直接从用户所输入的序列号来计算注册码的,所以并不适用于所有情况。有时我们可能需要根据用户所填入的序列号来计算注册码。考虑到这种情况所以我在程序初使时令EAX指向第一个编辑框(也就是输入序列号的窗口)收到用户输入的数据,令EBX指向第二个编辑框收到用户输入的数据,令ECX指向第三个编辑框收到用户输入的数据。你如果要对用户输入的序列号或用户名等信息进行操作,那么可以就对EAX、EBX、ECX进行操作。

  下面的代码是本例根据用户所填入的序列号来计算注册码的方法:

MOV ECXEAX ; EAX指向用户输入的八位序列号,现在暂将它移动到ECX寄存器
XOR EBXEBX ; 以下是一段典型的将内存中的ASCII码转换为十六进制代码。
n1
MOVZX EAXBYTE PTR [ECX]
OR ALAL
JZ n3
CMP AL3Ah
JC n2
SUB AL7
n2
SUB AL30h
SHL EBX4
ADD EBXEAX
INC ECX
JMP n1
n3 ; 我想以上的一段代码应该懂汇编就能写的出(如果不是很明白,那么你对我编写好的注册机用TRW调试一次就知道了)。
PUSH EBX ; 最后的十六进制结果都保存在寄存器EBX中
; 将EBX入栈,这是为了将EBX寄存器的数据保存起来。因为经过CPUID这个指令后EBX的值将被修改。然后后面就和上面一样照抄程序中的指令。以下计算注册码的方法很简短。但在实际的破解过程中,程序的算法可能会相当复杂。这就需要你通过调试或反汇编将关键的运算指令都找出来,再写进来。
MOV EAX1
CPUID
POP ECX ; 恢复EBX的值到ECX寄存器
XOR EDXEDX
MUL ECX
ADD EAXEDX
PUSH EAX
LEA EAXa3 ; 令EAX指向a3,也就是指向字符“%1X”。
PUSH EAX
LEA EAXa4
PUSH EAX
CALL wsprintfA
LEA EAXa4
; 令EAX指向a4。因为程序最后显示的就是EAX寄存器所指向的内存地址的数据。

下图分别是采用方案二和方案三编译后的窗口界面:

  

  如果你不采用这种方法编写那么也可以使用程序中的另一个功能“另类注册机”。它和CrackCode2000一样,也是通过拦截程序指令并显示出注册码。 我之所以再写一个是因为以前的CrackCode2000提供的拦截选项非常有限,而且也不对Wide格式(出现在VB程序中用00将ASCII码分隔开)提供支持,还有一个毛病是在有些程序中会出现莫名的非法操作或无法获得注册码的情况(就好比这个例子程序)。 另外它的界面也太简陋了,只是一个消息框。所以我用汇编写了这个另类注册机非常小巧,它最多可以设置100个断点(其实可以更多,但好象没这个必要),以及在每个断点处中断多少次,如下图所示:


  对于以上界面的说明:程序名称和中断地址的设置,这个我想用不着多说,会破解的人都懂。 而获取注册码的方式上需要说明一下,我是这样考虑的:寄存器方式-因为注册码可能是会放在寄存器中比较,并且可能经过十进制或十六进制的转换, 所以就提供了一个寄存器方式及十进制或十六进制的选项。 内存方式-是指:如设置为EDX,即指注册码保存在EDX所指向的内存地址中(而不是寄存器里)这样就为获取注册码提供了更多的选择。

  可以自定义在弹出的对话框中将显示的主页、邮件和窗口标题,如下图所示:


  生成的注册机有二个可选界面如下图所示:

  

  需要说明的一点是这个对话框只在拦截成功的时候出现。

  除此之外还有一个制作破解补丁的附加工具,制作界面如图所示。


  这是完成界面
回复 使用道具 举报
liyeu 10 2012-2-4 09:23:21
4#
看了,学习不了。根基浅。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入网盟
关闭

华夏网盟推荐 上一条 /1 下一条