持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天
前言
壳: 壳可以简单理解为就是在自己的PE文件中包含了代码.而有不影响我们的PE文件的执行.
加壳技术:其实是利用特殊的算法,对EXE、DLL文件里的资源进行压缩。类似WINZIP 的效果,只不过这个压缩之后的文件,可以独立运行,解压过程完全隐蔽,都在内存中完成。解压原理,是加壳工具在文件头里加了一段指令,告诉CPU,怎么才能解压自己。当加壳时,其实就是给可执行的文件加上个外衣。用户执行的只是这个外壳程序。当执行这个程序的时候这个壳就会把原来的程序在内存中解开,解开后,以后的就交给真正的程序。
脱壳技术: 一般是指除掉程序的保护,用来修改程序资源。马甲”能穿也能脱。相应的,有加壳也一定会有解壳(也叫脱壳)。
壳的类型:
- 压缩壳
- 加密壳
- 其他(病毒加壳,Anti-AntiVirus)
常见的压缩壳:ASPack、UPX
常见的加密壳:ASProtect、Armadillo、 EXECryptor、Themida、VMProtect
加壳
加壳的基本思路
- 在PE文件中开辟空间用于存储补丁代码
- 复制扩展PE头中的数据目录表(DataDirectory)的内容到存储补丁的空间中,复制完后清空原本的数据目录表
- 修正复制过去的数据目录表的内容
- 对修正完的数据目录表之后的数据(不包括补丁部分)进行加密
- 修改PE文件的程序入口为补丁代码
- 补丁代码还原前面被清空的数据目录表
- 补丁代码解密先前加密的数据
- 补丁代码加载导入表中需要导入的DLL
- 补丁代码修正IAT
- 补丁代码执行完后返回原本的程序入口
加壳后的结构
加壳后起始地址指向补丁代码的起始地址:
压缩壳
压缩壳指的是让我们的PE文件变小.UPX加壳程序的作用就是压缩程序代码,实现把可执行文件的体积缩小50%~70%,
以upx加壳为例
原理
upx的工作原理其实是这样的:首先将程序压缩。
所谓的压缩包括两方面: - 一方面在程序的开头或者其他合适的地方 插入一段代码。 - 另一方面是将程序的其他地方做压缩(也就是上面讲到的压缩)。压缩也可以叫做加密,因为压缩后的程序比较难看懂,原来的代码有很大的不同。
当程序执行时:实时的对程序解压缩。解压缩功能是在第一步时插入的代码完成的功能。 upx可以完成代码的压缩和实时解压执行。且不会影响程序的执行效率。
方法
使用UPX加壳工具进行加壳
小结
压缩壳就是为了减少程序的体积
加密壳
加密壳则是牺牲体积,来保证安全性,加大逆向的难度。
原理
通过加壳的方式 将节内容加密,以防止被逆向
方法
使用EXECryptor加密 www.jb51.net/softjc/5430…
小结
加密壳则是牺牲体积,来保证安全性。
总结
- 加壳只是改变入口地址,经过一些算法实现不同作用(压缩算法,加密算法的部分)压缩加密等功能 参考: