“壳”是一种对系统开展数据加密的程序流程,“壳”品牌形象地体现了这种作用。我们可以把被免杀的程序流程当做食材,而免杀程序流程便是在外面再加上一层坚固的机壳,避免他人去盗取在其中的程序流程。免杀后的程序流程仍然可以被立即运作。在程序执行时壳的编码先运作,随后再运行原先的程序流程。关键目标是为了更好地隐藏程序的OEP(通道点),避免外界手机软件对系统的反编译剖析或动态变化。很多病毒感染根据免杀来做到免杀的目地,但壳也用在维护授权软件不被破译。技术性沒有对与错之分,重要看应用的目地。
1. 壳的归类
(1)缩小壳
压缩壳的功效便是压缩程序的尺寸。缩小壳并不会对系统开展改动,反而是更改了储存方法,使程序流程更小。运作应用程序时先运作壳的解压缩程序,缓解压力源代码到运存中,随后实行。普遍的缩小壳有UPX,可以将一般程序流程缩小到原先容积的30%。对upx_test开展缩小,原先尺寸为188 KB,缩小后为33 KB,仅有没想到的17.54%,详细资料如下图1所显示。
图1 缩小upx_test
用PEiD开展查壳,测试一下是否有壳,如下图2所显示,的确现已拥有UPX的缩小壳。
图2 PEiD查壳(UPX)
(2)数据加密壳
加密壳的功能是维护程序流程不被破译。一般情形下,数据加密壳加密以后的程序流程尺寸视状况而定,有一些数据加密壳也是有缩小壳的实际效果。数据加密壳会对系统开展改动,如弄乱编码、搞混等。普遍的数据加密壳有ASProtect、EXECrptor、Armadillo等。如下图3所显示是用ASProtect开展数据加密。
图3 ASProtect加密
用PEiD开展查壳,测试一下是否有壳,如下图4所显示,的确现已拥有APS的数据加密壳。
图4 PEiD查壳(APS)
(3)vm虚拟机保护套
vm虚拟机保护套是近几年来逐渐风靡的数据加密维护计划方案,核心技术是手机软件完成CPU的作用。因为程序流程不遵循Intel的OPCode标示,因此剖析起來会很不便。
2. 破壳
针对不一样的壳,在网上有很多相匹配的脱壳工具。在破壳前一般先用查壳工具,查加的是啥壳,随后寻找相应的脱壳工具开展破壳。以以前的UPX壳缩小的upx_test.exe为例子,开展破壳演试。如下图5是PEiD查壳結果,根据查壳我们知道这也是UPX的壳,随后用相应的脱壳工具开展破壳。
图5 PEiD查壳結果
这儿用的是UPXshell开展演试。将程序流程拖进到UPXshell中点击“GO”就可以获得破壳以后的程序流程。破壳以后会遮盖以前的带壳的程序流程,因此在破壳前应搞好备份数据,如下图6所显示。
图6 破壳
脱壳是逆向分析的必需专业技能之一。尽管用软件脱壳十分便捷,但依然会存有很多限定,若想找相匹配的脱壳软件,较新、极强的壳一般不能用软件脱壳等。因此或是必须掌握一些破壳的基础知识。
(1)OEP
破壳的第一步是寻找源代码的OEP(Original Entry Point)。OEP标示是不是早已运转到源代码。针对一些简易的缩小壳,寻找OEP就代表着早已破壳取得成功。
断点调试调节法:免杀程序流程运行时,栈的情形与缓解压力蜀主程序流程的栈状况完全一致。因此许多免杀程序流程加载 OD 后都是会滞留在 pushad/pushfd 处,将原先的栈先储存出来,因此,pushad/pushfd毫无疑问就会有相匹配的popad/popfd。只需寻找popad/popfd就可以更快地寻找OEP。将upx_test.exe加载OllyDbg,一直按F8,假如碰到往上自动跳转就按F4运作到下一行。直到碰到popad,下边会有一个非常大的jmp自动跳转。如下图7和图8所显示。自动跳转以后的区域便是程序流程的OEP,如下图9所显示。
图7 断点调试调节1
图8 断点调试调节2
图9 搜索到OEP
这儿只讲解了非常简单并且较为常用的一种破壳方式。具体中也有许多精妙的方式,如ESP基本定律、运用编写语言表达的特征等。
(2)运行内存印象拷贝到
寻找OEP以后,程序流程早已在存储空间中,这时运行内存中的程序流程最贴近免杀前的程序流程。只要将运行内存中的印象拷贝到出去,一般的壳就结束了。运行内存印象拷贝到(dump)专用工具有许多,如LordPE、PETools。并且OllyDbg中也有OllyDump软件可以应用。
下边就可以开展破壳了。右键单击“push ebp”挑选dump process,点击“dump”按键破壳。会形成一个破壳后的程序流程,默认设置文件夹名称会在原文件名后边再加上“_dump”。最终开展查壳,表明早已无壳,而且取得成功运作,表明破壳取得成功,如下图10所显示。
图10 运行内存印象拷贝到
(3)复建导出来表
许多数据加密壳会对导进表动手脚。这时,即使取得成功破壳,程序流程也是不能运作的。在导进表格中起主导作用的是IAT,因此许多情况下修补导出来表也叫修补IAT。可以应用importREC复建导出来表,如下图11所显示。
图11 复建导出来表