首页> 中国专利> 一种间谍程序的分析方法和计算机系统

一种间谍程序的分析方法和计算机系统

摘要

本发明实施例公开了间谍程序的分析方法和计算机系统,应用于通信技术领域。计算机系统会先捕获执行间谍程序的进程的执行轨迹;然后从执行轨迹中提取出回传数据包操作的子程序,该回传数据包操作是计算机系统执行间谍程序的进程时传输数据包给控制主机的操作;最后分析回传数据包操作的子程序中包括的调用接口的信息中各个组成部分的语义信息并输出。这样可以确定出计算机系统在调用间谍程序与控制主机通信过程中的回传的数据包的具体格式,从而发掘出间谍程序的通信协议,用户就可以根据得到的通信协议重写间谍程序的控制命令以控制间谍程序的执行,从而可以避免用户信息的泄露。

著录项

  • 公开/公告号CN103269341A

    专利类型发明专利

  • 公开/公告日2013-08-28

    原文格式PDF

  • 申请/专利权人 腾讯科技(深圳)有限公司;南开大学;

    申请/专利号CN201310167166.8

  • 发明设计人 王志;贾春福;邹赞;张晓康;刘敏;

    申请日2013-05-08

  • 分类号

  • 代理机构深圳市深佳知识产权代理事务所(普通合伙);

  • 代理人唐华明

  • 地址 518031 广东省深圳市福田区振兴路赛格科技园2栋东403室

  • 入库时间 2024-02-19 20:08:03

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-02-17

    授权

    授权

  • 2013-09-25

    实质审查的生效 IPC(主分类):H04L29/06 申请日:20130508

    实质审查的生效

  • 2013-08-28

    公开

    公开

说明书

技术领域

本发明涉及计算机技术领域,特别涉及间谍程序的分析方法和计算机系 统。

背景技术

随着互联网的发展,恶意程序比如间谍程序等也逐渐发展,给当前的信 息安全带来了不容忽视的威胁,因此对恶意程序的研究具有非常重要的意义。

以间谍程序为例说明,现有技术中,远端(比如控制主机)会控制间谍 程序会将恶意代码强行注入到计算机系统当前正运行的应用程序的进程中, 并获取该计算机系统上的用户信息,从而带来信息安全的问题。一般情况下, 这些间谍程序寄宿中计算机系统的某个重要进程中,可以穿越防火墙,且很 难用杀毒的应用程序发现,因此,如何防止计算机系统通过间谍程序泄露用 户信息是现在需要重点解决的问题。

发明内容

本发明实施例提供间谍程序的分析方法和计算机系统,使得通过对计算 机系统在调用间谍程序与控制主机通信过程中的回传数据包的分析,可以发 掘间谍程序的通信协议,从而能控制间谍程序的执行,保护。

本发明实施例提供一种间谍程序的分析方法,包括:

捕获计算机系统执行间谍程序的进程的执行轨迹;

从所述执行轨迹中提取出回传数据包操作的子程序,所述回传数据包操 作是所述计算机系统执行间谍程序的进程时传输数据包给控制主机的操作, 所述回传数据包操作的子程序中包括多个调用接口的信息;

分析所述调用接口的信息中各个组成部分的语义信息并输出。

本发明实施例还提供一种计算机系统,包括:

轨迹捕获单元,用于捕获计算机系统执行间谍程序的进程的执行轨迹;

回传程序提取单元,用于从所述执行轨迹中提取出回传数据包操作的子 程序,所述回传数据包操作是所述计算机系统执行间谍程序的进程时传输数 据包给控制主机的操作,所述回传数据包操作的子程序中包括多个调用接口 的信息;

语义分析单元,用于分析所述调用接口的信息中各个组成部分的语义信 息并输出。

可见,本发明实施例的间谍程序的分析方法中,计算机系统会先捕获计 算机系统执行间谍程序的进程的执行轨迹;然后从执行轨迹中提取出回传数 据包操作的子程序,该回传数据包操作是计算机系统执行间谍程序的进程时 传输数据包给控制主机的操作;最后分析回传数据包操作的子程序中包括的 调用接口的信息中各个组成部分的语义信息并输出。这样可以确定出计算机 系统在调用间谍程序与控制主机通信过程中的回传的数据包的具体格式,从 而发掘出间谍程序的通信协议,用户就可以根据得到的通信协议重写间谍程 序的控制命令以控制间谍程序的执行,比如用户编写的控制命令为:控制间 谍程序的进程在获取用户信息的过程中转向获取其它的非重要信息并返回给 控制主机,这样就可以避免用户信息的泄露。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实 施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面 描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲, 在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的一种间谍程序的分析方法的流程图;

图2是本发明实施例提供的另一种间谍程序的分析方法的流程图;

图3是本发明实施例提供的另一种间谍程序的分析方法的流程图;

图4是本发明实施例中确定的部分调用关系图;

图5是本发明实施例提供的另一种间谍程序的分析方法的流程图;

图6是本发明实施例中进行动态切片后的调用关系图;

图7是本发明实施例提供的另一种间谍程序的分析方法的流程图;

图8a是本发明实施例中通过ASI算法分割发送缓冲区的信息的流向图;

图8b是本发明实施例中发送缓冲区的信息中各个组成部分的结构示意 图;

图9是本发明实施例提供的一种计算机系统的结构示意图;

图10是本发明实施例提供的另一种计算机系统的结构示意图;

图11是本发明实施例提供的另一种计算机系统的结构示意图;

图12是本发明实施例提供的计算机系统中回传程序提取单元的结构示意 图;

图13是本发明实施例提供的间谍程序的分析方法应用于的终端的结构示 意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行 清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而 不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作 出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例提供一种间谍程序的分析方法,主要是对计算机系统执行 间谍程序过程中的回传数据包的操作的分析,本发明实施例的方法是任一计 算机系统所执行的方法,流程图如图1所示,包括:

