ImageVerifierCode 换一换
格式:DOCX , 页数:65 ,大小:78.75KB ,
资源ID:5999568      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5999568.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(软件加密技术及实现.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

软件加密技术及实现.docx

1、软件加密技术及实现软件加密技术及实现 加入收藏 网站地图 网站搜索 简 繁 默 首页 图片 热点 专题 动网新闻.Net 技术文章 Flash欣赏 新闻信息 网络文摘 星座命理 英语学习 论坛 首页 技术文章 加密解密算法 阅读新闻 软件加密技术及实现 日期:2004-07-30来源:csdn 作者:whinah字体:大 中 小 软件加密技术及实现 雷 鹏 ( 桂林电子工业学院 计算机系 ) 摘 要 当今盗版软件的泛滥成灾几乎已经成为了我们中国民族软件的灾难,为了防止软件的非法复制、盗版,保护软件开发商的利益,就必须对软件进行加密保护。现在市面上有许多反盗版软件,但这类软件多是单机处理,并且只

2、使用简单的加密手段,很容易被解密者破解。 本文描述了一个通过Internet,集加密和电子注册于一身的完善的软件保护方案。该方案基于多种密码学意义上可靠的算法,如对称加密算法,散列算法,数字签名,密钥交换等等。通过对Windows下PE可执行文件的结构及载入机制进行深刻的剖析, 巧妙的使用这些密码学算法及多种反破解方案对PE文件进行加密保护。 在该方案的实现中,使用CryptoAPI中的数字签名算法RSA,加密算法RC2和RC4,散列算法SHA,同时自己编写了使用了MD5算法用于快速计算大量数据的摘要;网络接口使用WinSocket;编程语言选用汇编语言和C+混合编程方式;反破解方案有检测文件

3、完整性、检测代码完整性、反跟踪、反反汇编、反Dump、代码变形等等。 由于使用了可靠的密码学算法,使软件加密的强度大大提高;由于使用了Internet在线注册方式,用户使用也非常方便。 关键词 加密 ;数字签名 ;散列;反跟踪 ;电子注册 Software Protection technique and its realization LEI Peng ( GuiLin Institute of Electronic Technology . The Department of Computing ) Abstract The flooding of pirate software has

4、been a calamity of our national software industry . In order to prevent software from pirate , and protect the profit of the software developer , they must encrypt their software to get a protection . There are several software protection tools in the market currently , but these tools were standalo

5、ne nine tenths , and they only used simple encryption algorithms , so they could be cracked easily by the crackers . This thesis describes a perfect software encryption and protection scheme which integrate the encryption and electronic register . This scheme is based on multiple reliable cryptograp

6、hic algorithms such as symmetric encryption algorithm , digital signature , hashing and key exchange . The PE file format (Portable Executable File Format) and its loading mechanism under Windows are dissected thoroughly in this thesis . Then these cryptographic algorithms and several anti-crack met

7、hod are used gracefully to encrypt and protect the PE file . Within the realization of this scheme , the RSA digital signature algorithm , RC2 and RC4 encryption algorithm , SHA hasing algorithm etc in MicroSoft CryptoAPI are used . In order to increase the performace of caculate the digest of large

8、 number of data, MD5 hashing algorithm was rewritten . WinSocket API is used as the network interface . The blend of C+ and assembly are used for easily contoling the bottom layer of the system and simplify the programming . The anti-crack method consits the integralization of the file checking , th

9、e integralization of the code checking , and anti-debug , anti-disassembly , anti-dump and code metamorphose etc . The reliable cyrpto algorithms guarantee the crypto strength . As a result of online register , the retail users and the software developers get convenience . Key words Encrypt ; Digita

10、l Signature ; Hashing ; Anti-Debug ; Electronic Register 目 录 1 概述 1 2 密码学简介 2.1 概念 3 2.2 对称密码算法 6 2.3 公开密码算法 6 2.4 单向散列函数 7 2.5 数字签名 8 3 Windows 环境下 PE 文件简介 3.1 WIN32 与 PE 基本概念 10 3.2 PE首部 12 3.3 PE文件的导入表 14 4 当前流行的一些软件保护技术 4.1 序列号保护 21 4.2 时间限制 22 4.3 Key File 保护 23 4.4 CD-check 23 4.5 反跟踪技术(Anti-D

11、ebug) 23 4.6 反反汇编技术(Anti- Disassmbly) 24 4.7 软件狗 25 4.8 Vbox 保护技术 25 4.9 SalesAgent 保护技术 26 4.10 SecuROM 保护技术 26 4.11 软盘加密 26 4.12 将软件与机器硬件信息结合 26 4.13 加壳 27 5 该软件的设计思想 5.1 传统保护的不足 28 5.2 网络的流行 29 5.3 我的方案 29 5.4 该方案的可行性分析 29 6 该软件的整体构架、开发工具及方法 6.1 需求分析 32 6.2 整体框架 35 6.3 各取所长(汇编与 C/C+ 各取所长) 35 6.4

12、C/C+ 与汇编语言混合编程时的互调协议 36 6.5 该软件中各模块对语言特性的限制及解决方法 40 6.6 C/C+ 和汇编语言的预编译 45 7 该软件的实现及技术细节 7.1 CryptoAPI 简介 47 7.2 几个公共函数和宏 49 7.3 模块共用的结构体定义 54 7.4 Shield 模块 56 7.4.1 壳程序中API和库函数的处理 59 7.4.2 壳程序主体 62 7.4.3 加密壳程序 63 7.4.4 运行中修改自身代码 64 7.4.5 代码散列校验 64 7.4.6 跳转到客户程序入口 65 7.4.7 载入并销毁 Client 程序的 ImportTabl

13、e 66 7.4.8 自毁壳程序代码 69 7.4.9 编译方法 70 7.5 Merge 模块 71 7.6 Register 模块 76 7.7 Server 模块 77 7.8 软件授权协议的实现 78 7.9 Client的代码(数据)的加密/解密流程图示 82 8 使用说明及演示 8.1 使用说明 83 8.2 演示及效果 83 9 限制、不足与展望 9.1 使用该软件的限制 86 9.2 该软件的不足 86 9.3 对该软件的展望 87 10 结束语 10.1 总结 91 10.2 致谢 91 参考文献 92 1 概述 我引用应用密码学作者Bruce Schneier的话: 世界上

14、有两种密码:一种是防止你的小妹妹看你的文件;另一种是防止当局者阅读你的文件资料。 如果把一封信锁在保险柜中,把保险柜藏在纽约的某个地方,然后告诉你去看这封信。这并不是安全,而是隐藏。相反,如果把一封信锁在保险柜中,然后把保险柜及其设计规范和许多同样的保险柜给你,以便你和世界上最好的开保险柜的专家能够研究锁的装置。而你还是无法打开保险柜去读这封信,这样才是安全的。 意思是说,一个密码系统的安全性只在于密钥的保密性,而不在算法的保密性。 对纯数据的加密的确是这样。对于你不愿意让他看到这些数据(数据的明文)的人,用可靠的加密算法,只要破解者不知道被加密数据的密码,他就不可解读这些数据。 但是,软件的

15、加密不同于数据的加密,它只能是隐藏。不管你愿意不愿意让他(合法用户,或 Cracker)看见这些数据(软件的明文),软件最终总要在机器上运行,对机器,它就必须是明文。既然机器可以看见这些明文,那么 Cracker,通过一些技术,也可以看到这些明文。 于是,从理论上,任何软件加密技术都可以破解。只是破解的难度不同而已。有的要让最高明的 Cracker 忙上几个月,有的可能不费吹灰之力,就被破解了。 所以,反盗版的任务(技术上的反盗版,而非行政上的反盗版)就是增加 Cracker 的破解难度。让他们花费在破解软件上的成本,比他破解这个软件的获利还要高。这样 Cracker 的破解变得毫无意义-谁会

16、花比正版软件更多的钱去买盗版软件 ? 然而,要做到难破解,何尝容易? Sony 曾宣称的超强反盗版(Key 2 Audio音乐 CD反盗版),使用了很尖端的技术,然而最近却被一枝记号笔破解了,成为人们的饭后笑料! 所以,很多看上去很好的技术,可能在 Cracker 面前的确不堪一击。就像马其诺防线一样,Cracker 不从你的防线入手,而是绕道。这样,让你的反盗版技术在你做梦也想不到的地方被 Crack 了。 为什么会这样呢 ?归根到底是因为软件在机器上运行,并且软件和机器是分离的-这一点是关键,如果软件和硬件完全绑定,不能分离,是可以做到象 IDEA 之类几乎不可破解的系统的。这将在后面谈传

17、统软件保护技术时详细说明。 对我的这个解决方案,我不能保证Crack高手在几天之内不能破解它,我只能说:在这个软件中,我尽量堵住了当前破解者普遍使用的方法以及我想得到的可能的缺口。但是我相信,倾注了我三个月心血的反盗版软件,决不是一个玩具式的反盗版软件。 2 密码学简介 2.1 概念 (1) 发送者和接收者 假设发送者想发送消息给接收者,且想安全地发送信息:她想确信偷听者不能阅读发送的消息。 (2) 消息和加密 消息被称为明文。用某种方法伪装消息以隐藏它的内容的过程称为加密,加了密的消息称为密文,而把密文转变为明文的过程称为解密。图2-1表明了这个过程。 图2-1 加密和解密 明文用M(消息)

18、或P(明文)表示,它可能是比特流(文本文件、位图、数字化的语音流或数字化的视频图像)。至于涉及到计算机,P是简单的二进制数据。明文可被传送或存储,无论在哪种情况,M指待加密的消息。 密文用C表示,它也是二进制数据,有时和M一样大,有时稍大(通过压缩和加密的结合,C有可能比P小些。然而,单单加密通常达不到这一点)。加密函数E作用于M得到密文C,用数学表示为: E(M)=C. 相反地,解密函数D作用于C产生M D(C)=M. 先加密后再解密消息,原始的明文将恢复出来,下面的等式必须成立: D(E(M)=M (3) 鉴别、完整性和抗抵赖 除了提供机密性外,密码学通常有其它的作用:. (a) 鉴别 消

19、息的接收者应该能够确认消息的来源;入侵者不可能伪装成他人。 (b) 完整性检验 消息的接收者应该能够验证在传送过程中消息没有被修改;入侵者不可能用假消息代替合法消息。 (c) 抗抵赖 发送者事后不可能虚假地否认他发送的消息。 (4) 算法和密钥 密码算法也叫密码,是用于加密和解密的数学函数。(通常情况下,有两个相关的函数:一个用作加密,另一个用作解密) 如果算法的保密性是基于保持算法的秘密,这种算法称为受限制的算法。受限制的算法具有历史意义,但按现在的标准,它们的保密性已远远不够。大的或经常变换的用户组织不能使用它们,因为每有一个用户离开这个组织,其它的用户就必须改换另外不同的算法。如果有人无

20、意暴露了这个秘密,所有人都必须改变他们的算法。 更糟的是,受限制的密码算法不可能进行质量控制或标准化。每个用户组织必须有他们自己的唯一算法。这样的组织不可能采用流行的硬件或软件产品。但窃听者却可以买到这些流行产品并学习算法,于是用户不得不自己编写算法并予以实现,如果这个组织中没有好的密码学家,那么他们就无法知道他们是否拥有安全的算法。 尽管有这些主要缺陷,受限制的算法对低密级的应用来说还是很流行的,用户或者没有认识到或者不在乎他们系统中内在的问题。 现代密码学用密钥解决了这个问题,密钥用K表示。K可以是很多数值里的任意值。密钥K的可能值的范围叫做密钥空间。加密和解密运算都使用这个密钥(即运算都

21、依赖于密钥,并用K作为下标表示),这样,加/解密函数现在变成: EK(M)=C DK(C)=M. 这些函数具有下面的特性(见图2-2): DK(EK(M)=M. 图2-2 使用一个密钥的加/解密 图2-3 使用两个密钥的加/解密 有些算法使用不同的加密密钥和解密密钥(见图2-3),也就是说加密密钥K1与相应的解密密钥K2不同,在这种情况下: EK1(M)=C DK2(C)=M DK2 (EK1(M)=M 所有这些算法的安全性都基于密钥的安全性;而不是基于算法的细节的安全性。这就意味着算法可以公开,也可以被分析,可以大量生产使用算法的产品,即使偷听者知道你的算法也没有关系;如果他不知道你使用的具

22、体密钥,他就不可能阅读你的消息。 密码系统由算法、以及所有可能的明文、密文和密钥组成的。 基于密钥的算法通常有两类:对称算法和公开密钥算法。下面将分别介绍: 2.2 对称密码算法 对称算法有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,反过来也成立。在大多数对称算法中,加/解密密钥是相同的。这些算法也叫秘密密钥算法或单密钥算法,它要求发送者和接收者在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都能对消息进行加/解密。只要通信需要保密,密钥就必须保密。 对称算法的加密和解密表示为: EK(M)=C DK(C)=M 对称算法可分为两类。一次只对明文中的

23、单个比特(有时对字节)运算的算法称为序列算法或序列密码。另一类算法是对明文的一组比特亚行运算,这些比特组称为分组,相应的算法称为分组算法或分组密码。现代计算机密码算法的典型分组长度为64比特-这个长度大到足以防止分析破译,但又小到足以方便使用(在计算机出现前,算法普遍地每次只对明文的一个字符运算,可认为是序列密码对字符序列的运算)。 2.3 公开密码算法 公开密钥算法(也叫非对称算法)是这样设计的:用作加密的密钥不同于用作解密的密钥,而且解密密钥不能根据加密密钥计算出来(至少在合理假定的长时间内)。之所以叫做公开密钥算法,是因为加密密钥能够公开,即陌生者能用加密密钥加密信息,但只有用相应的解密

24、密钥才能解密信息。在这些系统中,加密密钥叫做公开密钥(简称公钥),解密密钥叫做私人密钥(简称私钥)。私人密钥有时也叫秘密密钥。为了避免与对称算法混淆,此处不用秘密密钥这个名字。 用公开密钥K加密表示为 EK(M)=C. 虽然公开密钥和私人密钥是不同的,但用相应的私人密钥解密可表示为: DK(C)=M 有时消息用私人密钥加密而用公开密钥解密,这用于数字签名(后面将详细介绍),尽管可能产生混淆,但这些运算可分别表示为: EK(M)=C DK(C)=M 当前的公开密码算法的速度,比起对称密码算法,要慢的多,这使得公开密码算法在大数据量的加密中应用有限。 2.4 单向散列函数 单向散列函数 H(M)

25、作用于一个任意长度的消息 M,它返回一个固定长度的散列值 h,其中 h 的长度为 m 。 输入为任意长度且输出为固定长度的函数有很多种,但单向散列函数还有使其单向的其它特性: (1) 给定 M ,很容易计算 h ; (2) 给定 h ,根据 H(M) = h 计算 M 很难 ; (3) 给定 M ,要找到另一个消息 M 并满足 H(M) = H(M) 很难。 在许多应用中,仅有单向性是不够的,还需要称之为抗碰撞的条件: 要找出两个随机的消息 M 和 M,使 H(M) = H(M) 满足很难。 由于散列函数的这些特性,由于公开密码算法的计算速度往往很慢,所以,在一些密码协议中,它可以作为一个消息

26、 M 的摘要,代替原始消息 M,让发送者为 H(M) 签名而不是对 M 签名 。 如 SHA 散列算法用于数字签名协议 DSA中。 2.5 数字签名 提到数字签名就离不开公开密码系统和散列技术。 有几种公钥算法能用作数字签名。在一些算法中,例如RSA,公钥或者私钥都可用作加密。用你的私钥加密文件,你就拥有安全的数字签名。在其它情况下,如DSA,算法便区分开来了?数字签名算法不能用于加密。这种思想首先由Diffie和Hellman提出 。 基本协议是简单的 : (1) A 用她的私钥对文件加密,从而对文件签名。 (2) A 将签名的文件传给B。 (3) B用A的公钥解密文件,从而验证签名。 这个

27、协议中,只需要证明A的公钥的确是她的。如果B不能完成第(3)步,那么他知道签名是无效的。 这个协议也满足以下特征: (1) 签名是可信的。当B用A的公钥验证信息时,他知道是由A签名的。 (2) 签名是不可伪造的。只有A知道她的私钥。 (3) 签名是不可重用的。签名是文件的函数,并且不可能转换成另外的文件。 (4) 被签名的文件是不可改变的。如果文件有任何改变,文件就不可能用A的公钥验证。 (5) 签名是不可抵赖的。B不用A的帮助就能验证A的签名。 在实际应用中,因为公共密码算法的速度太慢,签名者往往是对消息的散列签名而不是对消息本身签名。这样做并不会降低签名的可信性。 本章仅对密码学进行了一些

28、简要的介绍,更多的请参阅参考文献1。 3 Windows 环境下 PE 文件简介 3.1 WIN32 与 PE 基本概念 只要用过电脑的人都知道什么是 Windows,Windows95 已经是过时的昨日黄花了,Windows98 也已推出将近四年了。2000 年又推出了Windows2000,今年又推出了 WindowsXP,微软的操作系统更新速度是如此的快,以至于昨天还在使用的东西,在今天看来就已经过时了。Windows98 以后,微软传言不在推出 9x 内核的操作系统,但是2000 年下半年却正式推出了 WindowsMillennium,简称 Win.Me 。然而从 WindowsXP

29、 的推出,可以断言,微软不会在升级 Win9x 操作系统了。Windows2000 和 WindowsXP 都是基于 NT 内核的。 所有这些操作系统都使用一种可移植可执行文件格式(Portable Executable File Format),简称PE文件格式。 下面简短介绍一下 PE 文件的一些概念。详细内容请参阅参考文献14。 Windows NT 继承了 VAX? VMS? 和 UNIX? 的传统。许多 Windows NT 的创始人在进入微软前都在这些平台上进行设计和编码。当他们开始设计 Windows NT 时,很自然的,为了最小化工程的启动时间,他们会使用以前写好的并且已经测试

30、过的工具。用这些工具生成并且工作的可执行文件和 OBJ 文件格式叫做 COFF(Common Object File Format 的首字母缩写)。COFF 的年龄不超过八年。 COFF 本身是一个很好的起点,但是需要扩展到一个现代操作系统如 Windows 95 和 Windows NT 就要进行一些更新。其结果就是产生了(PE格式)可移植可执行文件格式。它被称为可移植的是因为在所有平台(如x86,Alpha,MIPS等等)上实现的WindowsNT 都使用相同的可执行文件格式。当然了,也有许多不同的东西如二进制代码的CPU指令。重要的是操作系统的装入器和程序设计工具不需要为任何一种CPU完

31、全重写就能达到目的。 关于PE文件最重要的是,磁盘上的可执行文件和它被WINDOWS载入内存之后(PE文件载入内存之后称为PE映像)是非常相像的(如图 3-1)。WINDOWS载入器不必为从磁盘上载入一个文件而辛辛苦苦创建一个进程。载入器使用内存映射文件机制把文件中相似的块映射到虚拟空间中。构造式的进行分析,一个PE文件类似一个预制的屋子。它本质上开始于这样一个空间,这个空间后面有几个把它连到其余空间的机件(就是说,把它联系到它的DLL上,等等)。这对PE格式的DLL式一样容易应用的。一旦这个模块被载入,Windows 就可以有效的把它和其它内存映射文件同等对待。 图 3-1 PE文件和PE映像的布局很相似 对Win32来讲,模块所使用的所有代码,数据,资源,导入表,和其它需要的模块数据结构都在一个连续的内存块中。在这种形势下,你只需要知道载入器把可执

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1