汇编语言之加密与解密

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

汇编语言之加密与解密
入门:研究解密技术有助于掌握一些系统底层知识,系统底层知识绝对是构造起大型软件的坚实基础。

许多程序发展,都经历了这一锻炼过程的。

而大多数人可能认为解密是一门高深的学问。

造成这种原因是以前这方面的技术资料缺乏,从而将“解密”这一技能“神”化了。

汇编的作用:讨论前,先了解一下计算机中的程序。

高级语言编写的程序,会编译成机器语言在CPU中执行,如Visual C++等。

由于机器语言与汇编语言是一一对应的,因此就可将机器语言转化成汇编语言,这个过程称之为反汇编。

而汇编语言可能读性是比较好的,这样就可分析程序流程,解析其功能了,这个过程就是解密(俗称破解)。

也就是说,解密的基础是建立在汇编语言级别上的,因此想涉足这一领域的朋友,汇编语言一定得学好。

汇编语言是大学计算机的必修课,这方面的书籍品种很多,虽然大多书本是以DOS汇编为讲解平台,但对理解汇编指令功能是没影响的。

学习:等汇编学好了,建议再掌握Win32编程。

Win32程序设计就是API方式的Windows编程,学习Windows API将使您更深入地了解Windows工作方式。

此类书籍有Charles Petzold著的《Windows程序设计》(以VC来讲解)。

另一本是罗云彬著的《Windows环境下32位汇编语言程序设计》,它以MASM汇编为讲解平台。

有了上面这些基础,你就可以参考《加密与解密(第二版)》这本书入门了。

等你解密入门后,建议再看看Matt Pietrek、Jeffrey Ritcher等大师的专著,这些书是每个程序员都应该阅读的:《Windows 95 System Programming Secrets》(中文译名《Windows 95 系靳程式设计大?秘》),《windows高级编程指南》,《Windows2000编程技术内幕》,《Win32系统编程―Windows 2000应用程序开发指南》等。

这样,你就对系统底层有一定的了解了。

到了这个水平后,就可朝软件加密这块发展了,例如编写自己的加壳软件等。

这时,可以阅读本站推出的《软件加密技术内幕》这本新书了,这本书可以让你了解PE的格式,教你如何编写PE分析工作,如何编写加壳工具等。

软件的加密与解密是一个迷人的研究领域,它几乎可以与任意一种计算机技术紧密结合――密码学、程序设计语言、操作系统、数据结构。

而由于这样或者那样的原因,对于这一领域的关注程度一直还处于低温状态。

而这两本书相信会为更多对知识怀有渴望的朋友多开辟一条走向这个领域的道路,并且进而推动这个领域的不断发展。

早期战场:一种简单的加密思路是将被加密程序的IAT数据保存于壳内,然后新建立一个IAT导入表,里面只导入壳需要使用到的函数,比如很多壳都喜欢只导入LoadLibrary和GetProcAddress两个函数,这样其他函数可以再通过这两个函数来动态定位.关于后来例如Asprotect这样的每个dll导入一个函数的做法完全是为了更好的兼容性.将这些数据保存于壳内后,壳在Loader执行的时候就手动加载每一个dll填充每一个函数,这是一种非常简单的加密手段,目的正如我上面所说的,隐藏信息。

因为他脱起来也较简单,等壳装载完毕后,直
接用REC就可以修复.这导致了新加密方法的使用。

中期战场:新的IAT加密方法和上面的加密方法基本上差不多,但是在最后填充函数地址的时候,也就是在壳加载了函数所在DLL和获得函数地址之后并不直接填充到IAT跳转描述表里面,而是保存起来,然后将跳转描述表里面相应位置填充为指向壳的一段代码,这段代码负责动态解密跳转到真正的函数地址.形成一个代理模式.这种方法仍然是现在流行的方法,大部分的加密壳都是基于这个原理的,只不过实现手段上不同而已.有的壳是直接跳转到壳里,然后立马又跳回真正的函数地址,我很能理解这样做的原因,因为我知道写一个复杂的代码连接引擎并不是很容易.大部分壳这个过程是动态的,也就是在loader的时候动态生成跳转代码的,这有一个很致命的缺点,因为这样或多或少的会形成一个magic jmp,因为一般并不是所有函数都能被代理,所以必须还得考虑兼容性的问题,所以很多壳只代理了一部分函数,其他函数也只是获取地址然后填充,这样一个简单的过程,但是他们又不注意将需要代理的函数在加壳时给予区分,而是在loader里面判断是否加密,所以导致magic jmp,这样把所有信息行为都暴露给脱壳者是很不划算的。

发展:现在加解密发展己形成2个分支了,一个就是传统的算法,另一个就是加密壳。

越来越多的软件采用了密码学相关算法,现在要做出一个软件注册机己不象前几年那么容易,这就要求解密者必须要有一定的数学功底和密码学知识,而这些在短时间内是不容易掌握的。

除了密码学的应用,越来越多的软件加壳了,因此要求解密者必须掌握一些脱壳技术,这就使得壳成了解密必须迈过的一个门槛。

壳发展到今天,强度越来越高了,将许多人挡在门外,使得大家望壳兴叹。

高手讨论的脱壳技术新手看不懂,很多人想学脱壳,但看到壳这么难,只好放弃了,造成新手与高手间一个断档。