步骤101,捕获计算机系统执行间谍程序的进程的执行轨迹。

可以理解,应用程序的进程就是一个活跃着的应用程序,即计算机系统 已经将应用程序的代码放到对应的内存空间中,占有了一定的系统资源的应 用程序,一个应用程序在没有被调用到内存空间之前叫做为程序,被调用并 得到了资源后就可以称为进程,一个进程中可以由许多线程组成,而每个线 程能实现一定的功能。每个应用程序对应的内存空间为计算机系统的存储模 块中储存该应用程序的代码的空间,每个应用程序对应存储模块中的一段空 间。

上述间谍程序通常是由控制主机控制,从计算机系统上搜集信息,并在 未得到该计算机系统所属用户许可时便将搜集的信息传递到控制主机的程 序,可以包括监视击键的程序;搜集机密信息比如密码、信用卡号、个人识 别密码(Personal Identification Number,PIN)码等的程序;获取电子邮件地 址的程序,跟踪浏览习惯的程序等。一般情况下,控制主机会控制间谍程序 强行注入到计算机系统中正在执行的应用程序的进程中,这样计算机系统在 执行应用程序的进程的过程中,会调用该间谍程序,从而会泄露该计算机系 统上的用户信息。可见,在执行间谍程序的进程的过程中,计算机系统与控 制主机之间会发生通信,又由于这些间谍程序的形式各样,需要通过分析来 获得间谍程序的通信协议,并根据得到的通信协议重写间谍程序的控制命令, 并控制间谍程序的进程的执行以避免用户信息的泄露。

本实施例中,为了能分析间谍程序,计算机系统需要触发间谍程序的进 程启动,并在计算机系统执行间谍程序的进程的过程中捕获执行轨迹。这里 执行轨迹是程序进程按照时间顺序的执行记录,其中包括进程信息、模块信 息、进程所包含的线程信息、计算机执行间谍程序的进程的指令、指令操作 数、操作数污点标记、寄存器状态等。

步骤102,从执行轨迹中提取出回传数据包操作的子程序,该回传数据包 操作是计算机系统执行间谍程序的进程时传输数据包给控制主机的操作,具 体地可以包括先获取到回传的数据包然后再传输给控制主机,且在回传数据 包操作的子程序中包括多个调用接口的信息。

在计算机系统执行间谍程序的进程的过程中,一般可以包括多个线程的 操作,每个线程都能实现一定的功能,而每个线程中计算机系统会调用多个 接口即应用程序编码接口(Application Programming Interface,,API),比如接 收数据包的接口(比如recv接口函数),输出回传数据包的接口(比如send接 口函数),打开文件的接口等。

本实施例中主要分析的是回传数据包操作的子程序即线程,由于在执行 间谍程序的进程的过程中,计算机系统会与控制主机之间进行通信,则这里 每个回传数据包操作对应至少一个接收数据包操作,即回传的数据包是对接 收数据包响应的数据包,比如对bot.dns命令即域名系统(Domain Name  System,DNS)的查询命令响应的数据包等。在该回传数据包操作的子程序 中也包括有多个调用接口比如获取用户信息的接口,和输出回传数据包的接 口等,由于在步骤101中得到的执行轨迹中已经包括了各个线程中计算机系统 调用的接口,则在执行本实施例中,计算机系统可以从执行轨迹中提取出能 影响到调用输出回传数据包的第一接口的其它被调用第二接口的信息,和调 用输出回传数据包的第一接口一起组成了回传数据包操作的子程序。

步骤103,分析步骤102中得到的回传数据包操作的子程序中每个调用接 口的信息中各个组成部分的语义信息并输出,这样就知道了回传的数据包格 式,从而得知该间谍程序的通信协议。

其中,在调用接口的信息中可以包括多个组成部分,比如长度和具体内 容等,在执行本步骤的分析时,具体可以通过合体结构识别(Aggregate Structure  Identification,ASI)算法将每个调用接口的信息细分成多个组成部分,然后再 通过一定的方法得到各个组成部分的语义信息。该ASI算法是将每一个结构体 (本实施例中具体为调用接口的信息)仅仅考虑为一个给定长度的一系列字 节集,可以将该结构体依据访问方式分解成几个小部分。

可见,本发明实施例的间谍程序的分析方法中,计算机系统会先捕获计 算机系统执行间谍程序的进程的执行轨迹;然后从执行轨迹中提取出回传数 据包操作的子程序,该回传数据包操作是计算机系统执行间谍程序的进程时 传输数据包给控制主机的操作;最后分析回传数据包操作的子程序中包括的 调用接口的信息中各个组成部分的语义信息并输出。这样可以确定出计算机 系统在调用间谍程序与控制主机通信过程中的回传的数据包的具体格式,从 而发掘出间谍程序的通信协议,用户就可以根据得到的通信协议重写间谍程 序的控制命令以控制间谍程序的执行,比如用户编写的控制命令为:控制间 谍程序的进程在获取用户信息的过程中转向获取其它的非重要信息并返回给 控制主机,这样就可以避免用户信息的泄露。

参考图2所示,在一个具体的实施例中,计算机系统在执行上述步骤101 时,具体可以通过如下的步骤来实现:

A1:触发计算机系统执行间谍程序的进程,本实施例中,为了对间谍程 序进行分析,需要计算机系统先执行间谍程序的进程,在具体实现过程中, 可以通过计算机系统中的模拟器来直接执行间谍程序的进程,而不会将该间 谍程序注入到其它应用程序的进程中。

