这篇文章是在Servex.exe 专杀工具写完之后的一些小小感想,关于PE 感染和修复,大牛飘过~ 自某日不小心中了Serverx.exe 病毒,电脑中大部分EXE 文件被感染,系统盘system32 目录下的病毒文件Serverx.exe 总也杀不掉,因为即使删掉了,每次运行了被感染的程序之后还会再次生成。(关于此毒的详细资料,有兴趣的直接在百度搜索"Serverx.exe"或"愤怒天使"即可)在网上求助无果,遂自己动手,研究了一下这个病毒的感染方式,最终找到了恢复被感染文件的方法,下面将此过程分享给大家。 遇到这种感染型的病毒,恢复时需要解决几个问题。 第一个问题,感染后的文件能否恢复? 那么我们从被感染后的EXE 运行情况来看看。以调用 Winrar 解压缩为例,可以正常实现解压过程。但在解压后就应退出的Winrar 仍在运行。如果用 Process Explorer 观察进程树的话,会发现是Winrar 本身又重新运行了一个 Winrar 进程来完成解压缩功能,而解压完成后,第一个运行的Winrar 仍在继续运行,用 FileMon 监视的话会发现它有大量的文件访问操作,从访问的目录顺序和规律来看是在遍历并寻找 EXE 进行感染。而这两个 Winrar 的路径是一样的,也就是说实现感染功能的和实现解压功能的是同一个程序,解压功能仍然是被感染后的Winrar 完成的,这说明一个问题:感染后的文件功能没有被破坏!这非常重要,也是因为程序的功能没有被破坏才有下面的恢复过程。 第二个问题,此病毒是何种感染方式? 典型的感染方式有“夹心饼”式的捆绑感染,替换资源或添加资源式的感染,准确说这些不算是“正宗”的PE 感染。其它典型的方式有加新区段,写入 shellcode(这里把病毒自己注入的代码也称为shellcode),然后跳回原入口。还有一些高级的感染方式,不一一列举。 为了分析这个病毒的感染方式,我将感染前后的Winrar.exe 进行对比,首先会发现文件大小要增加,再用 PEID(或其它同类工具)查看一下相关数据,首先发现入口所在区段不一样了,由.text 段变成了最后的.rsrc 段,入口处代码也不一样了。既然感染跟区段有关,那么就来看一下感染前后区段数据的变化: 感染前: 感染后: 可以看到,区段数并没有增加,仍为7 个,但是最后一个区段的虚拟大小(VirtualSize)和原始大小(RawSize)都有所增加,且段属性标记也被修改了。这样我们对此病毒的感染方式有所了解了,就是增加最后一个段的大小,写入shellcode,并修改段属性为可执行,并不是某些人分析...