[笔记]Windows安全之《七》加壳技术

1,438 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天

前言

: 壳可以简单理解为就是在自己的PE文件中包含了代码.而有不影响我们的PE文件的执行.

加壳技术:其实是利用特殊的算法,对EXE、DLL文件里的资源进行压缩。类似WINZIP 的效果,只不过这个压缩之后的文件,可以独立运行,解压过程完全隐蔽,都在内存中完成。解压原理,是加壳工具在文件头里加了一段指令,告诉CPU,怎么才能解压自己。当加壳时,其实就是给可执行的文件加上个外衣。用户执行的只是这个外壳程序。当执行这个程序的时候这个壳就会把原来的程序在内存中解开,解开后,以后的就交给真正的程序。

脱壳技术: 一般是指除掉程序的保护,用来修改程序资源。马甲”能穿也能脱。相应的,有加壳也一定会有解壳(也叫脱壳)。

壳的类型:

  • 压缩壳
  • 加密壳
  • 其他(病毒加壳,Anti-AntiVirus)

常见的压缩壳:ASPack、UPX

常见的加密壳:ASProtect、Armadillo、 EXECryptor、Themida、VMProtect

加壳

加壳的基本思路

  1. 在PE文件中开辟空间用于存储补丁代码
  2. 复制扩展PE头中的数据目录表(DataDirectory)的内容到存储补丁的空间中,复制完后清空原本的数据目录表
  3. 修正复制过去的数据目录表的内容
  4. 对修正完的数据目录表之后的数据(不包括补丁部分)进行加密
  5. 修改PE文件的程序入口为补丁代码
  6. 补丁代码还原前面被清空的数据目录表
  7. 补丁代码解密先前加密的数据
  8. 补丁代码加载导入表中需要导入的DLL
  9. 补丁代码修正IAT
  10. 补丁代码执行完后返回原本的程序入口

加壳后的结构

image.png

加壳后起始地址指向补丁代码的起始地址:

截图_20220627184328.png

压缩壳

压缩壳指的是让我们的PE文件变小.UPX加壳程序的作用就是压缩程序代码,实现把可执行文件的体积缩小50%~70%,

以upx加壳为例

原理

upx的工作原理其实是这样的:首先将程序压缩。

所谓的压缩包括两方面:     - 一方面在程序的开头或者其他合适的地方 插入一段代码。     - 另一方面是将程序的其他地方做压缩(也就是上面讲到的压缩)。压缩也可以叫做加密,因为压缩后的程序比较难看懂,原来的代码有很大的不同。

当程序执行时:实时的对程序解压缩。解压缩功能是在第一步时插入的代码完成的功能。   upx可以完成代码的压缩和实时解压执行。且不会影响程序的执行效率。

方法

使用UPX加壳工具进行加壳

小结

压缩壳就是为了减少程序的体积

加密壳

加密壳则是牺牲体积,来保证安全性,加大逆向的难度。

原理

通过加壳的方式 将节内容加密,以防止被逆向

方法

使用EXECryptor加密 www.jb51.net/softjc/5430…

小结

加密壳则是牺牲体积,来保证安全性。

总结

  1. 加壳只是改变入口地址,经过一些算法实现不同作用(压缩算法,加密算法的部分)压缩加密等功能 参考:

脱壳第三讲,UPX压缩壳,以及补充壳知识 ]

新手教程一 小Z以UPX为例,讲解什么是壳,什么是压缩壳?

# Reverse | 使用UPX对软件进行加壳

从零开始构造加密壳系列 一 加壳原理

[原创]Win PE系列之一个简单的加密壳的实现

使用x64dbg脱壳之开源壳upx