注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

不老松的博客

记录 学习 欣赏

 
 
 

日志

 
 

破解收费软件时注册机和补丁的制作 - yangxinqiu的日志 - 网易博客  

2012-08-06 21:12:41|  分类: 实用教程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

yangxinqiu---博客乐园

此刻打盹,你将做梦;而此刻学习,你将圆梦。

2010-08-01 15:35:30|  分类: 数码电脑 |  标签:

第一节 概念介绍

 何为注册机?注册机就是针对某一软件,通过一定算法算出注册码的程序。我们写注册机时,一般都要了解注册码的算法(这当然是通过跟踪调试了解的),之后用汇编语言或其它高级语言来把算法还原。这样大家可根据自己的要求输入注册码,如根据自己的姓名,公司的名称注册。

  一 种是交费后,作者给寄有全部功能的  Register软件,原来的Shareware根本没有某些功能;

  第二种交费后, 作者给你个注册码(Register Number),注册后功能就无限制了  。 共享软件注册前后基本相同 , 只是功能受限制 ,或者使用时间受限制 ,或者经常出现要求注册的画面 , 等等 。

  一是、补丁( patches ), 这些小程序的功能是用来改变某种软件内某些特定的部位, 因此它们的作用通常只限于某一个软件的版本。请勿使用针对不同版本所设计的 patch,必须注意所使用软件版本的版本号与 patch 是否相同 。倘若使用不当,将导至错误信息,会破坏程序,严重时也有可能死机!

  二是、序列号 (serial number) 和注册码 (key generator) 就显的安全多了。有时候旧版的序号亦适用于新出的版本,就算不能用也毫无伤害。只有在极少数的情况下软件作者会设下某些陷阱,当使用者输入黑名单上的序号后 , 软件会自动销毁而无法使用。

  通过补丁和注册机可以大大方便用户的注册,就是目前有不少的程序,它的注册码都与硬件有关,就是在每一台机上安装都有一个机器码,要把这个机器码E-MAIL给作者, 作者把收到的机器码用注册程序算出注册码后再寄回给用户,这样做使得软件的防复制方面加强了,但造成了不少用户的麻烦,因为只要用户一重装系统或升级主板 ,就要重新去注册了。对于这种程序,一般初学者只能在内存中找到自己机器的注册码,但这种注册码到了其它的机器上又不能用了。所以要求大家能自己写出注册机来。

  而有的软件注册码计算很复杂,或只是试用版,到期就停止使用,根本无法输入注册码。对这类软件只能通过改动原程序代码指令,但如何让大家很方便地解除限制,当然你可把改动的字节告诉大家,用二进制编辑工具修改,但很不方便。所以大家有必要自己制作补丁程序,只要用户运行该补丁程序,让它帮你改动指定的代码,就可解除原软件限制,是不是很方便。

第二节 补丁制作

1、文件补丁制作

今天我们接触补丁制作工具是CodeFusion,界面制作也不错,它有以下功能:

1、可以自动比较补丁前后的差别
2、可以对字节逐个补丁,也可以使用普通和模板两种查找、替换;
3、补丁前后的文件尺寸可以不同;
4、可以对单个文件补丁,也可以处理多个不同盘、不同目录、甚至名字并不匹配的多个文件;
5、界面文字和链接等完全定制;
6、可以使用内置和外部的压缩器;也可以不压缩自行修改窗体;

为了使初学者能更快掌握这一工具使用,我就把一补丁最常用的制作过作写下来。

  首先建立一个临时目录C:\TEMP(只是为了下面讲述的方便罢了).并在其下建立两个子目录,分别为C:\TEMP\1\以及 C:\TEMP\2\. 以网络吸血鬼NET VAMPIRE 3.2为例: 将没有CRACK的主程序VAMPIRE.EXE拷到C:\TEMP\1\目录下. 将已经CRACK的主程序VAMPIRE.EXE拷到C:\TEMP\2\目录下.

(图一)是用CodeFusion制成的补丁程序运行的界面。

                                                                     破解收费软件时注册机和补丁的制作 - yangxinqiu的日志 - 网易博客 - 不老松 - 不老松的博客

                                                                                                          

(图一)

界面还是不错的,只要你用用CodeFusion,你就发现它很容易上手。

第一步、运行CodeFusion,界面如图二:

破解收费软件时注册机和补丁的制作 - yangxinqiu的日志 - 网易博客 - 不老松 - 不老松的博客

(图二)

图一和图二中的数字1、2、3、4、5是彼此对应的,要得到(图一)结果只需在(图二)中键入你自己的说明即可。你自己定制好界面可以存盘,存盘名是*.cfp,以后你只要打开该文件,就可出现所要的界面。很简单,自己摸索一下就能掌握。

第二步、定制好界面后,可以按预览按钮(就是上面的眼睛图标)看看界面自己是否满意,满意后按下一步。

破解收费软件时注册机和补丁的制作 - yangxinqiu的日志 - 网易博客 - 不老松 - 不老松的博客

(图三)

在图三中,按(1)处的绿色的十字,以添加原文件(在这里是吸血鬼的原主文件),按1后出现左边的一窗口,按2选择吸血鬼的原主文,选好按Ok即可。

第三步、这一步按图四的1处的绿色十字,出现如下结果:

破解收费软件时注册机和补丁的制作 - yangxinqiu的日志 - 网易博客 - 不老松 - 不老松的博客

(图四)

按上图中的2处是文件比较。第3处是Byte-path offset,在原文件中指定的地址处打字节补丁。第4处是Find &Replace,在原文件查找替换字节。第五处是Truncate offset,从指定地址处切断原文件。3,4,5的用处我在这里就不写了,大家可自己试试。

第四步、用鼠标按图四中的2处(File Compare)出现图五,选择己被crack的文件,进行比较,在这里是C:\TEMP\2\目录下, 已经CRACK的主程序VAMPIRE.EXE。

破解收费软件时注册机和补丁的制作 - yangxinqiu的日志 - 网易博客 - 不老松 - 不老松的博客

(图五)

在1 处选择C:\TEMP\2\目录下, 已经CRACK的主程序VAMPIRE.EXE。下一步按第2处的compare,进行两文件的比较,比较结束后按Ok,再按下一步。

第五步,这是最后一步,出现图六。

破解收费软件时注册机和补丁的制作 - yangxinqiu的日志 - 网易博客 - 不老松 - 不老松的博客

(图六)

在这界面上的各项选项就以默认值为主,它们都是些压缩选项,压缩补丁以保护你的版权。最后一步按1处(Make win32 Executable),选择路径、文件名,生成你的补丁。好了你可以把这补丁散发给大家,真可谓,辛苦你一人,方便千万人啊!

该软件的其它功能,大家自己再摸索一下,是不是很直观好用。

2、内存补丁制作

 RPP.EXE  是内存动态补丁制作软件。它通过脚本命令创建 win32 文件,以此文件装载程序,装载过程中等待软件解压或解除其自身保护后,然后按脚本要求修补内存中的指令,以使软件能够按我们要求运行。

  如 ACDSEE3.0 是用 ASPACK 压缩软件,你 crack 时发现在内存地址 433FEA 处把 6A00 改成 EB17 就可成功,但你不可能直接修改压缩过的 ACDSEE.EXE 文件;这里就可用  RPP.EXE  按我们要求生成一 LOAD.EXE 文件,首先运行 LOAD.EXE ,它自动装载 ACDSEE.EXE, 等其自解压完成后,然后修改内存 433FEA 地址为 EB17, 这样 ACDSEE.EXE 就可按我们要求运行了,不过我不赞成用此法对付 ACDSEE.EXE ,因为 ACDSEE.EXE 运行有两种界面,其中 VIEW 界面用此法不太灵。

RPP.EXE  还可很方便对付 NAG (一些提示、警告窗口的软件),如用  NEOLITE 2.0 Y 压缩过的软件运行之前弹出来的那种窗口,当然也有专门除掉 NAG 的工具。

用法

在资源管理器中双击 rpp.exe 文件,它弹出一菜单,你选择事先编好的脚本文件,然后按 OK  。

或在 WINDOWS 下的 DOS 窗口下用命令方式“ rpp.exe <script.rpp> ”,其中 script.rpp 为脚本命令文件。