A2:输入对间谍程序的进程的控制命令,并监测到计算机系统对控制命 令执行的二进制执行轨迹,具体地,用户可以从计算机系统的模拟器提供的 接口输入任意一个控制命令,并通过模拟器来监测执行该控制命令的执行轨 迹。

A3:根据二进制执行轨迹得到接收上述控制命令及该控制命令对应的回 传数据包操作中所包括的各个执行指令的信息。由于汇编代码更容易进行分 析,则在执行步骤A3时,可以利用计算机系统的模拟器平台提供的汇编机制, 将计算机系统能直接执行的代码(即二进制执行轨迹中包括的代码)转化为 汇编代码,得到的每个执行指令的格式为“地址:汇编指令参与操作的寄 存器或存储器中的数据污点信息”,其中污点信息是指参与操作的数据是否 被打了污点,做了标记,对于被打了污点的数据,即可以追踪它的传播过程。 例如“719c3c9c:test %eax,%eax Reax[0×00000000][4](R)T0 Reax[0×00000000][4](R)T0”。

且得到的每个执行指令的信息可以如下表1所示:

表1

可见,通过上述A1到A3可以得到汇编格式的执行轨迹,方便之后根据执 行轨迹进行间谍程序的分析。

参考图3所示,在另一个具体的实施例中,由于步骤101中得到的执行轨 迹中可以包括计算机系统执行间谍程序的进程过程中数据包接收和回传的多 个子过程,为了简化分析过程,则计算机系统在执行上述步骤102之前还可以 对执行轨迹进行初步过滤得到数据包接收和回传的一个子过程进行着重分 析,即在执行步骤102之前执行步骤104,即对步骤101中得到的执行轨迹从输 出回传数据包的接口处切割,得到多个子执行轨迹,则每个子执行轨迹中可 以包括计算机系统从接收到控制主机的数据包到输出回传数据包给控制主机 的一个子过程中的执行轨迹。这种情况下,计算机系统在执行上述步骤102时, 会从任一子执行轨迹中提取出回传数据包操作的子程序。

具体地计算机系统在执行上述步骤102时,可以通过如下的步骤来实现:

B1:根据执行轨迹中(本实施例中为一个子执行轨迹)的多个执行指令 的信息确定在计算机系统执行间谍程序的进程过程中,被调用的各个接口之 间的调用关系图。其中调用关系图是计算机系统在执行某一功能时,调用到 的各个接口之间的关系图,具体可以通过S.Horwitz等人提出的构造算法来得 到调用关系图。

由于计算机系统在调用一个接口时,在汇编层次上会先出现入口指令即 call指令,接下来计算机系统就会进入被调用接口的函数体执行,直到执行结 束会有出口指令即ret指令。当出现接口的嵌套调用时,也会有多对call和ret 指令,则根据这些执行指令的先后顺序,依次由外层向内层找call指令,然后 相反的由内层向外层找ret指令,依次配成指令对,每个指令对可以对应一个 被调用的接口。例如,执行轨迹中部分执行指令可以如下表2所示:

表2

可见,上述表2中,第1行的call指令与第3行的ret指令成指令对,第6行的 call指令与第7行的ret指令成指令对,第8行的call指令和第13行的ret指令成指 令对,第9行的call指令和第12行的ret指令成指令对,第10行的call指令和第11 行的ret指令成指令对,第15行的call指令和第16行的ret指令成指令对,第18行 的call指令和第19行的ret指令成指令对,第21行的call指令和第22行的ret指令 成指令对等,可见,在找指令对时,需要查找缩进量相同的call和ret指令。

因此,在确定本步骤中的调用关系图时,计算机系统具体可以先查找执 行轨迹中(本实施例中为一个子执行轨迹)中的多个执行指令中调用每个接 口的入口指令和出口指令;然后将入口指令或出口指令作为调用节点,并将 存在调用关系的调用节点之间通过调用边连接。其中每个调用节点可以表示 一个调用接口的语句,在调用节点中包括被调用接口的起始地址;如果两个 接口之间存在调用关系,比如在调用输出回传数据包的接口时,需要先调用 打开文件获取信息的接口,则输出回传数据包的接口与打开文件获取信息的 接口之间存在调用关系,则用调用边将两个接口对应的调用节点之间连接起 来。

例如图4所示得到的部分调用关系图中,每个调用节点中包括一个入口指 令及被调用接口的起始地址,存在调用关系的两个调用节点之间用调用边(图 4中的箭头)连接。且图4的调用关系图中没有显示与每个call指令成对出现的 ret指令,只用call指令表明接口的调用关系,省略了ret指令。

B2:在调用关系图中查找出影响输出回传数据包的第一接口的其它被调 用的第二接口,将输出回传数据包的第一接口,及影响输出回传数据包的第 一接口的其它被调用的第二接口的信息作为回传数据包操作的子程序。

具体地,计算机系统可以通过动态切片的方法对调用关系图进行动态切 片,得到能影响到输出回传数据包的第一接口调用的其它被调用的第二接口。 其中动态切片主要是对一个程序按照切片准则进行动态切片后最终得到的切 片称为Weiser切片,该切片准则可以用<n,V>来表示,n指程序中的某个兴趣 点,一般指一条语句;V表示在这条语句使用的变量的集合。具体地,对于一 个程序P的切片S可以通过在程序P中删除零条或者多条语句后得到,且保证程 序P和所得的切片S关于切片准则的作用是相同的。进一步地,如果在程序P进 行动态切片时考虑程序P的某个具体输入IO,则计算机系统会计算程序P在这 个特定输入IO的条件下所有影响V在n点的值的语句和谓词集合,从而得到的 切片的准则为<n,V,IO>。

则参考图5所示,在本实施例中,兴趣点n即为确定的动态切片源,计算 机系统在执行步骤B2时,具体可以通过如下步骤来实现,包括:

C1:确定动态切片源为调用关系图中的输出回传数据包的第一接口的入 口指令。

在确定动态切片源时,计算机系统可以先在执行轨迹中,确定输出回传 数据包的第一接口的入口地址,比如send函数的指令寄存器(EIP)即 0x71a24c27;然后在调用关系图中找到该入口地址对应的入口指令即调用关系 图中的一个调用节点。

C2:判断其它被调用的第二接口的调用是否能影响到动态切片源的调用, 即该动态切片源是否为该第二接口的被调用函数,如果影响到,即该第二接 口的函数参数会传播到该动态切片源的函数参数,则执行步骤C3;如果没有 影响到,则执行步骤C4。

C3:将第二接口的入口指令作为动态切片源,并返回执行判断的步骤C2, 这样不停地循环执行,直到对调用关系图内每个调用节点中的入口指令都执 行了步骤C2。

C4:将第二接口的入口指令从调用关系图中删除。

例如图6所示,在对上述图4中调用关系图进行动态切片后,得到切片后 的调用关系图,每个调用节点包括一条入口指令即call指令,且包括调用一个 接口的起始地址。其中调用节点call-404c1c对应的调用接口为输出回传数据包 的第一接口,在该调用节点的入口指令内调用输出回传数据包的第一接口(比 如send函数),进行回传数据包的输出;最顶端的调用节点call-40b657对应创 建回传数据包操作的线程。

需要说明的是,上述第一接口和第二接口并不表示顺序关系,而是为了 说明不同的接口。

可见,通过本实施例的步骤B1到B2,可以获得能影响到输出回传数据包 的第一接口调用的其它被调用的第二接口,进一步地简化了对于间谍程序的 分析。

参考图7所示,在其它具体的实施例中,计算机系统在执行上述步骤103 时,计算机系统可以通过如下的步骤来实现步骤103中的操作,包括:

D1:获取回传数据包操作的子程序中各个调用接口的各个组成参数的信 息。

可以理解,某个计算机系统中操作系统的接口,如系统接口、应用程序 接口及动态链接库中的接口在调用时的各个参数的语义是操作系统供应商所 公开,并储存在接口数据库中的。比如对于传输控制协议(Transmission Control  Protocol,TCP)下的输出接口为send,接口数据库中储存的计算机系统调用 该输出接口的原型信息为:第二个参数为输出数据的首地址,第三个参数为 输出数据的长度。

通常计算机系统在执行间谍程序的进程的过程中,计算机系统传输给控 制主机的回传数据包的内容可以包括目标主机的时间,主机信息如主机名、 端口和本地IP等。回传数据包操作需要涉及到调用多个系统接口,即操作系统 中的应用程序与操作系统底层的接口,计算机系统只有通过调用系统接口才 能使计算机系统完成相应的服务。其中涉及到的系统接口可以包括文件操作 接口、进程操作接口、注册表操作接口、网络接口、系统服务接口和字符串 处理接口等;而这些调用接口的原型信息都存储在接口数据库中,具体可以 包含每个调用接口的原型,接口名、接口功能及返回值等信息,还可以包含 各类参数的信息比如类型及参数意义等。

本实施例中,计算机系统在执行本步骤D1时,可以先在回传数据包操作 的子程序中查找到调用关系图中各个调用节点对应的调用接口的全部信息, 但是计算机系统并不知道调用接口的信息中各个参数的意义;还需要利用调 用接口的入口指令地址向接口数据库中查找到该调用接口的原型信息,比如 对于send接口的第二个参数为输出数据的首地址,第三个参数为输出数据的长 度等,则根据原型信息就可以得到调用接口的各个参数的信息。

其中计算机系统在从回传数据包操作的子程序中查找调用接口的信息 时,如果回传数据包操作的子程序中每个调用接口的信息是连续代码段,计 算机系统很容易找到每个调用接口的全部信息,只要找到每个调用接口的入 口指令和出口指令,则在入口指令与出口指令之间的信息即为该调用接口的 全部信息。

如果回传数据包操作的子程序是非连续的代码段,即每个调用接口的信 息不是连续的代码段,在从回传数据包操作的子程序中查找调用接口的信息 时,计算机系统具体可以根据执行轨迹中调用接口在被调用时的位移信息, 查找到调用接口的全部信息。这里位移信息是指调用接口中两个参数在被调 用到之间的距离信息,可以通过调用语句数量等来衡量,这样计算机系统在 确定调用接口的一个参数信息后,再根据该位移信息移动后即可获得调用接 口的另一参数信息,这样反复操作直到将调用接口的全部信息都查找到为止。

D2:将回传数据包操作的子程序对应发送缓冲区的信息分割成多个组成 部分。

需要说明的是,计算机系统在调用了回传数据包操作的子程序中各个调 用接口后,在该回传数据包操作的子程序对应的发送缓冲区内就包括了计算 机系统需要发送的回传数据包的信息,主要可以按照字节顺序排列。则计算 机系统可以利用ASI算法将该发送缓冲区的信息分割成多个具有语义信息的 小分割单元,每个分割单元以字节为单位,是包含多个字节的字节序列,然 后计算机系统需要通过下述步骤D3得到各个分割单元的语义信息。

在ASI算法中,对于计算机系统访问待分析数据形式,是通过数据访问限 制语言(data-access constraint language,DAC)来指定的,具体地,DAC可以 通过如下的程序来指定:

Pgm::==∈|UnifyConstraint Pgm

UnifyConstraint::==DataRef≈DataRef

DataRef::==ProgVars|DataRef[int:int]|DataRef\Int+

上述DAC的程序中,DataRef代表一序列字节,即需要分析的结构体即待 分析的程序;UnifyConstraint记录待分析程序中数据流的流向。其中数据流的 流向中不包括程序中的直接的数据流,因为对于直接的数据流,即从一个 DataRef到另一个DataRef的数据流,认为这两个DataRef具有相同的结构。 另外≈表示数据流的流向,int是一个非负整数,Int+是一个正数,ProgVars 是程序变量集。且上述的DAC程序指出如下3种数据引用:(1)变量P∈ProgVar 表示变量P的所有字节;(2)DataRef[1:u]表示指的是DataRef中从字节l到u, 例如,P[8:11]指的是变量P的第8到11字节;(3)DataRef\n表示一个包含n个 元素的数组,例如P[0:11]\3指的是一系列字节P[0:3],P[4:7]或者P[8:11]。

例如,回传数据包操作的子程序中一个调用接口的信息的访问限制如下:

P[0:39]\5[0:3]≈const_1[0:3],表示将数组P(包含5个元素)中每个元素 的x值赋值为恒量1,即P[i].x=1;

P[0:39]\5[4:7]≈const_2[0:3],表示将数组P中每个元素的y值赋值为恒量2, 即P[i].y=2;

Return_main[0:3]≈P[4:7],表示返回值为数组P中第4到7字节,该返回值 是被分析程序的实际返回值,即p[0].y的值。

这样该ASI算法中通过DAC程序来指定对于发送缓冲区内待分析程序的 访问方式,从而可以确定出被访问的数据的最小分割单元。

按照以上ASI算法可以将发送缓冲区的信息分割成多个组成部分,如图8a 示出的分割发送缓冲区的信息的流向,及图8b所示的发送缓冲区的信息的组 成部分,其中每个叶子节点都表示最小的不能继续分割的单元,分别代表结 构体P中的一系列字节,数组节点用标记,数组节点中的数字表示数组元素 的个数。总长度为40字节的被分析的程序被分割成两个具体值(即两个4字节 的数即m1和m2)和一个数组m3[4]即P[8:39],其中数组m3[4]进一步地被分割 为包含有4个数组元素的数组,每个数组元素有8字节,而8个字节中又由2个4 字节的节点即m3.m1和m3.m2组成。其中对于P[4:7]来说,在多个组成部分中 都包含了,则该节点为共享节点,也是返回值。

D3:根据步骤D1中得到的调用接口的各个组成参数的信息,对应地确定 步骤D2中分割成的各个组成部分的语义信息后输出。

具体地,计算机系统通过步骤D1可以获得各个调用接口的参数信息,比 如各个参数的首地址等信息,在执行本步骤D3时,可以利用污点传播技术, 先分别将步骤102中得到的回传数据包操作的子程序所包括的各个调用接口 的各个参数打污点,观察这些参数中哪些参数被传播到了该回传数据包操作 的子程序对应的发送缓冲区的地址空间内。如果某一参数被传播到了发送缓 冲区且参数长度与步骤D2中分割得到的分割单元长度相符,则发送缓冲区中 的该分割单元的语义即为打污点的参数的语义,而参数的语义在步骤D1中已 经获得。

其中将各个调用接口的各个参数打污点时,可以从调用接口的参数的首 地址开始,将参数所在的地址空间都打上污点,即将参数的每个字节都打上 污点,且污点的粒度是字节级的,也就是每个字节都有一个唯一的污点标记。 例如,一个调用接口的参数由4个字节组成,那么这个参数的4个字节将被分 别打上不同的污点标记。

例如:通过上述ASI算法及污点传播技术,可以得到的对于bot.dns命令的 回传数据包中可以包括如下表3所示的格式:

表3

本发明实施例还提供一种计算机系统,其中各个单元时间可以按照上述 间谍程序的分析方法的流程进行分析,其结构示意图如图9所示,包括:

轨迹捕获单元10,用于捕获计算机系统执行间谍程序的进程的执行轨迹;

回传程序提取单元11,用于从所述轨迹捕获单元10捕获的执行轨迹中提 取出回传数据包操作的子程序,所述回传数据包操作是所述计算机系统执行 间谍程序的进程时传输数据包给控制主机的操作,所述回传数据包操作的子 程序中包括多个调用接口的信息;

语义分析单元12,用于分析所述回传程序提取单元11提取的回传数据包 操作的子程序中包括的调用接口的信息中各个组成部分的语义信息并输出。

可见,本发明实施例的计算机系统中,轨迹捕获单元10会先捕获计算机 系统执行间谍程序的进程的执行轨迹;然后回传程序提取单元11从执行轨迹 中提取出回传数据包操作的子程序,该回传数据包操作是计算机系统执行间 谍程序的进程时传输数据包给控制主机的操作;最后语义分析单元12分析回 传数据包操作的子程序中包括的调用接口的信息中各个组成部分的语义信息 并输出。这样可以确定出计算机系统在调用间谍程序与控制主机通信过程中 的回传的数据包的具体格式,从而发掘出间谍程序的通信协议,用户就可以 根据得到的通信协议重写间谍程序的控制命令以控制间谍程序的执行,比如 用户编写的控制命令为:控制间谍程序的进程在获取用户信息的过程中转向 获取其它的非重要信息并返回给控制主机,这样就可以避免用户信息的泄露。

参考图10所示,在一个具体的实施例中,计算机系统除了可以包括如图9 所示的结构外,其中的轨迹捕获单元10具体可以通过进程执行单元110、控制 输入单元120和执行获取单元130来实现,而语义分析单元12具体可以通过参 数信息获取单元112、分割单元122和语义确定单元132来实现,具体地:

进程执行单元110,用于触发计算机系统执行所述间谍程序的进程。

控制输入单元120,用于输入对所述间谍程序的进程的控制命令,并监测 到所述计算机系统对所述控制命令执行的二进制执行轨迹。用户可以通过控 制输入单元120提供的接口输入任意一个控制命令,并监测进程执行单元110 执行该控制命令的执行轨迹。

执行获取单元130,用于根据所述控制输入单元120监测到的二进制执行 轨迹得到接收所述控制命令及所述控制命令对应的回传数据包操作中包括的 各个执行指令的信息。该执行获取单元130可以通过反汇编方法,将计算机系 统能直接执行的代码(即二进制执行轨迹中包括的代码)转化为汇编代码, 得到的每个执行指令的格式可以为“地址:汇编指令参与操作的寄存器或 存储器中的数据污点信息”。

参数信息获取单元112,用于获取回传程序提取单元11提取的回传数据包 操作的子程序中各个调用接口的各个组成参数的信息。具体地,参数信息获 取单元112可以从所述回传数据包操作的子程序中查找各个调用接口的信息; 然后向接口数据库中查找到所述调用接口的原型信息,根据原型信息获知所 述调用接口的各个参数的信息。

其中,在查找各个调用接口的信息时,如果回传数据包操作的子程序中 每个调用接口的信息是连续代码段,则参数信息获取单元112很容易找到每个 调用接口的全部信息,只要找到每个调用接口的入口指令和出口指令,则在 入口指令与出口指令之间的信息即为该调用接口的全部信息;如果回传数据 包操作的子程序是非连续的代码段,参数信息获取单元112需要根据所述执行 轨迹中所述调用接口在被调用时的位移信息,查找到所述调用接口的信息。

分割单元122,用于将所述回传程序提取单元11提取的回传数据包操作的 子程序对应发送缓冲区的信息分割成多个组成部分。

语义确定单元132,用于根据所述参数信息获取单元112获取的调用接口 的各个组成参数的信息,对应地确定所述分割单元122分割成的各个组成部分 的语义信息并输出。

具体地,语义确定单元132在确定语义信息时,可以利用污点传播技术, 先分别将回传数据包操作的子程序所包括的各个调用接口的各个参数打污 点,观察这些参数中哪些参数被传播到了该回传数据包操作的子程序对应的 发送缓冲区的地址空间内。如果某一参数被传播到了发送缓冲区且参数长度 与分割单元122分割得到的分割单元长度相符,则发送缓冲区中的该分割单元 的语义即为打污点的参数的语义,而参数的语义通过参数信息获取单元112已 经获得。

其中语义确定单元132将各个调用接口的各个参数打污点时,可以从调用 接口的参数的首地址开始,将参数所在的地址空间都打上污点,即将参数的 每个字节都打上污点,且污点的粒度是字节级的,也就是每个字节都有一个 唯一的污点标记。例如,一个调用接口的参数由4个字节组成,那么这个参数 的4个字节将被分别打上不同的污点标记。

本实施例的计算机系统中,通过轨迹捕获单元10中的进程执行单元110、 控制输入单元120和执行获取单元130即可得到包括各个执行指令的信息的执 行轨迹;然后由回传程序提取单元11中从执行获取单元130得到的执行轨迹中 提取回传数据包操作的子程序;最后由语义分析单元12来进行语义分析并输 出。

参考图11所示,在另一个具体的实施例中,计算机系统除了可以包括如 图9所示的结构外,还可以包括切割单元13,且其中的回传程序提取单元11具 体可以通过调用图确定单元111和查找单元121来实现,具体地:

切割单元13,用于对所述轨迹捕获单元10捕获的执行轨迹从输出回传数 据包的接口处进行切割,得到多个子执行轨迹,每个子执行轨迹中可以包括 计算机系统从接收到控制主机的数据包到输出回传数据包给控制主机的一个 子过程中的执行轨迹,其中捕获的执行轨迹中可以包括多个执行指令的信息。 则回传程序提取单元11具体可以从所述任一子执行轨迹中提取出回传数据包 操作的子程序。

调用图确定单元111,用于根据所述多个执行指令的信息确定在计算机系 统执行间谍程序的进程过程中,被调用的各个接口之间的调用关系图,具体 地,该调用图确定单元111可以根据入口指令(即call指令)及出口指令(即ret 指令)的先后顺序,依次由外层向内层找call指令,然后相反的由内层向外层 找ret指令,依次配成指令对,每个指令对可以对应一个被调用的接口。

查找单元121,用于在所述调用图确定单元111确定的调用关系图中查找 出影响输出回传数据包的第一接口的被调用的第二接口,将所述输出回传数 据包的第一接口,及影响回传数据包的第一接口的被调用的第二接口的信息 作为所述回传数据包操作的子程序。

本实施例中,当轨迹捕获单元10在获得包括多个执行指令的信息的执行 轨迹后,可以由回传程序提取单元11中的调用图确定单元111根据这多个执行 指令的信息确定调用关系图。进一步地,为了简化分析过程,在轨迹捕获单 元10获得执行轨迹后,可以先由切割单元13切割得到多个子执行轨迹,然后 再由回传程序提取单元11中的调用图确定单元111根据这多个子执行轨迹中得 多个执行指令的信息确定调用关系图,最终得到的每个子执行轨迹的调用关 系图可以表示计算机系统从接收到控制主机的数据包到输出回传数据包给控 制主机的一个子过程中接口调用的情况。

当调用图确定单元111在确定了调用关系图后,可以由查找单元121通过 动态切片的方式查找出回传数据包操作的子程序;最后语义分析单元12分析 该回传数据包操作的子程序中各个部分的语义信息。

参考图12所示,在具体实现的过程中,本实施例的调用图确定单元111具 体可以通过指令查找单元131和调用图获取单元141来实现,而查找单元121具 体可以通过切片源确定单元151、判断单元161、判断处理单元171和删除单元 181来实现,其中:

指令查找单元131,用于查找所述轨迹捕获单元10捕获得到的执行轨迹 (或切割单元13切割得到的子执行轨迹)包括的多个执行指令中调用每个接 口的入口指令和出口指令;

调用图获取单元141,用于将所述指令查找单元131查找的入口指令或出 口指令作为调用节点,并将存在调用关系的调用节点之间通过调用边连接。

切片源确定单元151,用于确定动态切片源为所述调用图确定单元111确 定的调用关系图中的输出回传数据包的第一接口的入口指令。切片源确定单 元151可以先在执行轨迹中,确定输出回传数据包的第一接口的入口地址,比 如send函数的指令寄存器(EIP)即0x71a24c27;然后在调用关系图中找到该 入口地址对应的入口指令即调用关系图中的一个调用节点。

判断单元161,用于判断所述调用关系图中被调用的第二接口的调用是否 影响到所述切片源确定单元151确定的动态切片源的调用。

判断处理单元171,用于如果所述判断单元161判断所述第二接口的调用 影响到所述动态切片源的调用,则将所述第二接口的入口指令作为所述动态 切片源,并触发所述判断单元161执行所述判断的步骤。

删除单元181,用于如果所述判断单元161判断所述第二接口的调用没有 影响到所述动态切片源的调用,则将所述第二接口的入口指令从所述调用关 系图中删除。

本实施例中,通过判断单元161、判断处理单元171和删除单元181不停地 循环执行动态切片的过程,直到对调用关系图内每个调用节点中的入口指令 都由判断单元161进行了判断。

以下主要以本发明实施例的间谍程序分析方法应用于终端中来举例说 明,该终端可以包括智能手机、平板电脑、电子书阅读器、动态影像专家压 缩标准音频层面3(Moving Picture Experts Group Audio Layer III,MP3)播放 器、动态影像专家压缩标准音频层面4(Moving Picture Experts Group Audio  Layer IV,MP4)播放器、膝上型便携计算机和台式计算机等等。

请参考图13,其示出了本发明实施例所涉及的终端的结构示意图,具体 来讲:

终端可以包括射频(Radio Frequency,RF)电路20、包括有一个或一个 以上计算机可读存储介质的存储器21、输入单元22、显示单元23、传感器 24、音频电路25、无线保真(wireless fidelity,WiFi)模块26、包括有一个或 者一个以上处理核心的处理器27、以及电源28等部件。本领域技术人员可 以理解,图13中示出的终端结构并不构成对终端的限定,可以包括比图示更 多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:

RF电路20可用于收发信息或通话过程中,信号的接收和发送,特别地, 将基站的下行信息接收后,交由一个或者一个以上处理器27处理;另外,将 涉及上行的数据发送给基站。通常,RF电路20包括但不限于天线、至少一 个放大器、调谐器、一个或多个振荡器、用户身份模块(SIM)卡、收发信 机、耦合器、低噪声放大器(Low Noise Amplifier,LNA)、双工器等。此外, RF电路20还可以通过无线通信与网络和其他设备通信。所述无线通信可以 使用任一通信标准或协议,包括但不限于全球移动通讯系统(Global System  of Mobile communication,GSM)、通用分组无线服务(General Packet Radio  Service,GPRS)、码分多址(Code Division Multiple Access,CDMA)、宽带 码分多址(Wideband Code Division Multiple Access,WCDMA)、长期演进 (Long Term Evolution,LTE)、电子邮件、短消息服务(Short Messaging Service, SMS)等。

存储器21可用于存储软件程序以及模块,处理器27通过运行存储在存 储器21的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器 21可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、 至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等; 存储数据区可存储根据终端的使用所创建的数据(比如音频数据、电话本等) 等。此外,存储器21可以包括高速随机存取存储器,还可以包括非易失性存 储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。 相应地,存储器21还可以包括存储器控制器,以提供处理器27和输入单元 22对存储器21的访问。

输入单元22可用于接收输入的数字或字符信息,以及产生与用户设置以 及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。具体地, 在一个具体的实施例中,输入单元22可包括触敏表面221以及其他输入设备 222。触敏表面221,也称为触摸显示屏或者触控板,可收集用户在其上或附 近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触敏表 面221上或在触敏表面221附近的操作),并根据预先设定的程式驱动相应的 连接装置。可选的,触敏表面221可包括触摸检测装置和触摸控制器两个部 分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号, 将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并 将它转换成触点坐标,再送给处理器27,并能接收处理器27发来的命令并 加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类 型实现触敏表面221。除了触敏表面221,输入单元22还可以包括其他输入 设备222。具体地,其他输入设备222可以包括但不限于物理键盘、功能键 (比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多 种。

显示单元23可用于显示由用户输入的信息或提供给用户的信息以及终 端的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频 和其任意组合来构成。显示单元23可包括显示面板231,可选的,可以采用 液晶显示器(Liquid Crystal Display,LCD)、有机发光二极管(Organic  Light-Emitting Diode,OLED)等形式来配置显示面板231。进一步的,触敏表 面221可覆盖显示面板231,当触敏表面221检测到在其上或附近的触摸操 作后,传送给处理器27以确定触摸事件的类型,随后处理器27根据触摸事 件的类型在显示面板231上提供相应的视觉输出。虽然在图13中,触敏表面 221与显示面板231是作为两个独立的部件来实现输入和输入功能,但是在 某些实施例中,可以将触敏表面221与显示面板231集成而实现输入和输出 功能。

终端还可包括至少一种传感器24,比如光传感器、运动传感器以及其他 传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境 光传感器可根据环境光线的明暗来调节显示面板231的亮度,接近传感器可 在终端移动到耳边时,关闭显示面板231和/或背光。作为运动传感器的一种, 重力加速度传感器可检测各个方向上(一般为三轴)加速度的大小,静止时 可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、 相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至 于终端还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他 传感器,在此不再赘述。

音频电路25、扬声器251,传声器252可提供用户与终端之间的音频接 口。音频电路25可将接收到的音频数据转换后的电信号,传输到扬声器251, 由扬声器251转换为声音信号输出;另一方面,传声器252将收集的声音信 号转换为电信号,由音频电路25接收后转换为音频数据,再将音频数据输出 处理器27处理后,经RF电路20以发送给比如另一终端,或者将音频数据 输出至存储器21以便进一步处理。音频电路25还可能包括耳塞插孔,以提 供外设耳机与终端的通信。

WiFi属于短距离无线传输技术,终端通过WiFi模块26可以帮助用户收 发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联 网访问。虽然图13示出了WiFi模块26,但是可以理解的是,其并不属于终 端的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。

处理器27是终端的控制中心,利用各种接口和线路连接整个手机的各个 部分,通过运行或执行存储在存储器21内的软件程序和/或模块,以及调用 存储在存储器21内的数据,执行终端的各种功能和处理数据,从而对手机进 行整体监控。可选的,处理器27可包括一个或多个处理核心;优选的,处理 器27可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作 系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理 解的是,上述调制解调处理器也可以不集成到处理器27中。

终端还包括给各个部件供电的电源28(比如电池),优选的,电源可以 通过电源管理系统与处理器27逻辑相连,从而通过电源管理系统实现管理充 电、放电、以及功耗管理等功能。电源28还可以包括一个或一个以上的直流 或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电 源状态指示器等任意组件。

尽管未示出,终端还可以包括摄像头、蓝牙模块等,在此不再赘述。具 体在本实施例中,终端中的处理器27会按照如下的指令,执行存储器21中储 存的一个或一个以上的应用程序的进程,从而实现各种功能:

捕获该处理器27在执行间谍程序的进程的执行轨迹;

从所述执行轨迹中提取出回传数据包操作的子程序,所述回传数据包操 作是该处理器27执行间谍程序的进程时传输数据包给控制主机的操作,所述 回传数据包操作的子程序中包括多个调用接口的信息;

分析所述调用接口的信息中各个组成部分的语义信息并输出。

其中处理器27在捕获计算机系统执行间谍程序的进程的执行轨迹时,具 体地,可以先触发该处理器27执行所述间谍程序的进程;然后输入对所述间 谍程序的进程的控制命令,并监测所述该处理器27对所述控制命令执行的二 进制执行轨迹;再根据所述二进制执行轨迹得到接收所述控制命令及所述控 制命令对应的回传数据包操作中包括的各个执行指令的信息。

而在分析所述调用接口的信息中各个组成部分的语义信息并输出时,处 理器27具体可以:获取所述回传数据包操作的子程序中各个调用接口的各个 组成参数的信息;并将回传数据包操作的子程序对应发送缓冲区的信息分割 成多个组成部分;然后根据获取的调用接口的各个组成参数的信息,对应地 确定分割成的各个组成部分的语义信息并输出。其中处理器27在获取调用接 口的各个组成参数的信息时,可以从回传数据包操作的子程序中查找各个调 用接口的信息;然后向接口数据库中查找到所述调用接口的原型信息,根据 原型信息从而获知所述调用接口的各个参数的信息。而处理器27在查找调用 接口的信息时,如果所述回传数据包操作的子程序是非连续的代码段,则处 理器27在从所述回传数据包操作的子程序中查找各个调用接口的信息,具体 包括:根据所述执行轨迹中所述调用接口在被调用时的位移信息,查找到所 述调用接口的信息。

进一步地,为了简化分析过程,处理器捕获该处理器27执行间谍程序的 进程的执行轨迹之后,还需要对所述执行轨迹从输出回传数据包的接口处进 行切割,得到多个子执行轨迹;则所述从所述执行轨迹中提取出回传数据包 操作的子程序,具体包括:从所述任一子执行轨迹中提取出回传数据包操作 的子程序。

如果捕获的执行轨迹中包括多个执行指令的信息;则处理器27从所述执 行轨迹中提取出回传数据包操作的子程序,具体包括:根据所述多个执行指 令的信息确定在该处理器27执行间谍程序的进程过程中,被调用的各个接口 之间的调用关系图;在所述调用关系图中查找出影响输出回传数据包的第一 接口的被调用的第二接口,将所述输出回传数据包的第一接口,及影响回传 数据包的第一接口的被调用的第二接口的信息作为所述回传数据包操作的子 程序。其中:

(1)处理器27根据所述多个执行指令的信息确定在该处理器27执行间谍 程序的进程过程中,被调用的各个接口之间的调用关系图,具体包括:查找 所述多个执行指令中调用每个接口的入口指令和出口指令;将所述入口指令 或出口指令作为调用节点,并将存在调用关系的调用节点之间通过调用边连 接。

(2)处理器27在所述调用关系图中查找出影响输出回传数据包的第一接 口的被调用的第二接口,具体包括:确定动态切片源为所述调用关系图中的 输出回传数据包的第一接口的入口指令;判断所述第二接口的调用是否影响 到所述动态切片源的调用,如果是,则将所述第二接口的入口指令作为所述 动态切片源,并返回执行所述判断的步骤;如果不是,则将所述第二接口的 入口指令从所述调用关系图中删除。

本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步 骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可 读存储介质中,存储介质可以包括:只读存储器(ROM)、随机存取存储器 (RAM)、磁盘或光盘等。

以上对本发明实施例所提供的间谍程序的分析方法和计算机系统进行了 详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述, 以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对 于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围 上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号