按照我的个人习惯,在运用诸如IDA Pro与OllyDBG对病毒进行逆向分析之前,我都会利用一些自动化的工具,通过静态或动态的分析方法(参见《病毒木马查杀第008篇:熊猫烧香之病毒查杀总结》)来对病毒的行为产生一定的认识,这样在之后的逆向分析中,我就能够产生“先入为主”的心态,在分析反汇编代码的时候就能够比较顺利。本文论述的是通过静态分析方法来理解我们的目标病毒,看看仅仅通过观察其十六进制代码,我们能够获取到什么信息,这也算是从另外一个角度来处理病毒文件。
对病毒的分析,还是应当起始于查壳的操作,这里依旧使用PEiD这款软件:
图1 运用PEiD查看病毒
由上图可以发现,这个病毒是由Delphi编写的,并且还有附加数据(Overlay)。我曾经在《技术面试问题汇总第003篇:猎豹移动反病毒工程师part3》中提到过附加数据的问题,但是结合本病毒,我在此应当再重述一遍。
某些特殊的PE文件在各个区块的正式数据之后还有一些数据,这些数据不属于任何区块。由于PE文件被映射到内存是按区块映射的,因此这些数据是不能被映射到内存中的,这些额外的数据称为附加数据(overlay)。附加数据的起点可以认为是最后一个区块的末尾,终点是文件末尾。那么我们可以利用PEiD查看一下该病毒的区块信息:图2 查看病毒的区块信息
从图2可以计算出最后一个区块末尾的文件偏移值为DE00h+9C00h=17A00h。用十六进制工具(我这里使用的是Hex Editor Neo)打开目标文件,跳到17A00h,会发现后面还有一段数据,这就是附加数据,如图3所示:
图3 查看附加数据
仅仅是这样观察附加数据,我们并不能够知道这段数据的作用,这往往需要结合逆向分析进行判断。其实附加数据一般是在脱壳的时候需要特别注意,因为带有附加数据的文件脱壳时,必须将附加数据粘贴回去,如果文件有访问附加数据的指针,也要修正。那么我们现在也可以肯定,本病毒一定是使用了文件指针函数,这样病毒才能够使用这段附加数据。
图4
这里是Delphi运行库的注册表项,通过这个就可以判断这个程序是由Delphi编写的了。那么继续查找:
图5
这里出现了很多API函数,关于每个函数的具体功能,大家可以查询MSDN或其它相关资料。病毒通过建立快照的方式(CreateToolhelp32Snapshot),来查找当前系统中的进程(Process)、线程(Thread)以及模块(Module)等的信息,并且获取了内存的堆信息(Heap32ListFirst & Heap32ListNext)。这里的作用有可能是为了查看当前进程中是否含有反病毒软件,如果有,则将其停止,当然仅仅从这里是无法做出详细判断的,需要结合逆向分析才可以。接下来有:
图6
很明显这是一个名为hx1.bat的批处理文件,其内容为(含代码注释):
@echo off set date=2004-1-22 rem将当前日期设置为“2004-1-22” ping ** localhost > nul rem 测试本地网络系统,屏蔽命令的输出内容 date %date% del %0 rem 删除批处理自身接下来有:
图7
病毒调用了RegisterServiceProcess这个API函数,其功能是注册或者取消一个进程为服务。当用户注销之后,服务进程仍可运行。不过这个函数只能在Windows 9X下运行,在之后的操作系统下是无效的。继续分析:
图8
这里说明程序使用了autorun来实现自启动,并且通过变装成exe与pif文件的形式,来引诱大家点击,从而也就中了病毒。这里的pif是一种快捷方式文件格式,即使在“隐藏已知文件类型的扩展名”关闭时该类,都不能显示其pif后缀。文件双击后,系统调用去执行该快捷方式指向的文件。pif病毒正是利用该类文件的特性,来欺骗用户执行所指向的病毒文件。继续分析:
图9
这里出现了中文字符,根据经验,病毒可能是利用相应的API函数来查找当前进程或者已运行的程序的标题栏中是否含有这些中文字符,从而判断杀毒软件是否存在,若存在,则将其关闭。当然更加准确的答案还是得通过逆向分析才能获取。接下来程序结束可能存在的杀毒软件的服务,也就是将start设为disabled。接下来可以看到许多安全类软件的名称:
图10
病毒企图禁止这些安全类软件的运行,而由上一篇文章可以知道,病毒至少是使用了映像劫持这个方法来禁止杀软的运行,也许它还运用了别的方法,这也得通过逆向分析才能得出准确的答案。接下来有:
图11
这里出现了很多安全类网站,那么有理由相信病毒也是要屏蔽掉这些网址的。而屏蔽的最常用的手法就是通过修改Hosts文件。Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统再会将网址提交DNS域名解析服务器进行IP地址的解析。在Windows NT/2000/XP/Vista/7/8(即微软NT系列操作系统)中,它的默认位置为%SystemRoot%\system32\drivers\etc\,但也可以改变。这也是图11中最开始解析出来的路径。如果,我们在Hosts中,写入以下内容:
127.0.0.1 # 要屏蔽的网站 A 0.0.0.0 # 要屏蔽的网站 B这样,计算机解析域名A和 B时,就解析到本机IP或错误的IP,达到了屏蔽网站A 和B的目的。而本病毒程序,应该就是使用了第一种方式。下面有:
图12
这里创建了noruns.reg文件,并导入注册表,其功能就是修改驱动器的autorun属性,令“自动运行”功能得以实现。继续分析:
图13
很明显,病毒这里是将自身加入注册表的启动项、隐藏图标以及设置映像劫持等,由于比较简单,这里不再赘述。接下来有:
图14
程序将自身拷贝到除C盘外的其它盘符中,然后是:
图15
这里疑似是本病毒所使用的所有API函数,因为数量较多,所以在此不作分析。个人认为这里不太重要,因为根据之前的分析,我们对于病毒的了解已经不少了。有经验的反病毒工程师根据这个可以对病毒有更深的理解,但是此处为了节省篇幅,就将其略过。接下来是:
图16
病毒程序在此处似乎是隐藏了另一个PE文件,解析图16红框位置,0xA18E(注意图中是小端显示)的二进制形式为1010000110001110,它的第13位(由0开始计数)是1,说明它是一个DLL文件,那么可以知道,病毒程序似乎还生成了一个动态链接库文件。那么接下来的分析就是针对于这个动态链接库了:
图17
这里的action为POST,于是浏览器把form数据封装到http body中,然后发送到server。 如果没有type=file的控件,则使用用默认的application/x-www-form-urlencoded。也就是说,这里是将一些字符(用户信息)传输到服务器上,以便病毒的编写者接收。接下来有:
图18
很明显,这个病毒是与QQ有关的,因为这里出现了很多QQ程序的名称,因此可以将其怀疑为QQ盗号木马。继续分析:
图19
这里似乎是要发送邮件,然后有:
图20
查询IP地址。继续分析:
图21
可以认为这里是骗取用户的QQ号码与密码,并发送到黑客处。接下来就没有特别明显的值得分析之处,那么该盗号木马的十六进制代码分析就结束了。
可见,仅仅分析病毒样本中所包含的ASCII码,我们就能够获取非常多的信息。主要是要有耐心,勤于动手,多多交流,积累经验。我希望大家到现在能够不再惧怕计算机病毒,并归纳出自己喜欢的查杀方式。