混淆说白了就是恶意程序的作者自己发明的一种壳。它会将想要隐藏执行的PE文件经过加密以后植入自身内部,当自身运行时候,对其执行解密操作并执行,于是就达到了隐藏运行的目的。
2.1;去除混淆原理
恶意程序在解密去除混淆得过程中,一定会需要分配一个内存空间,那么可以在分配空间得函数下断点(例如:VirtualAlloc)。然后在带程序解密完成之后dump 出来。这样,我们就可以找出恶意程序得本体了。
利用OD程序打开软件,并且在函数VirtualAlloc里面下断点。之后F9运行程序,程序会自动断在VirtualAlloc()位置。
这里我们发现,它存在多个断点位置(VirtualAlloc多次调用),一般判断是否是解密混淆所需要得空间,可以通过划分得虚拟空间大致猜测判断。如下地址“7C809A81”划分空间224,一般意义得PE程序不会这么小。即排除。
地址“7C809AA2”划分空间903680,则,很有可能是一段PE程序需要得空间。
接下来,我们将光标定位到“7c809a99”,该位置是刚好执行完VirtualAlloc。执行完之后,将申请得空间地址返回至寄存器EAX。
我们在“D00000”位置下硬件断点。之后执行程序,程序会断在试图修改该内存空间得位置。
程序在如下位置,再次断开,经过分析,该段程序指令得作用,就是将混淆文件,加载到“D00000”位置。
继续程序运行,至如下图位置,这个时候我们发现PE程序已经加密完成。
导出程序本体,(备份-保存数据到文件)
首先,我们已经知道了,混淆程序执行了是两个功能,1;将程序复制到“D00000”位置。2;将"D00000"位置得程序解密。接下来,我们来分析,它是如何做到这两个功能得。
我们先通过OD将程序定位到地址“0012F9D6”位置。这个时候,我们通过初步得单步执行,发现整个复制程序就在12f9cd~12f9f6之间循环。
通过初步观察,我们得到如下信息:
在“12F9D3”位置,我们发现,该程序指令就是将数据放入“D00000”位置得指令,即拷贝目标地址在该程序中使用得是[eax+edi]表示得。
由“12F9CD~12F9D3”位置我们发现,拷贝源是使用[ebp+ecx*4-0x54]来表示得。我们来看表达式ebp+ecx*4-0x54,很明显知道,随着ecx寄存器得值得变化,这将是一个偏移四个单位得变化。
“12F9D6~12F9DE”位置指令,我们发现,在将[ebp+ecx*4-0x54]得值放入目标地址当中之后,会立刻指向[ebp+ecx*4-0x54]下一个位置得值。
“12F9E2~12F6E6”这些指令得作用是,ecx 得值加一,用来表示循环得次数,通过cmp 得比较,我们知道,它会循环8次。并且会将值放入[ebp-0x8]位置存储,方便之后重新调用。
“12F9F0~12F9F6”我们知道,[ebx+0x10]位置保存得值是复制程序得大小,DEI当中得值就是用来限定复制多少进入目标地址。
好了,经过分析,其实,我们大概知道了,复制得原理。大致如下:
第一轮复制,是将地址“12F66C~12F688”位置得值(间隔四个单位)作为地址,然后寻找内容然后放入目标空间,执行完成之后,立刻将12F66C~12F688”位置得值加一,用来表示第二个值。如此循环。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2021-6-14 13:40
被天象独行编辑
,原因: