软件加密技术及实现毕业论文(可编辑) .doc
《软件加密技术及实现毕业论文(可编辑) .doc》由会员分享,可在线阅读,更多相关《软件加密技术及实现毕业论文(可编辑) .doc(28页珍藏版)》请在三一办公上搜索。
1、 软件加密技术及实现雷 鹏( 桂林电子工业学院 计算机系 ) 摘 要 当今盗版软件的泛滥成灾几乎已经成为了我们中国民族软件的灾难,为了防止软件的非法复制、盗版,保护软件开发商的利益,就必须对软件进行加密保护。现在市面上有许多反盗版软件,但这类软件多是单机处理,并且只使用简单的加密手段,很容易被解密者破解。 本文描述了一个通过Internet,集加密和电子注册于一身的完善的软件保护方案。该方案基于多种密码学意义上可靠的算法,如对称加密算法,散列算法,数字签名,密钥交换等等。通过对Windows下PE可执行文件的结构及载入机制进行深刻的剖析, 巧妙的使用这些密码学算法及多种反破解方案对PE文件进行
2、加密保护。 在该方案的实现中,使用CryptoAPI中的数字签名算法RSA,加密算法RC2和RC4,散列算法SHA,同时自己编写了使用了MD5算法用于快速计算大量数据的摘要;网络接口使用WinSocket;编程语言选用汇编语言和C+混合编程方式;反破解方案有检测文件完整性、检测代码完整性、反跟踪、反-反汇编、反Dump、代码变形等等。 由于使用了可靠的密码学算法,使软件加密的强度大大提高;由于使用了Internet在线注册方式,用户使用也非常方便。 关键词 加密 ;数字签名 ;散列;反跟踪 ;电子注册 Software Protection technique and its realizat
3、ionLEI Peng ( GuiLin Institute of Electronic TechnologyThe Department of Computing ) Abstract The flooding of pirate software has been a calamity of our national software industryIn order to prevent software from pirate , and protect the profit of the software developer , they must encrypt their sof
4、tware to get a protectionThere are several software protection tools in the market currently , but these tools were standalone 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 prote
5、ction scheme which integrate the encryption and electronic registerThis scheme is based on multiple reliable cryptographic algorithms such as symmetric encryption algorithm , digital signature , hashing and key exchangeThe PE file format Portable Executable File Format and its loading mechanism unde
6、r Windows are dissected thoroughly in this thesisThen these cryptographic algorithms and several anti-crack method 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 algori
7、thm etc in MicroSoft CryptoAPI are usedIn order to increase the performace of caculate the digest of large number of data, MD5 hashing algorithm was rewrittenWinSocket API is used as the network interfaceThe blend of C+ and assembly are used for easily contoling the bottom layer of the system and si
8、mplify the programmingThe anti-crack method consits the integralization of the file checking , the integralization of the code checking , and anti-debug , anti-disassembly , anti-dump and code metamorphose etc The reliable cyrpto algorithms guarantee the crypto strengthAs a result of online register
9、 , the retail users and the software developers get convenience Key wordsEncrypt ; Digital Signature ; Hashing ; Anti-Debug ; Electronic Register 目 录1概述12密码学简介2.1概念32.2对称密码算法62.3公开密码算法62.4单向散列函数72.5数字签名83Windows 环境下 PE 文件简介3.1WIN32 与 PE 基本概念103.2PE首部123.3PE文件的导入表144当前流行的一些软件保护技术4.1序列号保护214.2时间限制224.
10、3Key File 保护234.4CD-check234.5反跟踪技术(Anti-Debug)234.6反-反汇编技术(Anti- Disassmbly)244.7软件狗254.8Vbox 保护技术254.9SalesAgent 保护技术264.10SecuROM 保护技术264.11软盘加密264.12将软件与机器硬件信息结合264.13加壳275该软件的设计思想5.1传统保护的不足285.2网络的流行295.3我的方案295.4该方案的可行性分析296该软件的整体构架、开发工具及方法6.1需求分析326.2整体框架356.3各取所长(汇编与 C/C+ 各取所长)356.4C/C+ 与汇编语
11、言混合编程时的互调协议366.5该软件中各模块对语言特性的限制及解决方法406.6C/C+ 和汇编语言的预编译457该软件的实现及技术细节7.1CryptoAPI 简介477.2几个公共函数和宏497.3模块共用的结构体定义547.4Shield 模块567.4.1壳程序中API和库函数的处理597.4.2壳程序主体627.4.3加密壳程序637.4.4运行中修改自身代码647.4.5代码散列校验647.4.6跳转到客户程序入口657.4.7载入并销毁 Client 程序的 ImportTable667.4.8自毁壳程序代码697.4.9编译方法707.5Merge 模块717.6Regist
12、er 模块767.7Server 模块777.8软件授权协议的实现787.9Client的代码(数据)的加密/解密流程图示828使用说明及演示8.1使用说明838.2演示及效果839限制、不足与展望9.1使用该软件的限制869.2该软件的不足869.3对该软件的展望8710结束语10.1总结9110.2致谢91参考文献92概述 我引用应用密码学作者Bruce Schneier的话: 世界上有两种密码:一种是防止你的小妹妹看你的文件;另一种是防止当局者阅读你的文件资料。 如果把一封信锁在保险柜中,把保险柜藏在纽约的某个地方,然后告诉你去看这封信。这并不是安全,而是隐藏。相反,如果把一封信锁在保险
13、柜中,然后把保险柜及其设计规范和许多同样的保险柜给你,以便你和世界上最好的开保险柜的专家能够研究锁的装置。而你还是无法打开保险柜去读这封信,这样才是安全的。 意思是说,一个密码系统的安全性只在于密钥的保密性,而不在算法的保密性。 对纯数据的加密的确是这样。对于你不愿意让他看到这些数据(数据的明文)的人,用可靠的加密算法,只要破解者不知道被加密数据的密码,他就不可解读这些数据。 但是,软件的加密不同于数据的加密,它只能是“隐藏”。不管你愿意不愿意让他(合法用户,或 Cracker)看见这些数据(软件的明文),软件最终总要在机器上运行,对机器,它就必须是明文。既然机器可以“看见”这些明文,那么 C
14、racker,通过一些技术,也可以看到这些明文。 于是,从理论上,任何软件加密技术都可以破解。只是破解的难度不同而已。有的要让最高明的 Cracker 忙上几个月,有的可能不费吹灰之力,就被破解了。 所以,反盗版的任务(技术上的反盗版,而非行政上的反盗版)就是增加 Cracker 的破解难度。让他们花费在破解软件上的成本,比他破解这个软件的获利还要高。这样 Cracker 的破解变得毫无意义?谁会花比正版软件更多的钱去买盗版软件 ? 然而,要做到“难破解”,何尝容易? Sony 曾宣称的超强反盗版(Key 2 Audio音乐 CD反盗版),使用了很尖端的技术,然而最近却被一枝记号笔破解了,成为
15、人们的饭后笑料! 所以,很多看上去很好的技术,可能在 Cracker 面前的确不堪一击。就像马其诺防线一样,Cracker 不从你的防线入手,而是“绕道”。这样,让你的反盗版技术在你做梦也想不到的地方被 Crack 了。 为什么会这样呢 ?归根到底是因为软件在机器上运行,并且软件和机器是分离的?这一点是关键,如果软件和硬件完全绑定,不能分离,是可以做到象 IDEA 之类几乎不可破解的系统的。这将在后面谈传统软件保护技术时详细说明。 对我的这个解决方案,我不能保证Crack高手在几天之内不能破解它,我只能说:“在这个软件中,我尽量堵住了当前破解者普遍使用的方法以及“我想得到”的可能的缺口。”但是
16、我相信,倾注了我三个月心血的反盗版软件,决不是一个“玩具式”的反盗版软件。密码学简介概念1 发送者和接收者 假设发送者想发送消息给接收者,且想安全地发送信息:她想确信偷听者不能阅读发送的消息。2 消息和加密 消息被称为明文。用某种方法伪装消息以隐藏它的内容的过程称为加密,加了密的消息称为密文,而把密文转变为明文的过程称为解密。图2-1表明了这个过程。图2-1 加密和解密 明文用M(消息)或P(明文)表示,它可能是比特流(文本文件、位图、数字化的语音流或数字化的视频图像)。至于涉及到计算机,P是简单的二进制数据。明文可被传送或存储,无论在哪种情况,M指待加密的消息。 密文用C表示,它也是二进制数
17、据,有时和M一样大,有时稍大(通过压缩和加密的结合,C有可能比P小些。然而,单单加密通常达不到这一点)。加密函数E作用于M得到密文C,用数学表示为: E(M)C.相反地,解密函数D作用于C产生M D(C)M.先加密后再解密消息,原始的明文将恢复出来,下面的等式必须成立:D(E(M)M3 鉴别、完整性和抗抵赖 除了提供机密性外,密码学通常有其它的作用:a 鉴别 消息的接收者应该能够确认消息的来源;入侵者不可能伪装成他人。b 完整性检验 消息的接收者应该能够验证在传送过程中消息没有被修改;入侵者不可能用假消息代替合法消息。c 抗抵赖 发送者事后不可能虚假地否认他发送的消息。4 算法和密钥 密码算法
18、也叫密码,是用于加密和解密的数学函数。(通常情况下,有两个相关的函数:一个用作加密,另一个用作解密) 如果算法的保密性是基于保持算法的秘密,这种算法称为受限制的算法。受限制的算法具有历史意义,但按现在的标准,它们的保密性已远远不够。大的或经常变换的用户组织不能使用它们,因为每有一个用户离开这个组织,其它的用户就必须改换另外不同的算法。如果有人无意暴露了这个秘密,所有人都必须改变他们的算法。 更糟的是,受限制的密码算法不可能进行质量控制或标准化。每个用户组织必须有他们自己的唯一算法。这样的组织不可能采用流行的硬件或软件产品。但窃听者却可以买到这些流行产品并学习算法,于是用户不得不自己编写算法并予
19、以实现,如果这个组织中没有好的密码学家,那么他们就无法知道他们是否拥有安全的算法。 尽管有这些主要缺陷,受限制的算法对低密级的应用来说还是很流行的,用户或者没有认识到或者不在乎他们系统中内在的问题。 现代密码学用密钥解决了这个问题,密钥用K表示。K可以是很多数值里的任意值。密钥K的可能值的范围叫做密钥空间。加密和解密运算都使用这个密钥(即运算都依赖于密钥,并用K作为下标表示),这样,加/解密函数现在变成: EKMC DKCM.这些函数具有下面的特性(见图2-2):DK(EK(M)M.图2-2 使用一个密钥的加/解密图2-3 使用两个密钥的加/解密 有些算法使用不同的加密密钥和解密密钥(见图2-
20、3),也就是说加密密钥K1与相应的解密密钥K2不同,在这种情况下:EK1MCDK2CMDK2 EK1MM 所有这些算法的安全性都基于密钥的安全性;而不是基于算法的细节的安全性。这就意味着算法可以公开,也可以被分析,可以大量生产使用算法的产品,即使偷听者知道你的算法也没有关系;如果他不知道你使用的具体密钥,他就不可能阅读你的消息。密码系统由算法、以及所有可能的明文、密文和密钥组成的。 基于密钥的算法通常有两类:对称算法和公开密钥算法。下面将分别介绍:对称密码算法 对称算法有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,反过来也成立。在大多数对称算法中,加/解密密钥是相同的。这些算法也
21、叫秘密密钥算法或单密钥算法,它要求发送者和接收者在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都能对消息进行加/解密。只要通信需要保密,密钥就必须保密。 对称算法的加密和解密表示为:EK(M)CDK(C)M 对称算法可分为两类。一次只对明文中的单个比特(有时对字节)运算的算法称为序列算法或序列密码。另一类算法是对明文的一组比特亚行运算,这些比特组称为分组,相应的算法称为分组算法或分组密码。现代计算机密码算法的典型分组长度为64比特?这个长度大到足以防止分析破译,但又小到足以方便使用(在计算机出现前,算法普遍地每次只对明文的一个字符运算,可认为是序列密码对字符序
22、列的运算)。公开密码算法 公开密钥算法(也叫非对称算法)是这样设计的:用作加密的密钥不同于用作解密的密钥,而且解密密钥不能根据加密密钥计算出来(至少在合理假定的长时间内)。之所以叫做公开密钥算法,是因为加密密钥能够公开,即陌生者能用加密密钥加密信息,但只有用相应的解密密钥才能解密信息。在这些系统中,加密密钥叫做公开密钥(简称公钥),解密密钥叫做私人密钥(简称私钥)。私人密钥有时也叫秘密密钥。为了避免与对称算法混淆,此处不用秘密密钥这个名字。 用公开密钥K加密表示为EKMC. 虽然公开密钥和私人密钥是不同的,但用相应的私人密钥解密可表示为:DKCM 有时消息用私人密钥加密而用公开密钥解密,这用于
23、数字签名(后面将详细介绍),尽管可能产生混淆,但这些运算可分别表示为:EKMCDKCM 当前的公开密码算法的速度,比起对称密码算法,要慢的多,这使得公开密码算法在大数据量的加密中应用有限。单向散列函数 单向散列函数 HM 作用于一个任意长度的消息 M,它返回一个固定长度的散列值 h,其中 h 的长度为 m 。 输入为任意长度且输出为固定长度的函数有很多种,但单向散列函数还有使其单向的其它特性:1 给定 M ,很容易计算 h ;2 给定 h ,根据 HM h 计算 M 很难 ;3 给定 M ,要找到另一个消息 M 并满足 HM HM 很难。在许多应用中,仅有单向性是不够的,还需要称之为“抗碰撞”
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件加密技术及实现毕业论文可编辑 软件加密 技术 实现 毕业论文 编辑

链接地址:https://www.31ppt.com/p-3994108.html