前言

按照我的个人习惯,在运用诸如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 查看附加数据

仅仅是这样观察附加数据,我们并不能够知道这段数据的作用,这往往需要结合逆向分析进行判断。其实附加数据一般是在脱壳的时候需要特别注意,因为带有附加数据的文件脱壳时,必须将附加数据粘贴回去,如果文件有访问附加数据的指针,也要修正。那么我们现在也可以肯定,本病毒一定是使用了文件指针函数,这样病毒才能够使用这段附加数据。

查看病毒包含的ASCII码信息

因为这个病毒程序本身并不大,所以即便直接通过观察其十六进制代码所代表的ASCII码值进行分析,也不会耗费太多时间,这也能够实现对病毒的初步分析。当然我们能够看到的更多是一些不容易判断其作用的乱码,所以这里我们只分析能够判断其功能的完整的英文单词。由上至下逐步查找,来到了第一处可识别处:

图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码,我们就能够获取非常多的信息。主要是要有耐心,勤于动手,多多交流,积累经验。我希望大家到现在能够不再惧怕计算机病毒,并归纳出自己喜欢的查杀方式。

病毒木马查杀实战第010篇:QQ盗号木马之十六进制代码分析的更多相关文章

  1. 病毒木马查杀实战第025篇:JS下载者脚本木马的分析与防御

    前言 这次我与大家分享的是我所总结的关于JS下载者脚本木马的分析与防御技术.之所以要选择这样的一个题目,是因为在日常的病毒分析工作中,每天都会遇到这类病毒样本,少则几个,多则几十个(当然了,更多的样本 ...

  2. 病毒木马查杀实战第009篇:QQ盗号木马之手动查杀

    前言 之前在<病毒木马查杀第002篇:熊猫烧香之手动查杀>中,我在不借助任何工具的情况下,基本实现了对于"熊猫烧香"病毒的查杀.但是毕竟"熊猫烧香" ...

  3. 病毒木马查杀实战第011篇:QQ盗号木马之专杀工具的编写

    前言 由于我已经在<病毒木马查杀第004篇:熊猫烧香之专杀工具的编写>中编写了一个比较通用的专杀工具的框架,而这个框架对于本病毒来说,经过简单修改也是基本适用的,所以本文就不讨论那些重叠的 ...

  4. 病毒木马查杀实战第012篇:QQ盗号木马之逆向分析

    前言 在本系列的文章中,对每一个病毒分析的最后一个部分,若无特殊情况,我都会采用逆向分析的手段来为读者彻底剖析目标病毒.但是之前的"熊猫烧香"病毒,我用了三篇文章的篇幅(每篇250 ...

  5. 病毒木马查杀实战第020篇:Ring3层主动防御之基本原理

    前言 假设说我们的计算机中安装有杀毒软件,那么当我们有意或无意地下载了一个恶意程序后.杀软一般都会弹出一个对话框提示我们,下载的程序非常可能是恶意程序,建议删除之类的.或者杀软就不提示.直接删除了:或 ...

  6. 病毒木马查杀实战第015篇:U盘病毒之脱壳研究

    前言 因为我们的终于目标是编写出针对于这次的U盘病毒的专杀工具.而通过上次的分析我们知道,病毒有可能在不同的计算机中会以不同的名称进行显示.假设真是如此,那么就有必要在此分析出病毒的命名规律等特征,然 ...

  7. 病毒木马查杀实战第021篇:Ring3层主动防御之编程实现

    前言 我们这次会依据上次的内容,编程实现一个Ring3层的简单的主动防御软件.整个程序使用MFC实现,程序开始监控时,会将DLL程序注入到explorer.exe进程中,这样每当有新的进程创建,程序首 ...

  8. 病毒木马查杀实战第017篇:U盘病毒之专杀工具的编写

    前言 经过前几次的讨论,我们对于这次的U盘病毒已经有了一定的了解,那么这次我们就依据病毒的行为特征,来编写针对于这次U盘病毒的专杀工具. 专杀工具功能说明 因为这次是一个U盘病毒,所以我打算把这次的专 ...

  9. 病毒木马查杀实战第022篇:txt病毒研究

    前言 反病毒爱好者们非常喜欢讨论的一个问题就是,现在什么样的病毒才算得上是主流,或者说什么样的病毒才是厉害的病毒呢?我们之前的课程所解说的都是Ring3层的病毒.所以有些朋友可能会觉得.那么Ring0 ...

随机推荐

  1. 180. 连续出现的数字 + MySql + 连续出现数字 + 多表联合查询

    180. 连续出现的数字 LeetCode_MySql_180 题目描述 代码实现 # Write your MySQL query statement below select distinct t ...

  2. 剑指 Offer 30. 包含min函数的栈 + 双栈实现求解栈中的最小值

    剑指 Offer 30. 包含min函数的栈 Offer_30 题目描述: 题解分析: 题目其实考察的是栈的知识,本题的目的是使用两个栈来求解最小值. 第二个栈主要用来维护第一个栈中的最小值,所以它里 ...

  3. HDOJ-6665(离散化+DFS求连通分量)

    Calabash and Landlord HDOJ-6665 这里考察的是离散化的知识. 首先将所有的x坐标和y坐标放入两个数组中,然后对这两个数组进行排序.因为总共的坐标数就5个所以这两个数组的大 ...

  4. Github Fork与远程主分支同步

    fork与主分支同步(5步) 1. git remote add upstream git@github.com:haichong98/gistandard.git   新建一个upstream的远程 ...

  5. FreeBSD 13 显卡支持

    On FreeBSD 13, using drm-devel-kmod, support is the same as on Linux 5.4. This includes support for ...

  6. 050_Servlet详解

    目录 Servlet Servlet简介 HelloServlet Servlet原理 servlet-mapping Servlet请求路径 ServletContext Servlet上下文 Se ...

  7. P1996_约瑟夫问题(JAVA语言)_可能是最简单的解法了!

    思路:使用队列模拟. 判断是否为出圈的数.如果不是,把数加入队列尾部:如果是,输出并删除. 题目背景 约瑟夫是一个无聊的人!!! 题目描述 n个人(n<=100)围成一圈,从第一个人开始报数,数 ...

  8. [差分][二分][贪心]luogu P3634 [APIO2012]守卫

    题面 https://www.luogu.com.cn/problem/P3634 给m个限制,可以是一段区间中必须有或者必须无忍者 最多有k个忍者,问有多少个位点一定有忍者 分析 首先用差分标记一下 ...

  9. SptingAOP

    用Spring AOP(面向切面编程)编写简单转账功能实例: 代码结构图 1.准备数据库存储数据(在MySQL中编写) 1 # 删除spring_aop数据库 2 drop database if e ...

  10. Android Studio 待看博文

    •前言 学习过程中找到的一些好的博文,有些可能当时就看完了并解决了我的问题,有些可能需要好几天的事件才能消化. 特此记录,方便查阅. •CSDN 给新人的一些基础常识 TextView的文字长度测量及 ...