- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浅述软件保护技术
浅述软件保护技术
[摘要]随着计算机的广泛应用和网络的日益普及,作为计算机应用主要载体软件也随着计算机和网络的日益普及而得到飞速的发展。软件是一种知识密集的特殊劳动产品,研制一个软件产品需要耗费大量的人力、物力,难度大,成本高。但是,软件的复制却很容易的事。这就导致了非法复制、盗版软件之风的泛滥。在这种形势下,为了防止软件的非法复制、盗版,保护软件开发商的利益,软件的研制者和销售商如何对自己的软件进行保护和数据加密,就显得十分必要了。下面通过分析软件的常用保护方式和破解方法来谈谈软件的保护及数据加密技术以及怎样加密自己的软件来防破解。
[关键词]加密 破解 反编译 密码学
中图分类号:TP3 文献标识码:A 文章编号:1002-6908(2007)0920071-02
一、软件加解密的发展历史
要了解软件的加密的发展历史概况,我们就必须从操作系统的发展历史上去了解,在这里,我们以微软公司的操作系统为例来说明软件加密的发展历史概况。
(一)DOS时代。由于DOS操作系统的脆弱性,在其中运行的普通应用程序几乎可以访问系统中的任何资源,如直接访问任何物理内存、直接读写任何磁盘扇区、直接读写任何I/O端口等,这给软件保护者提供了极大的自由度,使其可以设计出一些至今仍为人称道的保护技术。例如:软盘指纹防拷贝技术就是在这时候发展起来的。
(二)早期WINDOWS95时代。这个时代共享软件渐渐地盛行起来,采用序列号保护的共享软件越来越多。由于当时许多程序员对刚刚出现的Windows95不了解,编制的软件在加密部分都比较脆弱。所以这个时代所谓地解密通常是找到软件中序列号的明码比对或者简单的算法比对。这个时代是软件保护的最脆弱时代。
(三)Windows95末期。也就是Windows95和Windows98共存的时代。在这个时期,程序员已经对Windows9x这个系统了如指掌,一些很需要编程技巧、与系统核心等底层联系紧密的软件纷纷出笼。这个时期共享软件大多还是采用序列号加密方式,但其序列号通常是经过复杂的计算,很难象早期的软件一样,随随便便就可以解密了。
(四)Windows2000时代。这段时期就是Windows9x和Windows2000共存时期,各种软件的加密外壳泛滥,特别是各种专门的加密软件的出现大大地提高了软件的保护质量;此时解密技术也不断提高,各种新式的解密工具随即出现。此时的序列号加密越来越多地采用密码学中不可逆的加密算法,使得解密的过程越来越象再做一个高等数学的题目。软件解密者要想得到正确的序列号就必须对各种成熟加密算法有很深的了解,或者是找到软件加密算法的漏洞(象WinRAR、CloneCD等软件的Keygen就是利用ECC椭圆算法加密的漏洞编制出来的)。
二、当前的一些软件保护技术
(一)序列号保护。数学算法是密码加密的核心,但在一般的软件加密中,人们并不太关心它,因为软件加密本身实现的都是一种编程的技巧。但近几年来随着序列号加密程序的普及,数学算法在软件加密中的比重似乎是越来越大了。看看在网络上序列号加密的工作原理。当用户从网络上下载某个共享软件后,一般都有使用时间上的限制,当过了试用期后,你必须到这个软件的公司去注册后方能继续使用。注册过程一般是用户把注册信息告诉给软件公司,软件公司会根据用户的信息算出一个序列码,在用户得到这个序列码后,按照注册的步骤在软件中输入注册信息和注册码,其注册信息的合法性由软件验证通过后,软件就会取消掉本身的各种限制,这种加密实现起来比较简单,不需要额外的成本,用户购买也非常方便,在互联网上的软件80%都是以这种方式来保护的。 软件验证序列号的合法性过程,其实就是验证用户名和序列号之间的换算关系是否正确的过程。其验证最基本的有两种,一种是按用户输入的姓名来生成注册码,再同用户输入的注册码比较,公式表示如下:
序列号= F(用户名)
但这种方法等于在用户软件中再现了软件公司生成注册码的过程,实际上是很不安全的,不论其换算过程多么复杂,解密者只需把你的换算过程从程序中提取出来就可以编制一个通用的注册程序。另外一种是通过注册码来验证用户名的正确性,公式表示如下:
用户名称= F逆(序列号) (如ACDSEE)
这其实是软件公司注册码计算过程的反算法,如果正向算法与反向算法不是对称算法的话,对于解密者来说,的确有些困难,但这种算法相当不好设计。于是有人考虑到以下的算法:
F1(用户名称) =F2(序列号)
F1、F2是两种完全不同的的算法,但用户名通过F1算法计算出的特征字等于序列号通过F2算法计算出的特征字,这种算法在设计上比较简单,保密性相对以上两种算法也要好的多
原创力文档


文档评论(0)