木马与杀毒软件之间的战斗从来就没有停止过,通过对已知的木马进行加壳可以再次躲避杀毒软件的查杀。加了壳的木马可以防止被杀毒软件跟踪查杀和被跟踪调试,同时也可以防止木马本身的算法程序被别人静态分析。加壳软件通常可以分为压缩保护和加密保护两种。
压缩保护
压缩保护就是利用特定的压缩算法把程序压缩打包,运行的时候在内存中执行解压过程并运行主程序。常见的压缩类加壳软件有:UPX、ASpack、Petite、PE-PACK、WWPack32、Shrinker等。以UPX为例,它的主要功能就是压缩,由于木马要在内存中释放后才能运行,所以对付这类加壳木马,凡是有内存杀毒功能的杀毒软件都能获得很好的查杀效果。
加密保护
这类软件侧重的是加密和保护软件,在反编译和反调试功能方面比较完善,某些加密软件甚至可以做到锁定自身在内存中的进程而不让别的进程插进来。此类加壳软件由于具备反编译和反调试功能,杀毒软件很难查杀到壳里的木马。常见的加密类加壳软件有ASProtect、tElock、Armadillo、SVK Protector、Xtreme-Protector、Obsidium、PElock等。
给木马脱壳
要给木马脱壳,需要先知道加了什么壳。PEid一款专用的查壳工具,可以方便的检测出软件到底是使用什么东西加的壳,给脱壳带来了极大的便利!木马Cmdshell.exe是个只有7KB的小木马,通过开放本机的54088端口,实现远程命令行控制。下面就详细介绍一下给木马Cmdshell.exe脱壳的过程。运行软件后,点击“File(文件)”右边的浏览按钮,打开Cmdshell.exe文件,这时在主界面中就可以看到该文件的加壳情况:Cmdshell.exe使用的是UPX加壳(如图1)。
图1 给Cmdshell脱壳
通常UPX加壳和脱壳工具是通用的,所以笔者选用了使用起来比较容易的UPX Shell对加壳文件进行脱壳。运行UPX Shell程序,点击“OPen(打开)”按钮,选定被加壳的程序。切换到“Compress(压缩)”标签,选择“Decompress(解压缩)”,再点击“GO(运行)”按钮,即可完成脱壳。脱壳后程序由原来的7K变成了20K,文件脱壳成功(如图2)。
图2 UPX脱壳
PE-Scan也是一款专用的查壳脱壳工具,能识别出当今流行的绝大多数壳的类型,而且功能更强。PE-Scan可以检测出一些壳的入口点(OEP),方便手动脱壳。运行Pe-scan,打开加了壳的木马,即可看到木马加壳的类型(如图3)。这里笔者使用了一个用Asprotect加壳的木马来做测试,由于目前的PE-Scan并不支持脱Asprotect壳,所以“脱壳”按钮无法使用。
图3 PE-Scan脱壳
为了脱去Asprotect壳,还需要使用另外一款脱壳软件stripperX来帮忙,它可以方便快捷地脱掉ASpack和ASProtect加的壳。运行stripperX,点击“open(打开)”按钮,选择要脱壳的文件,再点击“unpack(脱壳)”按钮即可生成目标文件,完成脱壳任务。需要注意的是由于ASProtect在不断升级,低版本的stripperX往往不能脱最新版本的ASProtect壳,目前stripperX 2.07版本支持脱ASpack 2.xx 和 ASProtect 1.2x版本的壳,stripperX 2.11版本支持脱ASProtect 1.3~2.0版本的壳(如图4)。
图4 stripperX脱壳
总的来说,脱壳要对症下药,先用PEid或PE-Scan查清楚壳的类型,然后找脱这种壳的工具,才能达到脱壳的目的。脱了壳的木马,就失去了保护,几乎所有的杀毒软件或木马查杀工具都能查杀它。当从网络上下载了某些怀疑有木马的程序,可以先用本文介绍的方法来检查一下,看看它是否被加了壳,如果是就要提高警惕了,建议不要使用。