您的位置: 我要加密首页 >> 加密技术 >> 阅读文档:软件加密技术及实现

软件加密技术及实现

[ 作者: | 更新日期:2007-6-19 09:48:28 | 阅读次数: | 评论 0 条 | 我要投稿 ]

    这是一位计算机系的大学毕业生的毕业论文,跟我们的加密很有关系。本站特别推荐一下,希望大家看看,学习一下加密技术方面的知识。(本站摘了一些精华给大家) 字串4

摘  要    当今盗版软件的泛滥成灾几乎已经成为了我们中国民族软件的灾难,为了防止软件的非法复制、盗版,保护软件开发商的利益,就必须对软件进行加密保护。现在市面上有许多反盗版软件,但这类软件多是单机处理,并且只使用简单的加密手段,很容易被解密者破解。
本文描述了一个通过Internet,集加密和电子注册于一身的完善的软件保护方案。该方案基于多种密码学意义上可靠的算法,如对称加密算法,散列算法,数字签名,密钥交换等等。通过对Windows下PE可执行文件的结构及载入机制进行深刻的剖析, 巧妙的使用这些密码学算法及多种反破解方案对PE文件进行加密保护。
在该方案的实现中,使用CryptoAPI中的数字签名算法RSA,加密算法RC2和RC4,散列算法SHA,同时自己编写了使用了MD5算法用于快速计算大量数据的摘要;网络接口使用WinSocket;编程语言选用汇编语言和C++混合编程方式;反破解方案有检测文件完整性、检测代码完整性、反跟踪、反-反汇编、反Dump、代码变形等等。
由于使用了可靠的密码学算法,使软件加密的强度大大提高;由于使用了Internet在线注册方式,用户使用也非常方便。
字串2

4 当前流行的一些软件加密保护技术
4.1 序列号保护
数学算法一项都是密码加密的核心,但在一般的软件加密中,它似乎并不太为人们关心,因为大多数时候软件加密本身实现的都是一种编程的技巧。但近几年来随着序列号加密程序的普及,数学算法在软件加密中的比重似乎是越来越大了。
看看在网络上大行其道的序列号加密的工作原理。当用户从网络上下载某个shareware--共享软件后,一般都有使用时间上的限制,当过了共享软件的试用期后,你必须到这个软件的公司去注册后方能继续使用。注册过程一般是用户把自己的私人信息(一般主要指名字)连同信用卡号码告诉给软件公司,软件公司会根据用户的信息计算出一个序列码,在用户得到这个序列码后,按照注册需要的步骤在软件中输入注册信息和注册码,其注册信息的合法性由软件验证通过后,软件就会取消掉本身的各种限制,这种加密实现起来比较简单,不需要额外的成本,用户购买也非常方便,在互联网上的软件80%都是以这种方式来保护的。
软件验证序列号的合法性过程,其实就是验证用户名和序列号之间的换算关系是否正确的过程。其验证最基本的有两种,一种是按用户输入的姓名来生成注册码,再同用户输入的注册码比较,公式表示如下: 字串4
                      序列号 = F(用户名)
但这种方法等于在用户软件中再现了软件公司生成注册码的过程,实际上是非常不安全的,不论其换算过程多么复杂,解密者只需把你的换算过程从程序中提取出来就可以编制一个通用的注册程序。
另外一种是通过注册码来验证用户名的正确性,公式表示如下:
                  用户名称 = F逆(序列号) (如ACDSEE)
这其实是软件公司注册码计算过程的反算法,如果正向算法与反向算法不是对称算法的话,对于解密者来说,的确有些困难,但这种算法相当不好设计。
于是有人考虑到以下的算法:
              F1(用户名称) = F2(序列号)
F1、F2是两种完全不同的的算法,但用户名通过F1算法计算出的特征字等于序列号通过F2算法计算出的特征字,这种算法在设计上比较简单,保密性相对以上两种算法也要好的多。如果能够把F1、F2算法设计成不可逆算法的话,保密性相当的好;可一旦解密者找到其中之一的反算法的话,这种算法就不安全了。一元算法的设计看来再如何努力也很难有太大的突破,那么二元呢? 字串2
            特定值 = F(用户名,序列号)
这个算法看上去相当不错,用户名称与序列号之间的关系不再那么清晰了,但同时也失去了用户名于序列号的一一对应关系,软件开发者必须自己维护用户名称与序列号之间的唯一性,但这似乎不是难以办到的事,建个数据库就可以了。当然也可以把用户名称和序列号分为几个部分来构造多元的算法。
特定值 = F(用户名1,用户名2,...序列号1,序列号2...)
现有的序列号加密算法大多是软件开发者自行设计的,大部分相当简单。而且有些算法作者虽然下了很大的功夫,效果却往往得不到它所希望的结果。
4.2 时间限制
  有些程序的试用版每次运行都有时间限制,例如运行10分钟或20分钟就停止工作,必须重新运行该程序才能正常工作。这些程序里面自然有个定时器来统计程序运行的时间。
这种方法使用的较少。
4.3 Key File 保护
Key File(注册文件)是一种利用文件来注册软件的保护方式。Key File一般是一个小文件,可以是纯文本文件,也可以是包含不可显示字符的二进制文件,其内容是一些加密过或未加密的数据,其中可能有用户名、注册码等信息。文件格式则由软件作者自己定义。试用版软件没有注册文件,当用户向作者付费注册之后,会收到作者寄来的注册文件,其中可能包含用户的个人信息。用户只要将该文件放入指定的目录,就可以让软件成为正式版。该文件一般是放在软件的安装目录中或系统目录下。软件每次启动时,从该文件中读取数据,然后利用某种算法进行处理,根据处理的结果判断是否为正确的注册文件,如果正确则以注册版模式来运行。 字串9
这种保护方法使用也不多,但是,我个人认为,比时间限制要好。
4.4 CD-check
即光盘保护技术。程序在启动时判断光驱中的光盘上是否存在特定的文件,如果不存在则认为用户没有正版光盘,拒绝运行。在程序运行的过程当中一般不再检查光盘的存在与否。Windows下的具体实现一般是这样的:先用GetLogicalDriveStrings( )或GetLogicalDrives( )得到系统中安装的所有驱动器的列表,然后再用GetDriveType( )检查每一个驱动器,如果是光驱则用CreateFileA( )或FindFirstFileA( )等函数检查特定的文件存在与否,并可能进一步地检查文件的属性、大小、内容等。
4.5 反跟踪技术(Anti-Debug)
好的软件保护都要和反跟踪技术结合在一起。如果没有反跟踪技术,软件等于直接裸露在 Cracker 面前。这里说的反跟踪,指的是反动态跟踪。即防止 Cracker 用 SoftICE 之类的调试器动态跟踪,分析软件。当前的这类软件还有如 TRW 、ICEDUMP 等等。反跟踪技术一般是具有针对性的,即针对某种调试器的反跟踪,而不能防止所有的调试器跟踪,如果有新的破解工具出现,就需要相应的反跟踪技术 。
这种技术一般是检测这些特定的调试器是否驻留内存,如果驻留内存,就认为被跟踪,从而拒绝执行,或进行一些惩罚性措施 。还有一些检测方法,如假设这些调试器在内存中,软件和这些调试器通信,如果结果合乎这些调试器的输出 。就认为被跟踪 。或者在内存中搜寻这些调试器的特征串,如果找到,就认为被跟踪 。有的甚至用中断钩子、SEH(Structural Exception Handle,即结构化异常处理)检测调试器。

字串2

4.6 反-反汇编技术(Anti- Disassmbly)
即 Anti-Disassmbly 。可针对专门的反汇编软件设计的"陷阱",让反汇编器陷入死循环,但这种方法没有通用性。
一般是使用花指令 。这种方法有通用性,即所有的反汇编器都可以用这种方法来抵挡 。这种方法主要是利用不同的机器指令包含的字节数并不相同,有的是单字节指令,有的是多字节指令。对于多字节指令来说,反汇编软件需要确定指令的第一个字节的起始位置,也就是操作码的位置,这样才能正确地反汇编这条指令,否则它就可能反汇编成另外一条指令了。并且,多字节,指令长度不定,使得反汇编器在错误译码一条指令后,接下来的许多条指令都会被错误译码 。所以,这种方法是很有效的 。
实施方法:在程序中加入一些无用的字节来干扰反汇编软件的判断,从而使得它错误地确定指令的起始位置,那么也就达到了干扰反汇编器工作的目的。一般形式如下:

