基于Web的共享软件加密方案和对策*
2011-10-18陆竞
陆 竞
(黑河学院,黑龙江 黑河 164300)
基于Web的共享软件加密方案和对策*
陆 竞
(黑河学院,黑龙江 黑河 164300)
随着互联网的普及,共享软件得到了快速的传播,但盗版和解密技术也一直困扰着共享软件的发展。本文对基于Web的共享软件加密和解密技术进行探讨,并提出软件加密方案和应对破解的策略。
Web;共享软件;注册;加密;破解
互联网的出现极大地促进了共享软件的快速传播和迅猛发展。而开发一套好的共享软件,软件开发商要投入较大的资金,软件作者往往要付出许多心血,如果软件很容易被他人破解、盗用,不但软件开发者应有的权益得不到保障,而且还会极大地打击软件作者开发、维护、升级软件的热情和动力。软件加密是软件开发者必须要面对的问题。软件加密的目的就是为了防盗版、防解密,保护软件的知识产权,维护软件开发者的利益;同时,软件保护也是在维护软件使用者的权益。
目前,软件加密的方式大致包括:磁盘保护、软件加壳、设置软件注册、密码保护、软件狗、光盘加密(CD KEY)、逻辑炸弹、客户端和服务器端加密、License保护、Keyfile加密方式等。
基于Web的共享软件与大型商业软件有较大的区别,大型商业软件一般是面向特定的企业、行业或领域,商业软件通常不能随意下载,不能试用。而“先试用后付费”的共享软件是面向大众的、开放的、可以通过网络随意下载和免费试用的软件。因此,共享软件在加密方式上,通过软件狗、磁盘、光盘等硬件加密不现实,有碍于共享软件的传播、推广和销售。
基于Web的共享软件,90%以上都是通过 “设置软件注册”这种方式来进行保护的。因此,我们通常把共享软件限制取消或合法化的过程,称之为“软件注册”。共享软件的注册过程一般都是:用户先行下载、安装并试用软件;试用满意后与开发商联系,并支付一定的注册费,同时要将在用户计算机上产生的软件机器码或用户身份信息提供给软件开发商;软件开发商将根据用户提供的机器码或身份信息计算出一个(组)注册码,并将计算出的注册码告诉用户;用户得到这个注册码后,按照软件要求在软件中依次输入注册信息,其注册信息的合法性由软件验证;注册成功后,软件就会取消掉本身的各种限制,变成合法的正式软件。共享软件的这种加密方式实现起来比较简单,软件作者不需要增加其他成本,用户下载、使用、购买也非常方便。因此,采用设置软件注册,是共享软件的主要加密手段,这种方式对保障软件开发者、使用者的合法权益,起到了一定的积极作用。
但是,众多共享软件的破解案例表明,软件加密仅仅通过“设置软件注册”是远远不够的。一款保护成功的共享软件必须是设置软件注册、逻辑炸弹、软件加壳、实时监控等多种软件加密技术的混合体。
实践证明,研究软件的解密过程有利于软件的加密。软件加密的过程,往往是针对软件解密的方式、方法进行的。通常是先有解密,然后才有加密。当然,也有很多加密手段,并不是源于解密技术,而是软件作者奇思妙想的结果。
笔者研究、参考了众多网络高手撰写的加解密经验介绍,并结合自己开发的几款软件的加密、被解密、再加密的实践过程,和大家谈谈基于Web的共享软件加密方案和对策。这些方案和对策可操作性和实用性较强,不易被破解,非常适合广大共享软件的作者学习和掌握,也适用于商业软件的加密处理。本文不谈技术,只谈软件的加密方案和应对破解的对策。
一、设置注册码
在《VB下的共享软件注册技术》[1]一文中,笔者通过下面的语句,在程序中设置注册码,并由此完成注册过程:
其中的“abc123”就是注册码。但这种“显式”的“明码”注册码,极容易被破解;而且无法做到一机一用,也就是说,即使不破解,只要有一个人注册后将注册码公布到网上,其他人在网上一搜,找到这个注册码后,就可以成功地注册自己下载的共享软件。因此,这样设置软件注册,软件保护形同虚设。不过,目前网上仍有很多软件,包括一些大型软件都是这样做的。
这里,我们要求设置软件注册:第一,编写程序时,不能采用“明码”注册码,要将“明码”注册码通过建立较复杂的函数或算法换算(推荐后者)变成“隐码”,注册校验中,再通过逆函数或逆算法进行还原;第二,进行硬件绑定,也就是将共享软件与计算机绑定,增加“机器码”。由于计算机网卡序列号或硬盘序列号①在Visual Basic中,对于网卡序列号可通过调用 Windows API的 EthernetAddress函数来获取,硬盘序列号可通过调用WindowsAPI的 GetVolumeInformation函数来获取。的唯一性,可以将“机器码”与计算机的网卡序列号或硬盘序列号等硬件信息相结合、相关联,这也保证了不同计算机对应的“机器码”不相同。注意,这些硬件信息与注册码的关联,也不能是简单的、原原本本的信息展示,还要通过一定程度的复杂运算或数值转换,甚至只是截取其中的一部分进行转换得出。于是,我们将注册码由固定不变的变成可变的,并与计算机绑定,不同的计算机注册码也是不相同的。
实践中,采取“序列号”外加“注册码”再加“激活码”三组数据来完成软件注册。用三组数据,通过多个硬件绑定计算机,注册码动态生成,“隐码”、“算法”加“变异”,达到软件保护的目的。
还有一点应该注意:为了防止软件被跟踪破解,编写程序时,在软件注册失败后,不要让软件弹出“对不起,注册失败!”之类的对话框;同样,在软件注册成功后,也不要弹出类似于“恭喜您注册成功!”这样的对话框。因为这样做,很容易让软件破解者由此跟踪这些对话框,找到加密点。作为应对破解的对策,我们建议在编写程序时,要么不写“注册成功”之类的语句;要么多写,在程序中多写几个没有实际意义的条件语句,在其中写上 “注册成功”。这样会增加解密难度。
二、应对暴力破解
应当看到,单独使用“设置软件注册”来实现保护软件的目的是远远不够的。在很多时候,软件破解者在无法获得软件注册信息的情况下,利用跟踪和反汇编技术,分析软件中与注册相关的逻辑变量,通过添加或修改指令,强制改变相关变量的属性;或增加跳转指令内容,从而绕过加密或判断程序段,达到软件“伪注册”的目的。这就是所谓的暴力破解。因为这种破解方式,通常要对某些可执行文件进行编辑和修改,并重新生成一个可执行文件。因此,我们可以针对这一特点采取相应的应对措施。即:将软件中某个(些)可执行文件最后编译生成的创建日期和文件大小记录下来,并写入到程序中,然后经常性地在程序中通过条件和比较语句进行判断,看看这个文件是否被重新创建,一旦文件的大小或创建日期发生改变,就可以判定软件的完整性被破坏,软件可能被破解或改写,于是立刻启动逻辑炸弹或自毁程序,把程序引入无限循环或跳转到错误的程序段运行,由此得到错误的数据或错误的运行结果。
除了通过文件的创建日期和大小判断文件是否被修改外,我们还可以采用逐字逐句的方式,对两个文件进行精确比较,检查文件是否被修改。采用这种方法,首先要预埋用于对比的某个(些)核心文件,为了安全起见,我们通常要把这个核心文件预先“切割”成几个小文件,保存在软件系统中;当软件运行需要比较时,再把这几个小文件,按顺序临时组合“连接起来”,变成一个大文件,再与某个“暴露在外”的核心文件进行比较,由此确认核心文件是否被改写,将更加准确可靠。
针对软件去壳的破解方式,我们也可以采用这种方式保护软件,限于篇幅,不赘述之。
三、采用C/S模式的加密方式
基于Web的共享软件保护方法,还包括客户端和服务器端(C/S)的注册信息验证保护方式。这种软件保护方式是在用户下载、试用、付费以及向软件开发商提供机器码等信息后,软件开发商要先计算出对应的注册码,然后将用户的注册信息添加到服务器端的合法软件用户的信息数据库中,之后将注册码告诉用户。用户通过客户端软件登录软件主机服务器进行注册,注册时软件将用户输入的注册信息与服务器中的注册信息进行核对,信息核对一致后,提示软件注册成功。这里,软件的注册信息应包括:序列号、用户名、注册码等。为了有效保护软件开发商的权益,当用户注册时,我们还要通过客户端程序获取注册时间(针对有使用期限的软件)、机器码(确保一机一用)、IP地址、注册成功与否的标示符(客户端软件运行时首先判断的变量)等信息,从而达到软件保护的目的。当然,客户端/服务器端的加密方式,对客户端程序和服务器端程序也需要采取必要的加密手段和措施。其中:客户端程序的加密和《VB下的共享软件注册技术》[1]类似,同时考虑远程访问与远端交换数据判断;服务器端的加密,重点应放在对合法用户信息数据库的加密和保护上,所有的客户信息都要加密后再保存到数据库中,以防被盗用或篡改。
四、在软件升级时的验证与保护
还有一类基于Web的共享软件,软件开发商在网上发布的软件版本,其软件本身功能就是不完整的。和其他共享软件一样,这些软件可以下载和试用,试用满意后,要向软件作者(或开发商)支付一定的费用,获得软件的注册码,并进行软件注册。但这些软件注册成功后,会弹出一个“确定”按钮的对话框,要求用户立即升级,用户点击“确定”按钮后,软件就自动从软件服务器上下载功能完整的最新版本软件,也可能是与本地“拼接”,完成软件升级;有些软件在注册成功后,会提供给用户一个新的软件下载网址(最好不要把地址写到程序中),要求用户下载,并重新安装升级;当然,也有的软件不提示或提示“请稍候”,然后悄悄地完成新版软件下载或软件“拼接”等工作,完成软件版本替换和升级。应当说,共享软件的这种加密方式,可以较有效地防止软件被破解。试想,破解者拿着一款需要注册且本身功能就不完整的软件,无论他使用任何手段和技术破解,都是徒劳的,因为这样一款软件,无论注册成功与否,它的功能永远都是受限制的、不完整的。
更进一步,我们必须把关注、搜集、研究互联网上自己开发的软件被破解的情况,作为平时软件开发、升级工作的一部分。在对已经注册成功的软件进行升级时,要在软件的升级版本中,针对新的破解手段,增加验证内容,同时通过软件升级,剔除掉部分非法用户,从而达到软件保护的目的。
五、应对软件注册机
所谓注册机,简单地说就是能够计算出这款软件注册码的小程序,它通常是软件破解者通过反编译、反汇编等技术手段,破解了软件注册认证算法或注册码生成算法后编写的注册工具。互联网上经常会出现某款共享软件的注册机,要保护自己的软件,就要防止软件被开发出注册机。我们应对的方法是:保护你的认证、校验、生成和还原算法,最简单的做法就是不使用独立的函数来认证、校验、生成和还原,而是分别把认证、校验、生成和还原算法直接写到程序代码中,各种算法要尽可能分开写,还可以在程序中增加一些多余的函数、过程,增加前面提到的带有“注册成功”之类文字的不被调用的“废码”,迷惑破解者,增加分析、研究软件的难度。
六、其他对策
把共享软件冠名成破解版,然后尽可能多地到各大软件下载网站发布,这样,可以让你的假破解版软件更多地出现在搜索引擎的结果中。当用户下载了多个所谓的破解版软件而不能正常使用后,就会将目光投向购买正版软件。
[1]陆竞.VB下的共享软件注册技术[J].科技资讯,2010(8).
(编辑:金冉)
TP309
B
1673-8454(2011)15-0064-03
*本文系黑龙江省教育厅科学技术研究项目,项目编号:11551306。