探索黑客技术攻防,实战研究与安全创新

导航菜单

进阶技术之病毒剖析

俗话说的好:常在江湖飘,哪能不挨刀!大家们在网上冲浪的时候难免会中招的,中了病毒或木马后,大多数人的处理方法都是拿出杀毒软件,对全盘进行一轮狂轰滥炸,揪出病毒后一律毫不留情的置之死地。其实在抓到病毒后不一定立刻杀掉,将病毒提取出来进行调试分析,弄清楚病毒的运行机理也未尝不是一件快事!正如一个让你深恶痛绝的仇人被你逮住后,对其慢慢折磨岂不比直接了断他更要来得舒坦 (某人:你太邪恶了,简直是有些心理BT!),好了,废话不说了,本文我就对一个简单的病毒进行分析。

在拿到病毒样本后首先用peid查壳,发现没有加壳,程序是使用Microsoft Visual C++ 6.0编写的,没有加壳这对于我们广大人民来说是件好事,毕竟脱壳也是一件很累人的活儿,有时一些强壳还会把你玩得晕头转向。

既然没有加壳,那我们就直接使用OD载入程序,一般来说我的习惯是先查看ASCII码,看有什么有用的信息,这跟软件破解的步骤是一样的。通过查看ASCII码,我们发现了信息。

QQ截图20170225140153.png

其中\msacm32.drv和explorer这两处地方比较可疑,双击\msacm32.drv跟随进去,发现了如下的代码:


在0x2123127D这个位置调用的api函数是GetWindows DirectoryA,这个函数的作用是获取Windows目录的路径名。继续往下查看,发现了如下的代码——创建了一个虚拟桌面。


这个的作用是什么呢?现在还不得而知。继续向下研究,发现病毒创建了explorer进程:


联系上面的代码就可以初步猜测到病毒是创建了虚拟桌面,然后在虚拟桌面启动explorer进程。目前从ASCII码里得到的信息大致就是这么多了,可我们还是不知道病毒的主要作用是什么?现在开始调试程序,调试的时候可以慢慢的单步仔细的进行分析,可是这种方法太累人。我是个懒人,所以直接使用下断点的方法进行调试。有读者可能要问了:你是怎么知道在哪里下断点的呢?我的方法是通过对函数下断,在OD里点右键,选择“查找”一一“当前模块的名称”,就可以查看调用的函数了。

这里我发现FindResourceA这个函数非常可疑,点击右键选择“在每个参考上设置断点”,然后按F9运行程序。

程序被断在了0x21231342处:



此时的整个流程就很明显了:首先是查找资源,然后提取资源释放到系统目录,释放出来的文件是msacm3.2.drv。继续单步就可以看到病毒已经往释放出来的文件写入内容了:


单步跳出这个子程序就来到了之前创建虚拟桌面的地方,继续单步就看到了进程退出代码。实际上这个病毒最后还会有个毁尸灭迹的行为,再次查看当前模块,可以看到一个函数WinExec。这个函数的作用就是运行指定的程序,重新加载程序后对这个函数下断,按F9运行后观察附近的代码:



首先是获得执行命令的参数“/c del/f”,并保存在寄存器eax中。其中GetEnvironmentVariaoleA获得了环境变量的值,并且把cmd的目录作为变量连同之前的命令行保存在了寄存器eax里。

最后调用WinExec函数采用隐藏方式来执行命令,也就是自删除的操作。


这时候病毒主体文件在完成自己的工作后就自尽身亡了,真正的罪魁祸首就是释放出来的msacm32.drv文件。接下来我们就该对这个文件进行分析了,可能又有人要提问了:这种格式的文件没有见过啊,是设备驱动程序吗?该怎么调试呢?其实这个文件是个dll,反汇编就可以看到其真面目了。这里我用了一个懒方法,首先将其后缀修改为exe,然后使用OD载人,如果是exe文件的话载入的时候是没有任何问题的,而如果是dll文件的话,由于dll是无法单独运行的,所以OD会提示启动LOADDLL.EXE进行dll的加载。成功加载后我们先单步一会儿,因为对dll的调试不同于exe文件,一开始就查找ASCII或者是输入表的话是得不到任何信息的。单步的时候遇到回跳的地方一律按F4跳过去,不一会儿就来到了模块入口点。

现在就可以查看当前的模块信息了,结果看到了几个极为可疑的函数。这里我们把断点下的靠前一些,在free函数那儿下断,按F9运行后就来到了下面的位置:

到了这里就一切都明白了,病毒释放出来的msacm32.drv是伪装对应原系统的正常文件,然后对之前创建的虚拟目录里运行的explorcr.exe进行注入,并且在注入的代码中使用LoadLibrary和GetProcessAddress进行强制加载。

到此病毒就分析完毕了,接下来就是杀毒的工作,这个病毒很好杀,打开冰刃,查看expLorer进程的模块信息,找到C:\WINDOWS\msacm32.drv将其卸载掉,然后直接删除c:\WINDOWS\目录下的msacm32.drv文件即可。

其实病毒分析的技术博大精深,因本人水平有限,所介绍的也只是冰山一角,不过在此就权当是抛砖引玉了,希望能对大家有所启发。

相关推荐