VB防破解包括如下几下方面:
1、文件完整性,防止被非法修改
2、运行时的校验,防止被LOADER
3、反调试,防止动态跟踪和挂接
4、防静态反汇编分析
5、注册码系统(算法部分,核心内容)
6、加壳防脱壳
7、隐蔽性设计
8、另辟蹊径
由于VB天生的原因,有些功能实现起来非常麻烦,比方说算法部分,如果采用大数运算的话,缺少大数运行库。

所以,有时也可以采用第三方DLL来补充大数的不足。

软件安全发展:当前软件发展的方向主要是软件自身的保护方式被破解,软件bug和漏洞的fix,以及web程序的加密问题,对于web我不多讲因为我们的主题并不是web软件
在保护方面从最早的磁盘保护,到现在的花指令,反跟踪,解释器,等一系列的方法防止软件被破解漏洞方面是这里我们不谈本身功能逻辑错误的bug..这个是
显而易见的。

软件安全的分类
1. 破解
破解和反破解是矛与盾的事情,软件加解密的技术,也是逆向和反逆向的PK,在未来的软件安全发展方面,应该采取的是多种应用,
语言
.net方面因为设计的框架和理念,导致很容易得到源码…
对于非解释语言编译的程序,逆向高手,可以很快的逆向成C代码,而且在工具的辅助下..可以直接获取核心代码.导致软件的脆弱性增加了很多
在保护方面也从反跟踪到虚拟机,核心就是把汇编指令转换成虚拟机的微指令代码!
防止被时间反编译,增加软件逆向的时间和利益的损失减少
2. 漏洞
畸形的文档
文档本身其实只是一个数据文件,但是当我们的解释器,在解释文档的时候很可能就会触发漏洞
变形的数据
在C/S架构的程序上,一般都会使用tcp/ip 或udp等协议进行通讯,在正常的数据通讯的时候不会发现什么问题,但是当传送变形数据包的时候,C端或者S端就会发生错误,导致漏洞的产生
程序本身函数的漏洞
就业
1. 病毒分析
加壳、脱壳
熟练使用softice等调试工具;
C++程序设计、常用算法、数据
熟悉x86系列汇编语言。

熟悉windows API,并有一定C语言编程基础。

对反病毒、反汇编有强烈兴趣。

2. 漏洞分析
丰富的网络攻防经验。

熟悉漏洞利用原理。

熟练使各种安全工具。

良好的英文阅读及理解能力。

3. 保护软件开发
VC或delphi
80x86汇编
实现虚拟机技术
精通反调试
常用的数据加密技术有:
数据加密技术主要分为数据传输加密和数据存储加密。

数据传输加密技术主要是
对传输中的数据流进行加密,常用的有链路加密、节点加密和端到端加密三种方式。

链路加密是传输数据仅在物理层前的数据链路层进行加密,不考虑信源和信宿,它用于保护通信节点间的数据,接收方是传送路径上的各台节点机,信息在每台节点机内都要被解密和再加密,依次进行,直至到达目的地。

与链路加密类似的节点加密方法,是在节点处采用一个与节点机相连的密码装置,密文在该装置中被解密并被重新加密,明文不通过节点机,避免了链路加密节点处易受攻击的缺点。

端到端加密是为数据从一端到另一端提供的加密方式。

数据在发送端被加密,在接收端解密,中间节点处不以明文的形式出现。

端到端加密是在应用层完成的。

在端到端加密中,除报头外的的报文均以密文的形式贯穿于全部传输过程,只是在发送端和接收端才有加、解密设备,而在中间任何节点报文均不解密,因此,不需要有密码设备,同链路加密相比,可减少密码设备的数量。

另一方面,信息是由报头和报文组成的,报文为要传送的信息,报头为路由选择信息,由于网络传输中要涉及到路由选择,在链路加密时,报文和报头两者均须加密。

而在端到端加密时,由于通道上的每一个中间节点虽不对报文解密,但为将报文传送到目的地,必须检查路由选择信息,因此,只能加密报文,而不能对报头加密。

这样就容易被某些通信分析发觉,而从中获取某些敏感信息。

链路加密对用户来说比较容易,使用的密钥较少,而端到端加密比较灵活,对用户可见。

在对链路加密中各节点安全状况不放心的情况下也可使用端到端加密方式。

常用数据加密算法有:
数据加密算法有很多种,密码算法标准化是信息化社会发展得必然趋势,是世界各国保密通信领域得一个重要课题。

按照发展进程来分,经历了古典密码、对称密钥密码和公开密钥密码阶段,古典密码算法有替代加密、置换加密;对称加密算法包括DES和人AES;非对称加密算法包括RSA、背包密码、McEliece 密码、Rabin、椭圆曲线、EIigamal D-H等。

目前在数据通信中使用最普遍的算法有DES 算法、及RSA算法和PGP算法等。

解密方法:目前的解密方法主要可分外两种:软解密和硬解密。

所谓解密就是针对加密产品,一方面是利用软件监测分析软件在运行时向加密点写了什么数据,从加密点返回了什么数据,然后在运行软件前先在内存驻留自编程序监视加密点,当软件向加密点写数据时,软件自动代替加密点并返回相应数据。

这样,用软件模拟了加密产品。

另一方面是从软件着手,寻找软件调用加密点函数部分,修改判断加密点是否存在的语句,将程序直接跳转到正常执行的部分。

所谓硬解密就是针对加密产品,专门研究加密点结构与数据,而自制具有相同结构及加密点的钥匙盘或加密狗。

如目前流行的一种由成都双星软件技术工作室推出的密钥盘硬解密工具KING-COPY。

相关文档
最新文档