本发明涉及计算机网络安全领域,尤其涉及一种监控程序的方法、装置、电子设备及存储介质。
背景技术
沙箱(sandboxie),又名沙盘,是一种按照安全策略限制程序行为的执行环境,它允许用户在沙箱环境中运行程序,运行所产生的变化可以随后删除。通过在沙箱环境中运行程序,可以检测程序中是否存在恶意行为,当发现程序中存在恶意行为时可以发出告警。
在实现本发明的过程中,发明人发现目前在沙箱系统对恶意软件的分析中,当样本程序在沙箱中运行时,如果该样本程序的执行逻辑中存在选择分支,但沙箱系统只能根据当前的执行环境选择一个分支进行执行,其余分支的逻辑就不会被执行,出现对样本程序的漏检,就会遗漏掉其余分支上的重要行为。
技术实现要素:
有鉴于此,本发明实施例提供一种监控程序的方法、装置、电子设备及存储介质,能够在宿主机上实现对样本程序更全面的监控。
第一方面,本发明实施例提供一种监控程序的方法,应用于宿主机,该方法包括:判断当前客户机中样本程序是否执行到的分支节点;当客户机中的样本程序执行到分支节点时,获取所述分支节点对应分支状态信息,所述分支状态信息包括多个分支对应的跳转条件以及跳转地址;根据所述分支状态信息,执行每个分支并采集执行过程中的行为数据直至所述分支节点中包含的所述多个分支均执行完成。
结合第一方面,在第一方面的第一种实施方式中,所述判断当前是否执行到客户机中样本程序的分支节点,包括:获取当前被调用的应用程序接口api以及样本程序的地址空间;当调用所述api的函数地址位于所述样本程序的地址空间内,且所述api为第一类api时,确定所述客户机中的样本程序执行到分支节点,所述第一类api为样本程序中执行分支逻辑时被调用的api。
结合第一方面,在第一方面的第二种实施方式中,所述判断当前是否执行到客户机中样本程序的分支节点,包括:检测当前运行的应用程序是否为样本程序;在当前运行的应用程序为样本程序,且截获的客户机当前执行的指令为第一类指令时,确定所述客户机中的样本程序执行到分支节点,所述第一类指令为样本程序中用于执行分支逻辑的选择指令。
结合第一方面、第一方面的第一种或第二种实施方式,在第一方面的第三种实施方式中,所述判断当前是否执行到客户机中样本程序的分支节点之前,还包括:建立样本程序需要监控的分支选择行为的集合,所述集合包括第一类api和/或第一类指令。
结合第一方面、第一方面的第一种或第二种实施方式,在第一方面的第四种实施方式中,所述根据所述分支状态信息,执行每个分支并采集执行过程中的行为数据直至所述分支节点中包含的所述多个分支均执行完成之前,还包括:当客户机中的样本程序执行到分支节点时,保存当前指令执行现场信息,所述指令执行现场信息包括指针地址、栈地址以及寄存器的当前状态;所述根据所述分支状态信息,执行每个分支并采集执行过程中的行为数据直至所述分支节点中包含的所述多个分支均执行完成,包括:根据所述分支状态信息以及所述当前指令执行现场信息,执行每个分支并采集执行过程中的行为数据直至所述分支节点中包含的所述多个分支均执行完成。
结合第一方面、第一方面的第一种或第二种实施方式中,在第一方面的第五种实施方式中,所述根据所述分支状态信息,执行每个分支并采集执行过程中的行为数据直至所述分支节点中包含的所述多个分支均执行完成,包括:根据当前执行指令对应的跳转条件确定执行分支,将执行指针跳转至对应的跳转地址;当所述执行分支执行完毕,根据所述分支状态信息,模拟所述分支节点中除所述执行分支之外的剩余分支对应的跳转条件进行分支执行,直至所述分支节点中包含的所述多个分支均执行完成。
结合第一方面的第五种实施方式,在第一方面的第六种可能的实现方式中,在调用所述api的函数地址位于所述样本程序的地址空间内,且所述api为第一类api,确定所述客户机中的样本程序执行到分支节点的情况下,所述当所述执行分支执行完毕,根据所述分支状态信息,模拟所述分支节点中除所述执行分支之外的剩余分支对应的跳转条件进行分支执行,包括:
当所述执行分支执行完毕,根据所述分支状态信息,修改所述api的返回值,以触发所述执行分支之外的其它分支执行;其中,修改后的api返回值,不同于作为已执行完毕的分支的执行条件的api返回值;或者,
当所述执行分支执行完毕,根据所述分支状态信息,修改执行环境中不满足的条件,使所述api返回表示条件满足的返回值,以触发所述执行分支之外的其它分支执行。
结合第一方面的第五种实施方式,在第一方面的第七种可能的实现方式中,在当前运行的应用程序为样本程序,且截获的客户机当前执行的指令为第一类指令,确定所述客户机中的样本程序执行到分支节点的情况下,所述当所述执行分支执行完毕,根据所述分支状态信息,模拟所述分支节点中除所述执行分支之外的剩余分支对应的跳转条件进行分支执行,包括:
当所述执行分支执行完毕,根据所述分支状态信息,重定向跳转指针到不同的地址,以触发所述执行分支之外的其它分支执行;其中,重定向后的跳转地址,不同于作为已执行完毕的分支的执行条件的跳转地址。
结合第一方面、第一方面的第一种或第二种实施方式,在第一方面的第八种可能的实现方式中,所述根据所述分支状态信息,执行每个分支并采集执行过程中的行为数据直至所述分支节点中包含的所述多个分支均执行完成之后,还包括:销毁所述分支状态信息。
第二方面,本发明实施例提供一种监控程序的装置,包括:
判断单元,用于判断当前客户机中样本程序是否执行到的分支节点;
获取单元,当所述判断单元判断得到客户机中的样本程序执行到分支节点时,用于获取所述分支节点对应分支状态信息,所述分支状态信息包括多个分支对应的跳转条件以及跳转地址;
执行单元,用于根据所述获取单元获取的分支状态信息,执行每个分支并采集执行过程中的行为数据直至所述分支节点中包含的所述多个分支均执行完成。
结合第二方面,在第二方面的第一种实施方式中,所述判断单元,包括:
获取模块,用于获取当前被调用的应用程序接口api以及样本程序的地址空间;
第一确定模块,用于当调用所述api的函数地址位于所述样本程序的地址空间内,且所述api为第一类api时,确定所述客户机中的样本程序执行到分支节点,所述第一类api为样本程序中执行分支逻辑时被调用的api。
结合第二方面,在第二方面的第二种实施方式中,所述判断单元,包括:
检测模块,用于检测当前运行的应用程序是否为样本程序;
第二确定模块,用于在当前运行的应用程序为样本程序,且截获的客户机当前执行的指令为第一类指令时,确定所述客户机中的样本程序执行到分支节点,所述第一类指令为样本程序中用于执行分支逻辑的选择指令。
结合第二方面、第二方面的第一种或第二种实施方式,在第二方面的第三种实施方式中,所述装置,还包括:
建立单元,用于建立样本程序需要监控的分支选择行为的集合,所述集合包括第一类api和/或第一类指令。
结合第二方面、第二方面的第一种或第二种实施方式,在第二方面的第四种实施方式中,所述装置,还包括:
保存单元,用于当客户机中的样本程序执行到分支节点时,保存当前指令执行现场信息,所述指令执行现场信息包括指针地址、栈地址以及寄存器的当前状态;
所述执行单元,具体用于根据所述分支状态信息以及所述当前指令执行现场信息,执行每个分支并采集执行过程中的行为数据直至所述分支节点中包含的所述多个分支均执行完成。
结合第二方面的第一种或第二种实施方式,在第二方面的第五种可能的实现方式中,所述执行单元,包括:
跳转模块,用于根据当前执行指令对应的跳转条件确定执行分支,将执行指针跳转至对应的跳转地址;
模拟模块,用于当所述执行分支执行完毕,根据所述分支状态信息,模拟所述分支节点中除所述执行分支之外的剩余分支对应的跳转条件进行分支执行,直至所述分支节点中包含的所述多个分支均执行完成。
结合第二方面的第五种实施方式,在第二方面的第六种实施方式中,在所述第一确定模块确定所述客户机中的样本程序执行到分支节点的情况下,所述模拟模块具体用于:
当所述执行分支执行完毕,根据所述分支状态信息,修改所述api的返回值,以触发所述执行分支之外的其它分支执行;其中,修改后的api返回值,不同于作为已执行完毕的分支的执行条件的api返回值;或者,
当所述执行分支执行完毕,根据所述分支状态信息,修改执行环境中不满足的条件,使所述api返回表示条件满足的返回值,以触发所述执行分支之外的其它分支执行。
结合第二方面的第五种实施方式,在第二方面的第七种实施方式中,在所述第二确定模块确定所述客户机中的样本程序执行到分支节点的情况下,所述模拟模块具体用于:
当所述执行分支执行完毕,根据所述分支状态信息,重定向跳转指针到不同的地址,以触发所述执行分支之外的其它分支执行;其中,重定向后的跳转地址,不同于作为已执行完毕的分支的执行条件的跳转地址。
结合第二方面、第二方面的第一种或者第二种实施方式,在第二方面的第八种实施方式中,所述装置,还包括:
销毁单元,在执行单元完成分支节点中包含的多个分支后,销毁所述保存单元保存的分支状态信息。
第三方面,本发明实施例提供一种电子设备,所述电子设备包括:壳体、处理器、存储器、电路板和电源电路,其中,电路板安置在壳体围成的空间内部,处理器和存储器设置在电路板上;电源电路,用于为上述电子设备的各个电路或器件供电;存储器用于存储可执行程序代码;处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,用于执行前述任一所述的控制程序的方法。
第四方面,本发明的实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现前述任一所述的控制程序的方法。
本发明实施例提供的一种监控程序的方法、装置、电子设备及存储介质,通过在宿主机上判断当前客户机中样本程序是否执行到的分支节点,当客户机中的样本程序执行到分支节点时,获取所述分支节点对应分支状态信息,根据所述分支状态信息,执行每个分支并采集执行过程中的行为数据直至所述分支节点中包含的所述多个分支均执行完成,能有效的触发大部分的关键逻辑分支被执行,这样能够在宿主机上实现对样本程序更全面的监控。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本发明的实施例提供的一种监控程序的方法的流程图;
图2为本发明又一实施例提供的一种监控程序的方法的流程图;
图3为本发明另一实施例提供的一种监控程序的方法的流程图
图4为本发明实施例提供的监控程序的装置的结构示意图一;
图5为图4所示的监控程序的装置中判断单元的结构示意图一;
图6为图4所示的监控程序的装置中判断单元的结构示意图二;
图7为本发明实施例提供的监控程序的装置的结构示意图二;
图8为图7所示的监控程序的装置中执行单元的结构示意图;
图9为本发明电子设备一个实施例的结构示意图。
具体实施方式
本发明实施例提供的一种监控程序的方法、装置、电子设备及存储介质,通过在宿主机上判断当前客户机中样本程序是否执行到的分支节点,当客户机中的样本程序执行到分支节点时,获取所述分支节点对应分支状态信息,根据所述分支状态信息,通过模拟不同分支执行时所需的系统环境,以触发两个或两个以上的分支被执行,较佳地,以触发所有分支节点中包含的全部的分支被执行,从而促使样本的多个分支逻辑被执行,进而实现在宿主机上对样本程序更全面的监控。
下面结合附图对本发明实施例进行详细描述。
应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
本实施例提供一种监控程序的方法,以解决现有技术中执行逻辑种存在选择分支的样本程序只能根据当前的执行环境选择一个分支进行执行,其余的分支的逻辑就不会被执行,出现对样本程序的漏检,就会遗漏掉其余分支上的重要行为的问题。
图1为本发明的实施例提供的一种监控程序的方法的流程图,如图1所示,本实施例的应用场景以虚拟机作为载体的沙箱,其包括宿主机、客户机,其中,所述宿主机为真实的物理设备,虚拟机系统和客户机安装在此设备之上;所述客户机为利用虚拟机软件,安装在宿主机之上的虚拟设备;所述虚拟机系统为安装在客户机设备(虚拟设备)之中的操作系统。
本实施例的方法,其执行主体为宿主机,可以包括:
步骤101、判断当前客户机中样本程序是否执行到的分支节点。
本实施例中,判断当前客户机中样本程序是否执行到的分支节点的具体实现方式,可以有以下两种但不限于以下两种形式:
第一种:获取当前被调用的应用程序接口api以及样本程序的地址空间;当调用所述api的函数地址位于所述样本程序的地址空间内,且所述api为第一类api时,确定所述客户机中的样本程序执行到分支节点,所述第一类api为样本程序中执行分支逻辑时被调用的api。
具体的,从虚拟机外部对虚拟机的底层内存数据进行解析,从中找到样本程序的地址区间,对当前处理的api进行获取,根据样本程序的地址区间,确定当前捕获的api是否为样本程序发起的,如果是则认为该api是由样本程序调用的,这样就可以捕获被监控的样本程序的所有api调用,注意这里的api指的是内核api。
示例性的,所述第一类api可以具体的为用来判断或检测某些文件或者某些执行特定的条件是否满足的api,比如判断文件是否存在的api,判断进程是否存活的api,判断权限的api等等。
第二种:检测当前运行的应用程序是否为样本程序;在当前运行的应用程序为样本程序,且截获的客户机当前执行的指令为第一类指令时,确定所述客户机中的样本程序执行到分支节点,所述第一类指令为样本程序中用于执行分支逻辑的选择指令。
具体的,本方法的执行主体为宿主机,位于客户机外部执行,也就是和虚拟机管理器处于同一层级,因此可以调用客户机的接口对客户机的指令执行进行截获和处理,根据客户机的调度规律,检测客户机当前的运行的程序是否为被监控的样本程序,如果是,则截获当前的客户机执行指令,并匹配当前执行的指令是否是跳转指令,如果是,则可以确定所述客户机中的样本程序执行到分支节点。
示例性的,所述第一类指令可以具体为选择指令,比如switch,if,else,goto等。
步骤102、当客户机中的样本程序执行到分支节点时,获取所述分支节点对应分支状态信息,所述分支状态信息包括多个分支对应的跳转条件以及跳转地址。
步骤103、根据所述分支状态信息,执行每个分支并采集执行过程中的行为数据直至所述分支节点中包含的所述多个分支均执行完成。
在本实施例中,所述步骤103,具体为:
遍历所述分支状态信息,对分支状态信息对应的分支节点中包含的多个分支进行执行,在执行的过程中将已执行的分支进行标识。优选的,对当前检测到的api调用或者选择指令对应的跳转条件直接进行,再执行分支节点中其他的分支。其具体实现过程,如下所示:
根据当前执行指令对应的跳转条件确定执行分支,将执行指针跳转至对应的跳转地址;当所述执行分支执行完毕,根据所述分支状态信息,模拟所述分支节点中除所述执行分支之外的剩余分支对应的跳转条件进行分支执行,直至所述分支节点中包含的所述多个分支均执行完成。
示例性的,在根据步骤101中的第一种情况判断当前客户机中样本程序执行到的分支节点的情况下,具体地,在调用所述api的函数地址位于所述样本程序的地址空间内,且所述api为第一类api,确定所述客户机中的样本程序执行到分支节点的情况下,所述当所述执行分支执行完毕,根据所述分支状态信息,模拟所述分支节点中除所述执行分支之外的剩余分支对应的跳转条件进行分支执行,可包括:
当所述执行分支执行完毕,根据所述分支状态信息,修改所述api的返回值,以触发所述执行分支之外的其它分支执行;其中,修改后的api返回值,不同于作为已执行完毕的分支的执行条件的api返回值;或者,
当所述执行分支执行完毕,根据所述分支状态信息,修改执行环境中不满足的条件,使所述api返回表示条件满足的返回值,以触发所述执行分支之外的其它分支执行。
在一个例子中,在一个分支节点处有两个分支:第一分支和第二分支。该分支节点是通过匹配api的方法找到的,保存该api调用的上下文,对该api不做任何修改,按照自然的运行逻辑执行进入第一分支,当第一分支执行完毕后恢复保存的api上下文,修改该api的返回值,以触发第二分支执行;其中,修改后的api返回值,不同于作为已执行完毕的第一分支的执行条件的api返回值,作为举例,若进入第一分支执行的条件是该api返回值为“y”,则当第一分支执行完毕后,修改该api的返回值为“n”,以触发第二分支执行。
在另一个例子中,在一个分支节点处有两个分支:第一分支和第二分支。该分支节点是通过匹配api的方法找到的,并且该api是用来检测w文件是否存在的api。如因执行环境中不存在w文件,该api首次未检测到w文件时,进入第一分支执行。在第一分支执行完毕之前,可修改执行环境中不满足的条件,即可在执行环境中创建一个同名的w文件,在第一分支执行完毕之后恢复保存的api上下文,当该api再次检测时可检测到w文件存在,此时可触发第二分支执行。
示例性的,在根据步骤101中的第二种情况判断当前客户机中样本程序执行到的分支节点的情况下,具体地,在当前运行的应用程序为样本程序,且截获的客户机当前执行的指令为第一类指令,确定所述客户机中的样本程序执行到分支节点的情况下,所述当所述执行分支执行完毕,根据所述分支状态信息,模拟所述分支节点中除所述执行分支之外的剩余分支对应的跳转条件进行分支执行,可包括:
当所述执行分支执行完毕,根据所述分支状态信息,重定向跳转指针到不同的地址,以触发所述执行分支之外的其它分支执行;其中,重定向后的跳转地址,不同于作为已执行完毕的分支的执行条件的跳转地址。
本发明实施例提供的一种监控程序的方法,通过在宿主机上判断当前客户机中样本程序是否执行到的分支节点,当客户机中的样本程序执行到分支节点时,获取所述分支节点对应分支状态信息,根据所述分支状态信息,执行每个分支并采集执行过程中的行为数据直至所述分支节点中包含的所述多个分支均执行完成,能有效的触发大部分的关键逻辑分支被执行将将样本程序输入到客户机中,这样能够在宿主机上实现对样本程序更全面的监控。
图2为本发明又一实施例提供的一种控制程序的流程图,如图2所示,在上述实施例的基础上,当检测到存在分支选择行为时,此时保存该调用的上下文数据,以及内存地址,寄存器状态等,将其保存至一个固定的地址空间中,保存现场的目的是当一个分支执行完之后,从上次保存的状态点之后执行另外的分支,不需要重新执行整个进程。在所述步骤103之前,还包括:
步骤201、当客户机中的样本程序执行到分支节点时,保存当前指令执行现场信息,所述指令执行现场信息包括指针地址、栈地址以及寄存器的当前状态;
所述步骤103,包括:
根据所述分支状态信息以及所述当前指令执行现场信息,执行每个分支并采集执行过程中的行为数据直至所述分支节点中包含的所述多个分支均执行完成。
进一步的,为了保证分支节点不被重复执行,所述步骤103之后,还包括:
202、销毁所述分支状态信息。
本发明实施例提供的一种监控程序的方法,通过在宿主机上判断当前客户机中样本程序是否执行到的分支节点,当客户机中的样本程序执行到分支节点时,获取所述分支节点对应分支状态信息,根据所述分支状态信息,执行每个分支并采集执行过程中的行为数据直至所述分支节点中包含的所述多个分支均执行完成,能有效的触发大部分的关键逻辑分支被执行将将样本程序输入到客户机中。
图3为本发明另一实施例提供的一种监控程序的方法的流程图,如图3所示,在本实施例中以出现api调用为例进行详细说明,具体的,本实施例的方法可以包括:
步骤301、建立样本程序需要监控的分支选择行为的集合。
在本实施例中,所述集合包括第一类api和/或第一类指令。所述第一类api为样本程序中执行分支逻辑时被调用的api。所述第一类指令为样本程序中用于执行分支逻辑的选择指令。
步骤302、获取当前被调用的应用程序接口api以及样本程序的地址空间;
步骤303、判断调用所述api的函数地址是否位于所述样本程序的地址空间内,若是,执行步骤304,若否,结束该流程。
步骤304、判断所述api是否为所述集合中的第一类api,若是,执行步骤305,若否,结束该流程。
步骤305,确定所述客户机中的样本程序执行到分支节点。
步骤306、保存当前指令执行现场信息,所述指令执行现场信息包括指针地址、栈地址以及寄存器的当前状态。
步骤307、根据所述分支状态信息以及所述当前指令执行现场信息,执行每个分支并采集执行过程中的行为数据直至所述分支节点中包含的所述多个分支均执行完成。本实施例中,根据所述分支状态信息以及所述当前指令执行现场信息,执行每个分支并采集执行过程中的行为数据直至所述分支节点中包含的所述多个分支均执行完成的过程,与上述方法实施例的步骤103类似,在此不再赘述。
步骤308、销毁所述分支状态信息。
本发明实施例提供的一种监控程序的方法,通过在宿主机上判断当前客户机中样本程序是否执行到的分支节点,当客户机中的样本程序执行到分支节点时,获取所述分支节点对应分支状态信息,根据所述分支状态信息,执行每个分支并采集执行过程中的行为数据直至所述分支节点中包含的所述多个分支均执行完成,能有效的触发大部分的关键逻辑分支被执行。
图4为本发明一实施例提供的监控程序的装置的结构示意图,如图4所示,本实施例的程序启动装置可以包括判断单元41、获取单元42及执行单元43。其中,所述判断单元41,用于判断当前客户机中样本程序是否执行到的分支节点。
如图5所示,所述判断单元41,可包括获取模块411及第一确定模块412。其中,所述获取模块411,用于获取当前被调用的应用程序接口api以及样本程序的地址空间;所述第一确定模块412,用于当调用所述api的函数地址位于所述样本程序的地址空间内,且所述api为第一类api时,确定所述客户机中的样本程序执行到分支节点,所述第一类api为样本程序中执行分支逻辑时被调用的api。
可选的,如图6所示,所述判断单元41,可包括检测模块413及第二确定模块414。其中,所述检测模块413,用于检测当前运行的应用程序是否为样本程序;所述第二确定模块414,用于在当前运行的应用程序为样本程序,且截获的客户机当前执行的指令为第一类指令时,确定所述客户机中的样本程序执行到分支节点,所述第一类指令为样本程序中用于执行分支逻辑的选择指令。
所述获取单元42,当所述判断单元判断得到客户机中的样本程序执行到分支节点时,用于获取所述分支节点对应分支状态信息,所述分支状态信息包括多个分支对应的跳转条件以及跳转地址;
所述执行单元43,用于根据所述获取单元获取的分支状态信息,执行每个分支并采集执行过程中的行为数据直至所述分支节点中包含的所述多个分支均执行完成。
本实施例的装置,可以用于执行图1所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
本发明实施例提供的一种监控程序的装置,通过在宿主机上判断当前客户机中样本程序是否执行到的分支节点,当客户机中的样本程序执行到分支节点时,获取所述分支节点对应分支状态信息,根据所述分支状态信息,执行每个分支并采集执行过程中的行为数据直至所述分支节点中包含的所述多个分支均执行完成,能有效的触发大部分的关键逻辑分支被执行,这样能够在宿主机上实现对样本程序更全面的监控。
可选的,在一实施例中,如图7所示,所述装置还包括:建立单元71,用于建立样本程序需要监控的分支选择行为的集合,所述集合包括第一类api和/或第一类指令。
可选的,在一实施例中,如图7所示,所述装置还包括:保存单元72,用于当客户机中的样本程序执行到分支节点时,保存当前指令执行现场信息,所述指令执行现场信息包括指针地址、栈地址以及寄存器的当前状态。
所述执行单元43,具体用于根据所述分支状态信息以及所述当前指令执行现场信息,执行每个分支并采集执行过程中的行为数据直至所述分支节点中包含的所述多个分支均执行完成。
可选的,在一实施例中,如图7所示,所述装置还包括:销毁单元73,在执行单元完成分支节点中包含的多个分支后,销毁所述保存单元保存的分支状态信息。
具体的,如图8所示,所述执行单元43,具体包括:跳转模块431,用于根据当前执行指令对应的跳转条件确定执行分支,将执行指针跳转至对应的跳转地址;模拟模块432,用于当所述执行分支执行完毕,根据所述分支状态信息,模拟所述分支节点中除所述执行分支之外的剩余分支对应的跳转条件进行分支执行,直至所述分支节点中包含的所述多个分支均执行完成。
示例性的,在所述第一确定模块412确定所述客户机中的样本程序执行到分支节点的情况下,所述模拟模块432具体用于:
当所述执行分支执行完毕,根据所述分支状态信息,修改所述api的返回值,以触发所述执行分支之外的其它分支执行;其中,修改后的api返回值,不同于作为已执行完毕的分支的执行条件的api返回值;或者,
当所述执行分支执行完毕,根据所述分支状态信息,修改执行环境中不满足的条件,使所述api返回表示条件满足的返回值,以触发所述执行分支之外的其它分支执行。
示例性的,在所述第二确定模块414确定所述客户机中的样本程序执行到分支节点的情况下,所述模拟模块432具体用于:
当所述执行分支执行完毕,根据所述分支状态信息,重定向跳转指针到不同的地址,以触发所述执行分支之外的其它分支执行;其中,重定向后的跳转地址,不同于作为已执行完毕的分支的执行条件的跳转地址。
本实施例的装置,可以用于执行图3所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
本发明实施例提供的一种监控程序的装置,通过在宿主机上判断当前客户机中样本程序是否执行到的分支节点,当客户机中的样本程序执行到分支节点时,获取所述分支节点对应分支状态信息,根据所述分支状态信息,执行每个分支并采集执行过程中的行为数据直至所述分支节点中包含的所述多个分支均执行完成,能有效的触发大部分的关键逻辑分支被执行。
本发明实施例还提供一种电子设备,图9为本发明电子设备一个实施例的结构示意图,可以实现本发明图1-3所示实施例的流程,如图8所示,上述电子设备可以包括:壳体91、处理器92、存储器93、电路板94和电源电路95,其中,电路板94安置在壳体91围成的空间内部,处理器92和存储器93设置在电路板94上;电源电路95,用于为上述电子设备的各个电路或器件供电;存储器93用于存储可执行程序代码;处理器92通过读取存储器93中存储的可执行程序代码来运行与可执行程序代码对应的程序,用于执行前述任一实施例所述的监控程序的方法。
处理器92对上述步骤的具体执行过程以及处理器92通过运行可执行程序代码来进一步执行的步骤,可以参见本发明图1-3所示实施例的描述,在此不再赘述。
该电子设备以多种形式存在,包括但不限于:
(1)移动通信设备:这类设备的特点是具备移动通信功能,并且以提供话音、数据通信为主要目标。这类终端包括:智能手机(例如iphone)、多媒体手机、功能性手机,以及低端手机等。
(2)超移动个人计算机设备:这类设备属于个人计算机的范畴,有计算和处理功能,一般也具备移动上网特性。这类终端包括:pda、mid和umpc设备等,例如ipad。
(3)便携式娱乐设备:这类设备可以显示和播放多媒体内容。该类设备包括:音频、视频播放器(例如ipod),掌上游戏机,电子书,以及智能玩具和便携式车载导航设备。
(4)服务器:提供计算服务的设备,服务器的构成包括处理器、硬盘、内存、系统总线等,服务器和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。
(5)其他具有数据交互功能的电子设备。
本发明的实施例还提供一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现前述的程序启动方法。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。
尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
为了描述的方便,描述以上装置是以功能分为各种单元/模块分别描述。当然,在实施本发明时可以把各单元/模块的功能在同一个或多个软件和/或硬件中实现。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)或随机存储记忆体(randomaccessmemory,ram)等。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。