字串4


....
....
jmp  L1
dd   012344578h ;这里是一些随机数,用来干扰反汇编器
                ;对指令的译码
L1:
....
...
4.7 软件狗
软件狗是一种智能型加密工具。它是一个安装在并口、串口等接口上的硬件电路,同时有一套使用于各种语言的接口软件和工具软件。当被狗保护的软件运行时,程序向插在计算机上的软件狗发出查询命令,软件狗迅速计算查询并给出响应,正确的响应保证软件继续运行。如果没有软件狗,程序将不能运行,复杂的软硬件技术结合在一起防止软件盗版。真正有商业价值得软件一般都用软件狗来保护。
平时常见的狗主要有"洋狗"(国外狗)和"土狗"(国产狗)。这里"洋狗"主要指美国的彩虹和以色列的HASP,"土狗"主要有金天地(现在与美国彩虹合资,叫"彩虹天地")、深思、尖石。总的说来,"洋狗"在软件接口、加壳、反跟踪等"软"方面没有"土狗"好,但在硬件上绝对无法破解(应当说破解难度非常大);而"土狗"在软的方面做的很好,但在硬件上不如"洋狗",稍有单片机功力的人,都可以复制。

字串2

4.8 Vbox 保护技术
Vbox 是一个软件 。它是用来保护其它软件的 。凡被 Vbox 保护的软件,一旦过了试用期,就不能再使用了,删了重装也没用,除非删除整个操作系统再重装。
4.9 SalesAgent 保护技术
SalesAgent 保护的软件一般具有 x 天试用再购买的接口,是一种时间限制保护方式。才用这种保护方式的软件主要有 Macromedia Flash 4 、DreameWaver 等等。
4.10 SecuROM 保护技术
SecuROM (http://www.securom.com)是Sony 开发的一种商业光盘加密技术,它可以阻止用户对加密光盘的复制,被保护的光盘上有 CMS16.dll 、cms32_95.dll 、cms32_nt.dll 这几个文件。很多游戏光盘才用这种保护技术。
4.11 软盘加密
通过在软盘上格式化一些非标准磁道,在这些磁道上写入一些数据,如软件的解密密钥等等。这种软盘成为"钥匙盘"。软件运行时用户将软盘插入,软件读取这些磁道中的数据,判断是否合法的"钥匙盘"。
软盘加密还有其它一些技术,如弱位加密等等。
随着近年来软盘的没落,这种方法基本上退出了历史舞台。
4.12 将软件与机器硬件信息结合
用户得到(买到或从网上下载)软件后,安装时软件从用户的机器上取得该机器的一些硬件信息(如硬盘序列号、BOIS序列号等等),然后把这些信息和用户的序列号、用户名等进行计算,从而在一定程度上将软件和硬件部分绑定。在我的加壳程序中将使用这种方法和其它方法的结合,后面会详细说明。
字串5

4.13 加壳
就是在完整的软件上--已编译连接,可以运行的程序上,加上一个"壳",这个"壳",对软件进行保护,这些壳一般综合运用了4.1~4.6 节所述的软件保护技术。因为我的设计方案中使用了加壳技术,后面将会详细说明,这里不再赘述。
字串1

10.1 总结
通过对PE文件及Windows底层运作机制的深刻剖析,通过Internet,用数字签名,散列,密钥交换等可靠的密码学算法,对软件进行加密保护,加密强度很高,破解难度也很高,在有些方面甚至比一些商业加密软件还要出色。
由于在我国现阶段软件业的特殊需要,加密软件以其特殊的作用,还将在今后很长一段时间中扮演知识产权保护者的角色。加密与解密之间或是说反盗版与盗版之间的斗争还将继续进行下去。我们的目标就是让加密技术在大部分时间里保持对解密技术的技术优势,不断研究新型的加密方法,使解密的技术、时间、资源成本超出被保护软件的研制成本和实用时效,从而在实际意义上保护软件在其生存周期中不被盗版。

字串3

想看全文请进:http://www.xmlasp.net/n935c43.aspx

字串4


Tags:技术 加密 软件 用户 保护 文件
来源:
您的评论
用户名:新注册) 密码: 匿名评论 [所有评论]

·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为