加花 加壳 加区——免杀的疑问
一 什么是壳:
计算机软件里有一段专门负责保护软件不被非法修改或反编译的程序。它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务,大家就把这样的程序称为“壳”了。从功能上抽象的讲,软件的壳和自然界中的壳相差无几。无非是保护、隐蔽壳内的东西。而从技术的角度出发,壳是一段执行于原始程序前的代码。原始程序的代码在加壳的过程中可能被压缩、加密……。当加壳后的文件执行时,壳-这段代码先于原始程序运行,他把压缩、加密后的代码还原成原始程序代码,然后再把执行权交还给原始代码。 软件的壳分为加密壳、压缩壳、伪装壳、多层壳等类,目的都是为了隐藏程序真正的OEP(入口点,防止被破解)。
作者编好软件后,编译成exe可执行文件。有一些版权信息需要保护起来,不想让别人随便改动,如作者的姓名,即为了保护软件不被破解,通常都是采用加壳来进行保护。 加壳就需要把程序搞的小一点,从而方便使用。于是,需要用到一些软件,它们能将exe可执行文件压缩。而在黑客界中“壳”则被用在保护病毒,给木马等软件加壳脱壳以躲避杀毒软件,给网民带来很多的麻烦。
二 病毒加壳:
在好莱坞间谍电影里,那些特工们往往以神奇莫测的化妆来欺骗别人,甚至变换成另一个身份,国内对于这种伪装行为有个通俗的说法——“穿马甲”。而这种正与邪的争斗已经延伸到了病毒领域,很多病毒作者通过给病毒“穿马甲”、甚至穿多个“马甲”的方式,躲避杀毒软件的查杀,这种技术就是“加壳”。 病毒作者可以通过给老病毒加壳,大批量制造出杀毒软件无法识别的新病毒。所谓加壳,是一种通过一系列数学运算,将可执行程序文件或动态链接库文件的编码进行改变(目前还有一些加壳软件可以压缩、加密驱动程序),以达到缩小文件体积或加密程序编码的目的。当被加壳的程序运行时,外壳程序先被执行,然后由这个外壳程序负责将用户原有的程序在内存中解压缩,并把控制权交还给脱壳后的真正程序。一切操作自动完成,用户不知道也无需知道壳程序是如何运行的。一般情况下,加壳程序和未加壳程序的运行结果是一样的。
既然加壳后的病毒不易被发现,那么如何判断一个可执行文件是否被加了壳呢?
有一个简单的方法(对中文软件效果较明显)。用记事本打开一个可执行文件,如果能看到软件的提示信息则一般是未加壳的,如果完全是乱码,则多半是被加壳的。我们还可以使用一款叫做Fileinfo的工具来查看文件具体加的是什么壳。目前,较常见到的壳有“UPX”、“ASPack”、“PePack”、“PECompact”、“UPack”、“NsPack”、“免疫007”、“木马彩衣”等等。
病毒加壳的原理很简单,现在黑客营中提供的多数病毒中,很多都是经过处理的,而这些处理就是所谓的加壳。我们知道当一个普通的EXE程序生成好后,很轻松的就可以利用诸如资源工具和反汇编工具对它进行修改,但如果程序员给EXE程序加一个壳的话,那么至少这个加了壳的EXE程序就不是那么好修改了,如果想修改就必须先脱壳。病毒加壳后也是同样的道理,我们也必须先为病毒脱壳。