病毒样本分析分类
病毒样本分析大致分为两种,一种是行为分析,一种是逆向分析。
行为分析主要是通过系统监控软件,监控系统中各资源或环境的变化,比如监控注册表、监控文件、监控进程,以及监控网络等。当然了,还可以通过 HIPS 软件来监控病毒的行为。各类系统监控工具或者是 HIPS 软件都是在系统的不同层面上进行了不同方式的 HOOK。比如说在内核层进行 HOOK,在应用层进行 HOOK。HOOK 的方式也是多样化的,比如直接 HOOK API 函数,或者 HOOK SSDT 表中的内核函数。
逆向分析主要是通过静态分析或者动态调试来查看病毒的反汇编代码,通过断点或者单步来观察病毒的内存数据、寄存器数据等相关内容。
行为分析可以快速的确定病毒的行为从而写出专杀工具,但是对于感染型的病毒是无法通过行为分析进行分析的,或者病毒需要某些触发条件才能执行相应的动作,这样因为系统环境的因素,也无法通过行为分析得到病毒的行为特征。逆向分析通过查看病毒的各个分支流程可以完整的、全面的查看病毒的各个流程,包括病毒需要在某些条件下才被触发的流程,都可以通过查看反汇编代码进行查看。但是,对于病毒的逆向分析需要有 Windows 的开发能力,需要有阅读汇编的代码。相对于行为分析来讲,要求的技术含量更高一些。
实例演示
我们通过一个真实的病毒样本,进行一次逆向分析,希望可以对病毒分析的入门者有一定的帮助。
下载到样本后,放置到虚拟机中,虚拟机最好也处于断网情况,因为我们不确定病毒到底有哪些行为。由于我们是逆向分析,即使一些需要连网后才有的病毒行为,我们也能通过反汇编代码一览无余。放置在虚拟机中后,我们例行用 PEID 查壳之。幸运的是这个病毒没有,而且是用VC编写的。
由于无壳,省去了脱壳的步骤。我们用 OD 载入病毒,由于是 VC 编写的直接跳过 VC 的启动函数,来到真正的病毒代码处,有点分析经验的人都能一眼看出哪些部分是 VC 的启动代码,关于如何跳过病毒的启动代码就不介绍了。我们直接来到病毒的代码处,病毒的代码如下所示(为了保证代码的美观,我去掉了 OD 中机器码的那一列,把注释列放到了对应代码的上一行):
00401457 PUSH EBP00401458 MOV EBP,ESP0040145A SUB ESP,41800401460 PUSH EBX00401461 PUSH ESI00401462 PUSH EDI00401463 CALL 00401160
00401457 地址处是病毒代码的开始位置,也就是我们在用 VC 写代码是的 main() 函数处。在 00401463 地址处的代码 CALL 00401160 是调用了一个函数,我们查看被调用函数的代码,代码如下:
00401160 PUSH EBP00401161 MOV EBP,ESP00401163 SUB ESP,1C00401166 LEA EAX,DWORD PTR SS:[EBP-4]00401169 PUSH EAX0040116A PUSH 28 ; kernel32.GetCurrentProcess0040116C CALL DWORD PTR DS:[]00401172 PUSH EAX ; ADVAPI32.OpenProcessToken00401173 CALL DWORD PTR DS:[]00401179 TEST EAX,EAX0040117B JE SHORT 004011CC0040117D L