当前常用的加壳技术

当前常用的加壳技术

ID:8839590

大小:35.00 KB

页数:4页

时间:2018-04-09

当前常用的加壳技术_第1页
当前常用的加壳技术_第2页
当前常用的加壳技术_第3页
当前常用的加壳技术_第4页
资源描述:

《当前常用的加壳技术》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、首先声明,不要被这个题目所迷惑,我所谓的流行只是我以为他应该要流行,并不是说一定就是现在所流行的技术,再者,我很菜,错误之处,请各位海涵.我并不太清楚壳的历史,因为关于它的特殊性再加上我所能了解的信息也非常局限性,在我看来第一款壳应该就是upx,但是或许事实并不是这样,因为地下壳是那么的多.而我并不知道第一款加密或者意想加密的壳是哪个,一是因为加密这个定义比较模糊,二是我根本不收集壳并研究.加壳的中心思想我想不外乎只有两点,一是尽可能的隐藏所能隐藏的东西,二是尽最大能力的拖延脱壳者的时间,让脱壳者那颗并没有无限大的忍耐度的心再也受不了为止.IAT加密与

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

3、简单的加密手段,目的正如我上面所说的,隐藏信息.我想应该是这种方法很快就不够用了,因为他脱起来也较简单,等壳装载完毕后,直接用REC就可以修复.这导致了新加密方法的使用.新的IAT加密方法和上面的加密方法基本上差不多,但是在最后填充函数地址的时候,也就是在壳加载了函数所在DLL和获得函数地址之后并不直接填充到IAT跳转描述表里面,而是保存起来,然后将跳转描述表里面相应位置填充为指向壳的一段代码,这段代码负责动态解密跳转到真正的函数地址.形成一个代理模式.这种方法仍然是现在流行的方法,大部分的加密壳都是基于这个原理的,只不过实现手段上不同而已.有的壳是直

4、接跳转到壳里,然后立马又跳回真正的函数地址,我很能理解这样做的原因,因为我知道写一个复杂的代码连接引擎并不是很容易.大部分壳这个过程是动态的,也就是在loader的时候动态生成跳转代码的,这有一个很致命的缺点,因为这样或多或少的会形成一个magicjmp,因为一般并不是所有函数都能被代理,所以必须还得考虑兼容性的问题,所以很多壳只代理了一部分函数,其他函数也只是获取地址然后填充,这样一个简单的过程,但是他们又不注意将需要代理的函数在加壳时给予区分,而是在loader里面判断是否加密,所以导致magicjmp,这样把所有信息行为都暴露给脱壳者是很不划算的

5、.还有一种较上面方法好一点的就是他们模拟了一些代码,也就是一些函数在壳里自己实现,来增加脱壳者修复的难度,但是从某个角度来说,这样的用处并不大.当然我们所考虑的情况都是再不使用SDK的情况下.我不得不说关于IAT加密并不会留住加密和解密的步伐,因为一般程序只有少量的导入数据,而且大部分函数都要直接跳转到真正的函数入口,而写壳的不可能将所有的函数都模拟起来,实际上模拟起来也并不难修复.所以注定这个早期的战场迟早会被淡化,加壳和脱壳会寻找新的火拼点.CODE现在流行和将来流行的火拼点:很早我就意思到加壳迟早会回归到这上面来,早期没有人过多于将精力放在这上面

6、是因为处理代码远比处理IAT难度要大,要复杂,要考虑得多.代码处理流行的技术在我了解的有以下几种主要方式.1.VM2.代码变形3.代码乱序4.代码寄生5.花指令6.代码抽取还有一种早期我用过的代码移位技术我这里并没有列为主要技术,因为它是这里面最容易被还原的技术,但是可以用来和上面的技术组合,将是很不错的.首先我们来看看VM,我不知道这技术是什么时候开始被使用的,但是很显然的,他将成为现在和将来壳所发展的趋势,尤其是在cpu执行速度越来越快的今天.我这里并不想教你怎样写一个VM,但是我会或多或少的给你一些建议.首先让我来阐述一下VM的工作原理,VM就是

7、我们平常说的虚拟技术,他是将原来的代码变成OPCODE,然后写一个虚拟机来解释执行OPCODE来完成原来代码的功能.核心原理也逃不出文章一开始我所说的两点.但是到如今使用也不多的原因是因为实现难度比较大,因为写好一个虚拟机引擎并不容易,你将必须有非常好的构架,否则你将不容易成功.你必须增加OPCODE的灵活性来代替你翻译代码为OPCODE的工作量,你不得不仔细而反复的看intel的开发手册,而你还得考虑虚拟引擎工作环境,你需要考虑线程安全,重入等问题.而你还得考虑虚拟引擎堆栈管理,等一系列技术问题,不过还好这些也并不是多么复杂而且不为人知.代码变形并不

8、是一种多么必不可少的技术,如果只用代码变形,那么将没有什么难度可言,之所以介绍它是因为他和其他

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。