壳是对可执行程序资源进行压缩,压缩后的程序可以直接运行。
加壳的另一种常用的方式是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,之后再把控制权交还给原始代码,这样做的目的是隐藏程序真正的OEP入口点,防止被破解。大多数病毒就是基于此原理。
加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。
这种技术也常用来保护软件版权,防止软件被破解。但对于病毒,加壳可以绕过一些杀毒软件的扫描,从而实现它作为病毒的一些入侵或破坏的一些特性。
壳可以给逆向工程造成麻烦。可以保护程序,也可以防止被识别,有名的熊猫烧香病毒便采用了UPX壳,防止被杀毒。
在ctf的逆向中,我们首先要查明可执行文件有没有壳,有则需要去掉壳
我们通常使用exeinfope,把文件拖入其中就可以查壳
exeinfope是一种十分出色的查壳工具
http://exeinfo.atwebpages.com/
我们可以查到这个文件是64位ELF(linux下的可执行文件),有UPX压缩
常见的壳有UPX壳
UPX解壳方法如下
https://github.com/upx/upx/releases/tag/v3.96
下载合适的版本
下载好后解压压缩文件
以windouws为例,用命令行打开其中exe文件
程序加载后输入
upx -d 待去壳文件地址
即可完成去壳
注意该方法不会保存源文件,需要保留的请提前保存。