如你的输出文件己存在,它将覆盖。在命令方式下,脚本文件可是任何文件名和扩展名;但在对话窗口操作方式下,文件名必须为  *.rpp

 'T='  表示对内存的检测次数, T=1000: 意味着对内存检测 1000 次,在放弃之前,告诉你的应用程序是

 'R:'  把前面需要补的全部补好后 ,  再继续 ,  可以看看 azpr243.rpp 这个例子

内存地址和原码都符合才会进行补丁 ,  字节间请用逗号分开。脚本文件不能大于 40K, 被补的字节有限为 1f0h 字节,被处理的原文件不小于 30h 字节。

T=1000:     ; 对内存尝试 1000 次补丁 ,  不行则放弃 ,  如果不设默认为 8000

P=40101D/74,60/74,00:   ; 将命令 jz xx  改为 jz next instruction

P=4024A6/46,52,45,45,20/52,21,53,43,00: ; 将字符  'FREE '  替换成  'R!SC'

 'O=fun.exe:',  然后运行  fun.exe  不一会你只好重新启动微机了  :)

第三节 注册机制作工具

1、CrackCode2000使用介绍

把算法还原,这样做一个注册机一般都有要花不少的时间,而且要对汇编语言和编册码,但这种注册码到了其它的机器上又不能用了,而自己又没有办法写出注册机

015F:004149D2  8A06                MOV       AL,[ESI]  

015F:004149D4  84C0                TEST      AL,AL

015F:004149D6  740D                JZ        004149E5

015F:004149D8  8A11                MOV       DL,[ECX]   这里放正确的注册码

015F:004149DA  41                  INC       ECX

015F:004149DB  46                  INC       ESI

015F:004149DC  3AC2                CMP       AL,DL

015F:004149DE  751F                JNZ       004149FF

015F:004149E0  803900              CMP       BYTE PTR [ECX],00

015F:004149E3  75ED                JNZ       004149D2

015F:004149E5  803900              CMP       BYTE PTR [ECX],00

015F:004149E8  7515                JNZ       004149FF

015F:004149EA  803E00              CMP       BYTE PTR [ESI],00

015F:004149ED  7510                JNZ       004149FF

015F:004149EF  B801000000          MOV       EAX,00000001   最后正确就把 EAX=1

015F:004149F4  5F                  POP       EDI

015F:004149F5  5E                  POP       ESI

015F:004149F6  5D                  POP       EBP

015F:004149F7  5B                  POP       EBX

015F:004149F8  81C460030000        ADD       ESP,00000360

0167:0041F1F8 34 38 34 38 34 38 34 38-34 38 34 38 00 00 00 00  484848484848....

0167:0041F208 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................

0167:0041F218 04 0D 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................

0167:0041F228 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................

0167:0041F238 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................

0167:0041F248 00 00 00 00 00 00 00 00-00 C0 00 00 0A 04 00 00  ................

0167:0041F258 04 00 00 00 0A 00 00 00-01 00 00 00 90 03 CA 00  ................

0167:0041F268 00 00 00 00 D0 03 CA 00-00 00 00 00 00 00 00 00  ................

0167:0066F3E4 58 51 4D 50 5A 43 57 58-54 45 52 53 00 01 08 00  XQMPZCWXTERS....

0167:0066F3F4 9A EE 8B 17 E3 A4 00 00-10 00 E0 2C 00 00 00 01  ...........,....

0167:0066F404 00 03 00 00 00 00 00 00-80 01 AB 01 8D 01 9C 01  ................

0167:0066F414 00 00 AB 01 8D 01 00 00-80 01 9C 01 8C 01 A4 01  ................

0167:0066F424 8D 01 9C 01 8C 01 A4 01-8D 01 04 00 00 00 B6 0C  ................

0167:0066F434 00 A9 52 FB 83 2A D1 78-21 88 73 DA A2 0B F0 59  ..R..*.x!.s....Y

0167:0066F444 65 CC 37 9E E6 4F B4 1D-44 ED 16 BF C7 6E 95 3C  e.7..O..D....n.<

0167:0066F454 ED 44 BF 16 6E C7 3C 95-CC 65 9E 37 4F E6 1D B4  .D..n.<..e.7O...

见到了吧!那个 XQMPZCWXTERS 就是正确的注册码了,但如果我们用以前的方法来写注册机,

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

First_Break_Address_Code=8A   中断程式的 1 Byte 代码,这个 8A 就是 015F:004149D2 的 8A

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

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

First_Break_Address_Code=8A  中断程式的 1 Byte 代码,这个 8A 就是 015F:004149D2 的 8A

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

Save_Code_Address=ECX   存放注册码的内存地址,这个 ECX 是从 015F:004149D8 来

目前 CRACKCODE2000 对所中断地址的代码长度已经是无有要求的,只要把长度写进 INI

015F:004149D2  8A06                MOV       AL,[ESI]   

015F:004149DA  41                  INC       ECX         本行代码为 1 Byte

015F:004149E0  803900              CMP       BYTE PTR [ECX],00  本行代码为 3 Bytes

生成后保存为 CRACKCODE.INI 文件,把 CRACKCODE.EXE 和 CRACKCODE.INI 一起 copy 到被注册的 软件的安装目录下,运行 CRACKCODE.EXE 。哦!被取注册码的软件也运行了,到注册的窗口去,输入一个名字,随便输入注册码,按确定,哦!跳出一个显示窗来,里面出现了你想要

下面是 Decompile Winhelp 的注册机的写法,这个软件是加了壳的软件,我们来看一看加了壳 的软件对于 CrackCode2000 是否有影响 , 现在我把它注册码的部分那出来给大家看一看吧!

015f:0040e4a9  8d45c0              lea       eax,[ebp-40]

015f:0040e4ac  8d55ac              lea       edx,[ebp-54]

015f:0040e4af  8a08                mov       cl,[eax]     ds:eax 放的是你输入的注册码

015f:0040e4b1  3a0a                cmp       cl,[edx]     ds:edx 放的是正确的注册码

015f:0040e4b3  7516                jnz       0040e4cb

015f:0040e4b5  84c9                test      cl,cl

015f:0040e4b7  746e                jz        0040e527

015f:0040e4b9  8a4801              mov       cl,[eax+01]

015f:0040e4bc  3a4a01              cmp       cl,[edx+01]

015f:0040e4bf  750a                jnz       0040e4cb

015f:0040e4c1  83c002              add       eax,02

015f:0040e4c4  83c202              add       edx,02

015f:0040e4c7  84c9                test      cl,cl

015f:0040e4c9  75e4                jnz       0040e4af

015f:0040e4cb  745a                jz        0040e527

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  ................

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.

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

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

First_Break_Address_Code=8A   中断程式的 1 Byte 代码,这个 8A 就是 015f:0040e4af 的 8A

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

生成后保存为 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

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

First_Break_Address_Code=3B   中断程式的 1 Byte 代码,这个 3B 就是 015f:00460765 的 3B

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

大家看到了吗?今次 CrackCode2000 使用了模式 1 来读取了,因为今次的注册码不是直接用 ASCII 的形式放在内存中的,而是用数值的形式放在寄存器处的,所以这时就要用模式 1 了。 生成后保存为 CRACKCODE.INI 文件,把 CRACKCODE.EXE 和 CRACKCODE.INI 一起 copy 到被注册的 软件的安装目录下,运行 CRACKCODE.EXE 。哦!被取注册码的软件也运行了,哦!软件一运行

读取注册码,这是 CrackCode 的增强模式,它可以使用二次重点的方法,来达到的目的,大

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

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  ................

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.........

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

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

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

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

哦!发生了什么事啊!好我们用 winsoftice 在那 cs:457923 下一个断点,重新运行 winzip , 哦!我们的 winsoftice 不断地中断,原来 winzip 的设计很特殊性,它会用比较注册码的程

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

点你们切记,那是到了万不得意时才使用的,我们要尽可能地用寄存器寻址。所以我们使用增找一个地址,但经过分析我选取 015f:00407c1c 这个地址,当然你也可以选择其它的。

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 )

生成后保存为 CRACKCODE.INI 文件,把 CRACKCODE.EXE 和 CRACKCODE.INI 一起 copy 到被注册的 软件的安装目录下,运行 CRACKCODE.EXE 。哦!被取注册码的软件也运行了,哦!软件一运行

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

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

xxxx:00401077 CALL GetCommandLineA
xxxx:0040107C CMP BYTE PTR [EAX],22
xxxx:0040107F JNZ 401082
xxxx:00401081 INC EAX
xxxx:00401082 MOV CX,WORD PTR [EAX]
xxxx:00401085 MOV WORD PTR [0040306C],CX
xxxx:0040108C MOV WORD PTR [0040306E],5C
xxxx:00401095 PUSH 0
xxxx:00401097 PUSH 0
xxxx:00401099 PUSH 0
xxxx:0040109B PUSH 0
xxxx:0040109D PUSH DWORD 00403058
xxxx:004010A2 PUSH 0
xxxx:004010A4 PUSH 0
xxxx:004010A6 PUSH DWORD 0040306C
xxxx:004010AB CALL GetVolumeInformationA
…………    …………
…………    …………
xxxx:0040111E MOV EAX,1
xxxx:00401123 CPUID
xxxx:00401125 MOV ECX,DWORD PTR [00403058]
xxxx:0040112B XOR EDX,EDX
xxxx:0040112D MUL ECX
xxxx:0040112F ADD EAX,EDX
xxxx:00401131 PUSH EAX
xxxx:00401132 PUSH DWORD 0040303E    ; 在这里下D 40303E可以看到数据窗口中显示为“%1X”
xxxx:00401137 PUSH DWORD 0040305C
xxxx:0040113C CALL wsprintfA

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

  这是写好的声明:

a1 dd 0; 这是一个双字的内存空间,对应于上面的403058。
;(因为40109D处的指令是DWORD 403058,所以用dd,如果是WORD就用dw,如果是BYTE就用db)

  输入如图所示:

破解收费软件时注册机和补丁的制作 - yangxinqiu的日志 - 网易博客 - 不老松 - 不老松的博客

 7

    这是写好的程序代码:

CALL GetVolumeInformationA; 当然这几条语句也可以直接写成
invoke GetVolumeInformationA,addr a2,0,0,addr a1,0,0,0,0
的形式

  输入如下图所示:

破解收费软件时注册机和补丁的制作 - yangxinqiu的日志 - 网易博客 - 不老松 - 不老松的博客

 8

  可以看到这与上面的反汇编代码基本相同。点击编译就可以很容易的得到一个注册机了。

  生成的注册机如下图所示(这只是我写的外观,你也可以自行修改):

破解收费软件时注册机和补丁的制作 - yangxinqiu的日志 - 网易博客 - 不老松 - 不老松的博客

 9

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

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

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

PUSH EBX; 最后的十六进制结果都保存在寄存器EBX中
; 将EBX入栈,这是为了将EBX寄存器的数据保存起来。因为经过CPUID这个指令后EBX的值将被修改。然后后面就和上面一样照抄程序中的指令。以下计算注册码的方法很简短。但在实际的破解过程中,程序的算法可能会相当复杂。这就需要你通过调试或反汇编将关键的运算指令都找出来,再写进来。

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

                    破解收费软件时注册机和补丁的制作 - yangxinqiu的日志 - 网易博客 - 不老松 - 不老松的博客破解收费软件时注册机和补丁的制作 - yangxinqiu的日志 - 网易博客 - 不老松 - 不老松的博客

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

破解收费软件时注册机和补丁的制作 - yangxinqiu的日志 - 网易博客 - 不老松 - 不老松的博客

 12

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

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

破解收费软件时注册机和补丁的制作 - yangxinqiu的日志 - 网易博客 - 不老松 - 不老松的博客

 13

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

 14  

破解收费软件时注册机和补丁的制作 - yangxinqiu的日志 - 网易博客 - 不老松 - 不老松的博客

 15

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

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

破解收费软件时注册机和补丁的制作 - yangxinqiu的日志 - 网易博客 - 不老松 - 不老松的博客

 16

  这是完成界面。

破解收费软件时注册机和补丁的制作 - yangxinqiu的日志 - 网易博客 - 不老松 - 不老松的博客

 17

页脚

网易公司版权所有 ©1997-2012




引文来源  破解收费软件时注册机和补丁的制作 - yangxinqiu的日志 - 网易博客
  评论这张
 
阅读(404)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017