论文部分内容阅读
不得不说,我们这次要讨论的是个拿不到台面上的话题,但越来越多的人对它感兴趣——软件是如何被破解的?网上的破解补丁都是如出来的,可以放心使用吗?本文只在探讨技术,揭露“破解”的真相。
软件是如何注册成功的?
软件在注册时,会要求你输入用户名和注册码,这部分是软件内部,通过内置的算法来判断输入的密码是否正确。比如,我制作了一款软件,现在把“算法”定为“将用户名中的字母转换为对应的位置数字,就为注册码,比如A为01,B为02,这就是‘算法’”,所以若用户名是CFAN,那么注册码就为03060114(见图1)。当然实际软件注册的“算法”是不可能这么容易的,也是不能让你猜到的。
小提示
很多软件在注册时,都会告诉你一个“机器码”,这是共享软件作者为了限制软件只能在一台机器上使用的办法。其原理是软件读取电脑中某些硬件或软件信息,生成数字或符号组成的“机器码”,说白了只不过是用机器码充当了一把“用户名”的角色。只是软件的使用环境更严格,比如你的机器码表示使用的是Windows XP,那么你就别想换用Windows 7再用。
玩“机”的和喜欢打“补丁”的
现在破解程序的发布形式主要有两种:一是水平一般的人,只需要跳过注册码验证部分,就能达到正常使用软件全部功能,从而实现破解,于是就有了破解补丁;二是是水平比较高的“牛人”,会破解软件注册的“算法”,知道了算法就好办了,也就有了“注册机”——你可以用任何用户名算出注册码进行注册。
而破解的难点就在于要先把程序还原为代码的样子,于是就有了“反汇编”(反编译)的步骤。
软件都是使用诸如C、C++这类“高级语言”开发的,经过了“高级语言→汇编语言→机器代码”的过程让软件可以让电脑正常运行。所谓的“反汇编”,就是将软件“机器代码”恢复为“汇编语言”。
通过一些反汇编工具,你可以很容易将任何软件反汇编,比如下面就是非常典型的一段汇编代码,数据在运行时,都会有地址,代码中的0045XXXX就“内存地址”,后面的CALL 00405E02、JZ 004572E6都是执行的指令。
00451239 CALL 00405E02 (用来判断你输入的注册码是否正确)
0045123D JZ 004572E6 (如果用户输入的注册码正确,就跳向成功处,即004572E6处)
XXXXXXXX YYYYYYYYYY
…
XXXXXXXX YYYYYYYYYY(执行到此处,提示你注册失败,继续“试用”)
…
004572E6 YYYYYYYYYY(提示你注册成功,软件所有限制取消)
…
软件被反汇编后,你可以清楚的知道它每一步执行的过程,这样就可以屏蔽软件中验证用户序列号部分了。我们将如图1所示的流程扩展,就可以看到,其实汇编的目标就是找到判断的“入口”(见图2),有了入口,再用比如UltraEdit这类软件直接修改运行程序的EXE或是DLL文件就可以把软件破解了。
最后,提醒一下大家,也许网上有很多破解补丁,它们可能除了自带很多广告插件外,还很有可能是黑客布下的“陷阱”——他们发布无效的”假补丁“(其实为木马病毒),吸引你安装,偷取账号。
软件是如何注册成功的?
软件在注册时,会要求你输入用户名和注册码,这部分是软件内部,通过内置的算法来判断输入的密码是否正确。比如,我制作了一款软件,现在把“算法”定为“将用户名中的字母转换为对应的位置数字,就为注册码,比如A为01,B为02,这就是‘算法’”,所以若用户名是CFAN,那么注册码就为03060114(见图1)。当然实际软件注册的“算法”是不可能这么容易的,也是不能让你猜到的。
小提示
很多软件在注册时,都会告诉你一个“机器码”,这是共享软件作者为了限制软件只能在一台机器上使用的办法。其原理是软件读取电脑中某些硬件或软件信息,生成数字或符号组成的“机器码”,说白了只不过是用机器码充当了一把“用户名”的角色。只是软件的使用环境更严格,比如你的机器码表示使用的是Windows XP,那么你就别想换用Windows 7再用。
玩“机”的和喜欢打“补丁”的
现在破解程序的发布形式主要有两种:一是水平一般的人,只需要跳过注册码验证部分,就能达到正常使用软件全部功能,从而实现破解,于是就有了破解补丁;二是是水平比较高的“牛人”,会破解软件注册的“算法”,知道了算法就好办了,也就有了“注册机”——你可以用任何用户名算出注册码进行注册。
而破解的难点就在于要先把程序还原为代码的样子,于是就有了“反汇编”(反编译)的步骤。
软件都是使用诸如C、C++这类“高级语言”开发的,经过了“高级语言→汇编语言→机器代码”的过程让软件可以让电脑正常运行。所谓的“反汇编”,就是将软件“机器代码”恢复为“汇编语言”。
通过一些反汇编工具,你可以很容易将任何软件反汇编,比如下面就是非常典型的一段汇编代码,数据在运行时,都会有地址,代码中的0045XXXX就“内存地址”,后面的CALL 00405E02、JZ 004572E6都是执行的指令。
00451239 CALL 00405E02 (用来判断你输入的注册码是否正确)
0045123D JZ 004572E6 (如果用户输入的注册码正确,就跳向成功处,即004572E6处)
XXXXXXXX YYYYYYYYYY
…
XXXXXXXX YYYYYYYYYY(执行到此处,提示你注册失败,继续“试用”)
…
004572E6 YYYYYYYYYY(提示你注册成功,软件所有限制取消)
…
软件被反汇编后,你可以清楚的知道它每一步执行的过程,这样就可以屏蔽软件中验证用户序列号部分了。我们将如图1所示的流程扩展,就可以看到,其实汇编的目标就是找到判断的“入口”(见图2),有了入口,再用比如UltraEdit这类软件直接修改运行程序的EXE或是DLL文件就可以把软件破解了。
最后,提醒一下大家,也许网上有很多破解补丁,它们可能除了自带很多广告插件外,还很有可能是黑客布下的“陷阱”——他们发布无效的”假补丁“(其实为木马病毒),吸引你安装,偷取账号。