- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
浅谈软件加密与解密 主讲人:刘鑫 主要内容 1 浅谈软件加密 2 神秘的解密 3 黑客的智慧——免杀 4 保护我们的软件 传统软件保护技术 传统的软件保护技术似乎有一个通病: 密码算法并不太为人们关心,因为大多数时候软件加密本身实现的都是一种编程的技巧…… 软盘保护 即钥匙盘,在普通软盘上格式化一些非标准扇区,只有自己的程序可以读这些扇区的内容。在这些扇区上写入密钥,验证信息等,软件执行时读取这些信息并验证。 近年来软盘的使用量大大下降,其实用性已经不比从前。并且,现在这种方法已经不能抵挡解密者的攻击。 软件狗 安装在并口、串口等接口上的硬件电路,同时有一套适用于各种语言的接口软件和工具软件。当被狗保护的软件运行时,程序向插在计算机上的软件狗发出命令让它执行,根据执行结果验证软件是否合法。 这种方法需要附加的硬件,成本比较高,用户使用起来也不方便。 序列号保护 软件要求用户输入用户名,发送给开发者,由开发者根据用户名计算出序列号,返回给用户,在用户端验证。 数学原理: 序列号 = F(用户名)或 用户名称 = F逆(序列号) 如果有一对 (序列号,用户名) 被散发,任何人都可以用这对 (序列号,用户名) “注册”软件。 什么是壳 壳就是保护程序不被修改或反编译的一段程序 加壳:其实是利用特殊的算法,对EXE、DLL文件里的资源进行压缩。类似WINZIP 的效果,只不过这个压缩之后的文件,可以独立运行,解压过程完全隐蔽,都在内存中完成。解压原理,是加壳工具在文件头里加了一段指令,告诉CPU,怎么才能解压自己。 当你加壳时,其实就是给可执行的文件加上个外衣。用户执行的只是这个外壳程序。当你执行这个程序的时候这个壳就会把原来的程序在内存中解开,以后的就交给真正的程序。所以,这些的工作只是在内存中运行的,是不可以了解具体是怎么样在内存中运行的。 通常说的对外壳加密,都是指很多网上免费或者非免费的软件,被一些专门的加壳程序加壳,基本上是对程序的压缩或者不压缩。因为有的时候程序会过大,需要压缩。但是大部分的程序是因为防止反跟踪,防止程序被人跟踪调试,防止算法程序不想被别人静态分析。加密代码和数据,保护你的程序数据的完整性。不被修改或者窥视你程序的内幕。 壳的介绍 所有压缩壳:upx、AsPacK、UPacK等,初级保护壳:yC、Softsentry、Visual Protect、PESHiELD、Armadillo Standard Protection、tELock、PESpin等 中级保护壳:Armadillo CopyMem-II、ASProtect V1.X、NTkrnl Protector、PE-Armor、Dongles、SVKProtect、Obsidium等 高级保护壳:EncryptPE、Private exe Protector、Armadillo Nanomites、ASProtect V2.X、EXECryptor、StarForce、SafeDisc、VMProtect、Themida等 演示脱壳! 神秘的解密 很多人可能觉得解密很神秘,那么解密神秘吗? 到底什么是解密呢?简单点且不太准确的说,就是解开密码。去掉限制。有时我们也称为破解(crack),做破解的人我们称为cracker。 你见过破解的东西吗? 当然,你用的Office 2003是花多少钱买的? 4块?10块?哇,好贵啊!可是你知道正版的多少钱吗? 这里是微软提供的价格 直接从Microsoft订购 Office Professional Edition 2003,新用户价格 Office Professional Edition 2003 RMB 3,822 生活中基本所有用过的杀毒软件都是破解的! 以注册码为例 我们把用户名按照某种方法运算得到一个真正的注册码和用户输入的进行比较不就知道了吗?也就是 真正的注册码 = f(用户名) Y = f(x) 然后就是很经典的比较了,为什么说经典呢? 因为有60%的软件是这么做的。 汇编 比较 那么上面的流程在汇编语言里面是怎么实现的呢? 比较有2种方式,直接和间接,直接就是用: cmp x, y (比较值或者短字符串) je (jne) label 程序比较 间接的呢?调用一个子程序比较,如下面的代码 if (strcmp(x, y)) //如果strcmp返回值是1 printf(“right”); else……………..//当然是错误拉 用汇编语言描述呢? push x; push y; call strcmp; test
文档评论(0)