经过两周尝试手动编写加壳程序,目前也只是能实现给PE文件添加新区块,后面还有重定位表的修复,地址输入表的处理,虚拟机和花指令技术等反调试手段…一大串要学习的工作,几乎就是放弃了吧,通过这两周学习能让自己对PE文件和偏移地址、虚拟地址有一定了解也算不亏。目前就是转而向使用工具方向了。
目前加壳的两个主要方向是压缩和加密。
压缩壳
压缩壳以UPX为代表,使用方法在前面的文章中有,此类壳的功能已压缩为主,对文件的加密效果几乎没有,Peid等侦壳工具可以轻而易举地发现这些壳,相应也有较成熟的脱壳机来实现。所以当文件有较高的存储性能要求,且代码保密程度是可以开源时,才比较适合使用此类壳处理。
加密壳
常见的加密壳有ASProtect和Armadillo穿山甲,这两种工具使用较为广泛,加密效果较强,但就像密码一样,没有破解不了的密码也没有脱不掉的壳,其使用的广泛性也增加了其关注度和可研究性,目前针对ASProtect好像已经有了可用的脱壳机。
本文把穿山甲的使用流程展示如下:
加壳流程与工程创建相似,首先在工具内创建工程
然后输入工程名和版本号
在第二栏中选择需要保护的文件,需保护的次要文件为主文件调用的DLL等,也可不选。
后续可一直跳过使用默认,或自行更改,不影响加壳过程,重要的是证书的设置,在最后一栏证书选择新建后可看到如下页面:
首先输入证书名称及加密模板,此处的模板不等于密码,版本密钥可根据提示选择,其余的设置根据需要选择或默认即可。注意此时不要选默认,否则会导致后面密码设置出错,证书设置如图:
配置好后关闭设置页面可见如下界面:
点击工具栏中的锁头按钮即可开始加壳,成功后弹出如下消息框:
此时运行加壳后的文件会需要用户名和密码,但我们还没设置呢,这时候的默认密码会是啥我也不知道,不管怎样需要我们先自行设置一个密码。点击如图按钮设置密码:
点击后会出现如图设置界面:
单击证书名选择证书,输入用户名后单击创建密钥即可见产生的密钥:
再次运行并输入用户名和密钥程序可成功运行:
但是这种方法需要我们每次使用加壳后的文件都输入密钥,无疑降低了用户的使用体验,目前还没有找到其他的设置方法。
虚拟壳 VMProtect
这种壳其实是属于加密壳的一种,但是由于其特殊性值得拿出来单独说一下,使用计算机虚拟机技术,该技术与我们使用的VMware不大相同。前面两种保护技术虽然侧重点不同,但原理类似,都是给文件加上一层区块,本质没有修改文件源代码,使得文件被脱壳只是时间问题,但VMProtect是将被保护文件的代码转化到虚拟机下运行,虚拟机的编译器将指令编译成伪指令系统的指令执行,破解者很难理解虚拟机变换后的指令。目前对这种保护技术的评价是:以目前的破解理论来说,几乎不可能破解。
但是优异的保护以性能为代价,虚拟机处理后的文件,体积成倍上升,执行效率也大幅下降,所以只适合对关键代码进行保护。VMProtect界面如下:
选项中可用对保护的内容等信息进行设置:
设置好后点击编译按钮即可生成文件,可以说比较简单易用了。
总结
- 压缩壳工具:UPX,该壳可以实现对文件的压缩功能,保护性较低,脱壳基本不用费什么周章,若对文件存储性能有要求,且代码可以开源的话再考虑采用。
- 加密壳工具:VM protect ,该工具使用虚拟机技术对代码进行加密,效果可以说是目前加壳领域最强,且资料显示以目前的破解理论解密VMP保护下的文件是几乎不可能的。但优异的保密性以性能为代价,虚拟机技术处理文件会使文件体积成倍上升,执行效率也显著下降,所以可以用于保护核心代码。
- 普遍应用的工具,ASP和穿山甲,这两种工具使用较多也较为普遍,性能和加密性比较平衡,但针对的研究也较多。