CN106940772B - 变量对象的跟踪方法及装置 - Google Patents

变量对象的跟踪方法及装置 Download PDF

Info

Publication number
CN106940772B
CN106940772B CN201610005793.5A CN201610005793A CN106940772B CN 106940772 B CN106940772 B CN 106940772B CN 201610005793 A CN201610005793 A CN 201610005793A CN 106940772 B CN106940772 B CN 106940772B
Authority
CN
China
Prior art keywords
statement
variable
variable object
class
statements
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201610005793.5A
Other languages
English (en)
Other versions
CN106940772A (zh
Inventor
陈晋福
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201610005793.5A priority Critical patent/CN106940772B/zh
Publication of CN106940772A publication Critical patent/CN106940772A/zh
Application granted granted Critical
Publication of CN106940772B publication Critical patent/CN106940772B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Virology (AREA)
  • Health & Medical Sciences (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Health & Medical Sciences (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本申请公开了一种变量对象的跟踪方法及装置。其中,该方法包括:在基于被检测程序的控制流图进行漏洞查找时,查找到变量对象的第一操作语句,其中,第一操作语句用于指示对变量对象进行赋值操作和取值操作;从预先收集的变量信息集合中,获取变量对象的语句集合,其中,语句集合中包括多个第二操作语句,其中,第二操作语句指示的对变量对象执行的操作与第一操作语句指示的对变量对象执行的操作相反;根据控制流图,确定多个第二操作语句中与第一操作语句存在函数调用关系的第三操作语句;将确定的第三操作语句所在的语句位置作为起点,跟踪变量对象。本申请解决了在漏洞扫描的过程中无法跟踪变量对象造成漏洞漏报的技术问题。

Description

变量对象的跟踪方法及装置
技术领域
本申请涉及数据处理领域,具体而言,涉及一种变量对象的跟踪方法及装置。
背景技术
现有技术在进行Android Package(Android安装包,APK)漏洞静态扫描中,通常会把一个待检测程序的APK反编译成某种中间语言,然后通过对该中间语言解析进行漏洞扫描来实现静态扫描,其中,在对该中间语言进行解析的过程中,较为常见的一种场景为对某个寄存器在程序中的流经路径进行跟踪。如果该寄存器的值来源于局部变量对象则较为好跟踪,但如果一个寄存器的值在流经的路径中经过了类成员变量对象或者静态变量对象则很难被跟踪。因为该类型的变量对象可能在APK中的任意一个位置(某个类的某个方法里)被赋值,并可以在另一个位置取值,因此很难找到赋值和取值之间的对应关系,从而很难实现在寄存器跟踪过程中对类变量对象或静态变量对象的跟踪。现有技术中还有一种在跟踪寄存器流动的过程中发现静态变量或者类变量则停止跟踪,而一个漏洞引起的关键点经过了类变量或者静态变量对象的传递,则无法找到该漏洞,其也存在不能查找全部漏洞、出现漏洞漏报的缺陷。
针对上述的在漏洞扫描的过程中无法跟踪变量对象造成漏洞漏报的问题,目前尚未提出有效的解决方案。
发明内容
本申请实施例提供了一种变量对象的跟踪方法及装置,以至少解决在漏洞扫描的过程中无法跟踪变量对象造成漏洞漏报的技术问题。
根据本申请实施例的一个方面,提供了一种变量对象的跟踪方法,该方法包括:在基于被检测程序的控制流图进行漏洞查找时,查找到变量对象的第一操作语句,其中,第一操作语句用于指示对变量对象进行赋值操作和取值操作;从预先收集的变量信息集合中,获取变量对象的语句集合,其中,语句集合中包括多个第二操作语句,其中,第二操作语句指示的对变量对象执行的操作与第一操作语句指示的对变量对象执行的操作相反;根据控制流图,确定多个第二操作语句中与第一操作语句存在函数调用关系的第三操作语句;将确定的第三操作语句所在的语句位置作为起点,跟踪变量对象。
根据本申请实施例的另一方面,还提供了一种变量对象的跟踪装置,该装置包括:查找单元,用于在基于被检测程序的控制流图进行漏洞查找时,查找到变量对象的第一操作语句,其中,第一操作语句用于指示对变量对象进行赋值操作和取值操作;获取单元,用于从预先收集的变量信息集合中,获取变量对象的语句集合,其中,语句集合中包括多个第二操作语句,其中,第二操作语句指示的对变量对象执行的操作与第一操作语句指示的对变量对象执行的操作相反;确定单元,用于根据控制流图,确定多个第二操作语句中与第一操作语句存在函数调用关系的第三操作语句;跟踪单元,用于将确定的第三操作语句所在的语句位置作为起点,跟踪变量对象。
在本申请实施例中,在基于被检测程序的控制流图进行漏洞查找时,在查找到变量对象的第一操作语句之后,从预先收集的变量信息集合中,获取该变量对象的语句集合,并根据该控制流图,确定该语句集合中的多个第二操作语句中与该第一操作语句存在函数调用关系的第三操作语句;将确定的第三操作语句作为起点,跟踪该变量对象。在上述实施例中,在检测到待检测程序的变量对象的第一操作语句时,从语句集合中获取该变量对象的第二操作语句,检测第二操作语句中是否存在与第一操作语句有函数调用关系,若存在函数调用关系,则确定出该第二操作语句为上述的第三操作语句,将该第三操作语句所在的语句位置作为起点,跟踪变量对象,以检测变量对象对应的漏洞。通过上述实施例,可以全面准确地查找出漏洞,解决了在漏洞扫描的过程中无法跟踪变量对象造成漏洞漏报的问题,实现了准确地跟踪变量对象,漏洞全部得以准确上报,提高了对漏洞扫描的扫描精度。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是本申请实施例的一种变量对象的跟踪方法的计算机终端的网络环境图;
图2是根据本申请实施例的一种变量对象的跟踪方法的流程图;
图3是根据本申请实施例的一种可选的变量对象的跟踪方法的流程图;
图4是根据本申请实施例的另一种可选的变量对象的跟踪方法的流程图;
图5是根据本申请实施例的一种变量对象的跟踪装置的示意图;
图6是根据本申请实施例的第二种变量对象的跟踪装置的示意图;
图7是根据本申请实施例的第三种变量对象的跟踪装置的示意图;
图8是根据本申请实施例的第四种变量对象的跟踪装置的示意图;
图9是根据本申请实施例的第五种变量对象的跟踪装置的示意图;以及
图10是本申请实施例的一种变量对象的跟踪方法的计算机终端的硬件结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
首先,在对本申请实施例进行描述的过程中出现的部分名词或术语适用于如下解释:
漏洞扫描系统:是查毒软件等用于查找程序漏洞的应用程序。
赋值语句:是用于为变量对象赋值的语句,例如:“int()=12form”。
取值语句:是用于获取变量对象的属性值的语句,例如:“For{i=0,i++,i小于等于50}mov”,赋值和取值是相反的操作。
变量位置信息:是用于记录各个对变量对象执行操作的操作语句的位置信息的信息集合,通过该位置信息确定操作语句的位置。
控制流图:其英文全称为Control Flower Graph,缩写为CFG,是描述待检测的程序(如APP)中所有函数调用和跳转语句(如,if,switch,goto等语句)的关系的示意图。
安装包程序APK:英文全称为Android Package,英文缩写为APK,或称安装软件,是电脑软件的一种,用以协助使用者安装其他软件或驱动程序。
反编译:是确定机软件反向工程(Reverse engineering),也称为确定机软件还原工程,是指通过对他人软件的目标程序(可执行程序)进行“逆向分析、研究”工作,以推导出他人的软件产品所使用的思路、原理、结构、算法、处理过程、运行方法等设计要素,某些特定情况下可能推导出源代码。反编译作为自己开发软件时的参考,或者直接用于自己的软件产品中。
中间语言:是用VB.NET或者C#编写的软件,在软件运行时,通过编译器将该中间语言代码编译成的机器语言。
实施例1
根据本申请实施例,还提供了一种变量对象的跟踪方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本申请实施例一所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在计算机终端上为例,图1是本申请实施例的一种变量对象的跟踪方法的计算机终端的网络环境图。如图1所示,计算机终端10可以包括一个或多个(图中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器104、以及用于通信功能的传输模块106。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器104可用于存储应用软件的软件程序以及模块,如本发明实施例中的变量对象的跟踪方法对应的程序指令/模块,处理器102通过运行存储在存储器104内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的变量对象的跟踪方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
在上述运行环境下,本申请提供了如图2所示的变量跟踪方法。图2是根据本申请实施例的一种变量对象的跟踪方法的流程图。如图2所示,该方法可以包括如下步骤:
步骤S202:在基于被检测程序的控制流图进行漏洞查找时,查找到变量对象的第一操作语句,其中,第一操作语句用于指示对变量对象进行赋值操作和取值操作。
步骤S204:从预先收集的变量信息集合中,获取变量对象的语句集合,其中,语句集合中包括多个第二操作语句,其中,第二操作语句指示的对变量对象执行的操作与第一操作语句指示的对变量对象执行的操作相反。
步骤S206:根据控制流图,确定多个第二操作语句中与第一操作语句存在函数调用关系的第三操作语句。
步骤S208:将确定的第三操作语句所在的语句位置作为起点,跟踪变量对象。
采用上述实施例,在基于被检测程序的控制流图进行漏洞查找时,在查找到变量对象的第一操作语句之后,从预先收集的变量信息集合中,获取该变量对象的语句集合,并根据该控制流图,确定该语句集合中的多个第二操作语句中与该第一操作语句存在函数调用关系的第三操作语句;将确定的第三操作语句作为起点,跟踪该变量对象。在上述实施例中,在检测到待检测程序的变量对象的第一操作语句时,从语句集合中获取该变量对象的第二操作语句,检测第二操作语句中是否存在与第一操作语句有函数调用关系,若存在函数调用关系,则确定出该第二操作语句为上述的第三操作语句,将该第三操作语句所在的语句位置作为起点,跟踪变量对象,以检测变量对应的漏洞。通过上述实施例,可以全面准确地查找出漏洞,解决了在漏洞扫描的过程中无法跟踪变量对象造成漏洞漏报的问题,实现了准确地跟踪变量对象,漏洞全部得以准确上报,提高了对漏洞扫描的扫描精度。
在上述实施例中,可以通过安装在终端上的漏洞扫描系统查找变量对象的第一操作语句,漏洞扫描系统可以为查毒软件等用于查找漏洞的应用程序,该第一操作语句包括赋值语句和取值语句,赋值语句用于为变量对象赋值,例如,“int()=12form”,取值语句用于获取变量对象的属性值,例如,“For{i=0,i++,i小于等于50}mov”,赋值和取值是相反的过程,第一操作语句与变量对象有着对应的关系。本申请实施例中的变量也即变量对象。
可以通过漏洞扫描系统从待检测程序的控制流图中收集待检测程序的变量信息集合,该变量位置信息中记录了各个对变量对象执行操作的操作语句的位置信息,通过该位置信息确定操作语句的位置。其中,控制流图中可以用于描述待检测的程序(如APP)中所有函数调用和跳转语句(如,if、switch、goto等语句)的关系。
上述实施例中的赋值操作与取值操作为相反的操作,其中,在第一操作语句所指示的对变量对象执行的操作为赋值操作的情况下,第二操作语句指示的对变量对象执行的操作为取值操作;在第一操作语句所指示的对变量对象执行的操作为取值操作的情况下,第二操作语句指示的对变量对象执行的操作为赋值操作。
在上述实施例中,在检测到待检测程序中的第一操作语句之后,从变量信息集合中读取与该第一操作语句对应的第二操作语句,生成语句集合。可选地,该第一操作语句指示的操作与第二操作语句指示的操作相反,如,第一操作语句为赋值语句,则从变量信息集合中读取取值语句,若第一操作语句为取值语句,则从变量信息集合中读取赋值语句。
该漏洞扫描系统可以通过控制流图(Control Flower Graph,CFG)中的数据结构链来确定与第一操作语句存在函数调用关系的操作语句,获取到的与第一操作语句存在函数调用关系的第三操作语句可以为第二操作语句的部分或者全部语句。
可以将该确定的第三操作语句所在的语句位置作为起始语句,即以该第三操作语句为起点来继续跟踪变量对象。
通过上述实施例,漏洞扫描系统基于控制流图找出与变量对象的第一操作语句存在函数调用关系的操作语句,并以该找到的操作语句(即上述实施例中的第三操作语句)进行变量对象的有效跟踪,并可以根据该跟踪变量对象来实现对漏洞的准确查找,大大降低了漏洞扫描系统扫描漏洞的漏报率。
在本申请的上述实施例中,图3是根据本申请实施例的一种可选的变量对象的跟踪方法的流程图,如图3所示,确定多个第二操作语句中与第一操作语句存在函数调用关系的第三操作语句包括如下步骤:
步骤S21:根据控制流图中记录的函数调用关系,确定第一操作语句与每个第二操作语句之间是否存在可达路径。
步骤S22:若当前确定的第二操作语句与第一操作语句之间存在可达路径,则将当前确定的第二操作语句确定为第三操作语句。
在上述实施例中,漏洞扫描系统可以根据控制流图中记录的函数调用关系,确定第一操作语句与每个第二操作语句之间是否存在可达路径,若当前确定的第二操作语句与第一操作语句之间存在可达路径,即当前确定的第二操作语句与第一操作语句有调用和被调用的函数关系,将确定出与第一操作语句之间存在可达路径的第二操作语句确定为第三操作语句,通过上述实施例中的判断方式,保证了第三操作语句的判别的准确度。
具体地,可以通过控制流图确定赋值语句和取值语句之间是否有可达路径,即查找是否存在从赋值语句到取值语句之间的函数调用关系,其中,当第一操作语句为赋值语句,则第二操作语句为第一操作语句的操作相反的取值语句,当第一操作语句为取值语句,则第二操作语句可以为第一操作语句的操作相反的赋值语句,通过对第三操作语句的准确判断,可以为后续的变量对象跟踪提供准确的起点,从而保证了对变量对象的准确跟踪和漏洞的全部查找。
上述的步骤S22确定第一操作语句与语句集合中每个第二操作语句之间是否存在可达路径的操作可以包括如下步骤:
步骤S221,将语句集合中的语句位置在类初始化块中的第二操作语句划分至第一集合,并将语句集合中其余的第二操作语句划分至第二集合。
步骤S223,确定第一操作语句与第二集合中每个第二操作语句之间是否存在可达路径。
步骤S225,若第二集合中的每条第二操作语句与第一操作语句不存在可达路径,确定第一操作语句与第一集合中每个第二操作语句之间是否存在可达路径。
上述实施例可以通过将语句集合按照语句所在的位置划分成第一集合和第二集合,该第一集合中的操作语句为位于类初始化块中的第二操作语句,而第二集合为语句集合中非第一操作语句的语句集合,依次判断第二集合中的第二操作语句与第一操作语句之间是否存在可达路径,若判断结果为第一操作语句与第一集合中每个第二操作语句之间不存在可达路径,再判断第一操作语句与第一集合中的每个第二操作语句是否存在可达路径。
具体地,当第一操作语句为取值语句时,此时第二操作语句为赋值语句,该赋值语句存在语句集合中,在遇到静态变量或类变量对象的取值命令时,可以通过变量信息集合A查找该变量对象对应的用于赋值的语句集合后,需要将该语句集合分为两个部分,即赋值语句(相当于第二操作语句)位置在类初始化块(静态块和构造函数)中的和不在初始化块中的部分,但在通过变量信息集合A查找取值信息时不用做划分。
通过上述实施例,将第二操作语句的语句集合按第二操作语句的语句位置进行分类,先判断在非类初始化块中的第二操作语句中是否有第三操作语句,若没有,则从类初始化块中的第二操作语句中获取第三操作语句,如果非类初始化块和类初始化块中的第二操作语句中均不存在第三操作语句,则可以确定该变量对象的操作语句不会为该待检测程序带来程序漏洞,若非类初始化块和类初始化块中的第二操作语句中存在第三操作语句,则将该第三操作语句所在的语句位置作为该跟踪变量对象的起点,以获取该变量对象为该待检测程序带来的程序漏洞。
上述的在非类初始化块中的第二操作语句属于第一集合,在类初始化块中的第二操作语句属于第二集合。
通过上述实施例可以提高第二操作语句的判断速度,进而从整体上提高了判断第二操作语言与第一操作语言是否有可达路径的判断效率。
具体地,上述实施例中的语句集合中的语句位置为类初始化块中的第二操作语句,该类初始化块用于变量对象的初始化,即在一个类中,用来对实例变量对象作初始化得到语句块,其在每一次构造对象时被执行且比构造器先执行,对实例变量对象做初始化有三种方式,通过构造器实现初始化,或者在定义变量对象时就给它赋值,实现初始化,或者在类中,通过初始化块实现初始化。在上述实施例中,先将语句集合中语句位置在类初始化块中的第二操作语句划分至第一集合,则该第一集合可以包括有类构造函数或静态初始化static块中的赋值语句,第二集合则包括除了上述第一集合中的赋值语句之外的其他赋值语句,确定第一操作语句与第二集合中的非类构造函数或静态初始化static块中的赋值语句的其他赋值语句之间是否存在可达路径,若不存在可达路径,则确定第一操作语句的取值语句与第一集合中的类构造函数或静态初始化static块中的赋值语句之间是否存在可达路径,以实现对第二操作语言与第一操作语言之间查找可达路径的效率提高。
在上述实施例中的步骤S202获取变量对象的语句集合之前,该方法还包括如下步骤:
步骤S2021,对被检测程序进行反编译处理,得到中间语言。
步骤S2022,基于中间语言的函数调用关系和跳转语句关系生成控制流图。
步骤S2023,收集中间语言中的变量信息,生成变量信息集合,其中,变量信息至少用于唯一标识对应的变量对象在被检测程序中的位置。
通过上述实施例,可以先对被检测程序进行反编译处理,生成中间语言,遍历该中间语言的函数调用关系和跳转语句关系生成控制流图,并收集中间语言中的用于唯一标识对应的变量对象在被检测程序中的位置的变量信息,其中可以包括类变量对象和静态变量对象出现的变量对象位置等信息,基于该变量信息生成变量信息集合,再从该变量集合中获取变量对象的语句集合,从而实现快速生成控制流程图和获取变量集合的效果。
在一个可选的实施例中,上述实施例中的步骤S2023中收集中间语言中的变量信息的操作可以包括如下步骤:收集中间语言中变量对象的下述至少之一:语句操作信息、变量类型、类名称、类中方法的名称、类中方法的参数、类中方法的返回值以及变量对象在类中方法的偏移量;保存语句操作信息、变量类型、类名称、类中方法的名称、类中方法的参数、类中方法的返回值以及变量对象在类中方法的偏移量中的至少之二的对应关系,生成变量信息。其中,上述的语句操作信息可以包括:赋值操作和取值操作,变量类型包括:类变量和静态变量。
具体地,在上述步骤2023中收集中间语言中的变量信息时,该中间语言中的变量信息可以包括集静态变量和类变量信息,此时,该变量信息必须能够唯一定位该变量对象。例如,该变量信息可以包括:语句操作信息(取值/赋值)+变量类型(类变量/静态变量)+类名称+类中方法的名称+类中方法的参数+类中方法的返回值+变量对象在类中方法中的偏移量,可以设这个保存信息的集合(即变量信息集合)为集合A。
上述的实施例可以通过图4所示的实施例实现。图4是根据本申请实施例的另一种可选的变量对象的跟踪方法的流程图,如图4所示,对Android安装包程序(APK)进行漏洞静态扫描时,并且第一操作语言为取值语言,第二操作语言为赋值语言时,可以通过如下步骤实现:
步骤S401:反编译处理安装包程序APK,生成中间语言。
具体地,安装包程序APK(或称安装软件)是电脑软件的一种,用以协助使用者安装其他软件或驱动程序。而反编译是确定机软件反向工程(Reverse engineering),也称为确定机软件还原工程,是指通过对他人软件的目标程序(可执行程序)进行“逆向分析、研究”工作,以推导出他人的软件产品所使用的思路、原理、结构、算法、处理过程、运行方法等设计要素,某些特定情况下可能推导出源代码。反编译作为自己开发软件时的参考,或者直接用于自己的软件产品中。安装包程序是由中间语言生成的,该安装包程序经过反编译之后,则会得到中间语言。这是漏洞扫描最初的一步,该步骤也为后续漏洞扫描的顺利进行提供了良好的基础和开端。
步骤S402:遍历该中间语言。
具体地,漏洞扫描系统可以遍历该中间语言的函数调用关系和跳转语句关系,中间语言是用VB.NET或者C#编写的软件,只有在软件运行时,一个运行时编译器才将该中间语言代码编译成机器语言。
步骤S403:收集类变量和静态变量出现的位置,将其设为变量信息集合A。
具体地,变量和静态变量即为上述的中间语言中的变量信息,可以通过收集中间语言中的变量信息,该变量信息用于唯一标识对应的变量对象在被检测程序中的位置,也即一个变量信息与对应的变量对象存在一一对应的关系,该变量信息记录的是对应变量对象的位置信息,且该变量对象仅有一个位置信息,且该位置信息就存在变量信息中,收集该变量信息来生成变量信息集合A,则该变量信息集合A用于表示中间语言中的各个变量对象的位置信息,以实现对中间语言中的变量信息的汇总,为以后跟踪变量对象作充分的物质准备。
步骤S404:生成控制流图。
具体地,漏洞扫描系统可以通过遍历该中间语言的函数调用关系和跳转语句关系,以生成控制流图,其中,函数调用关系和跳转语句关系可以清楚的表达操作语句是如何执行各个操作的,以及中间是否有语句之间的跳转,通过函数调用语句关系和跳转语句关系可以得到控制流图,该控制流图可以清晰绘制出函数是如何被调用,各个被调用的函数之间的关系,和各个函数被调用的时间顺序等等信息。
步骤S405:遍历中间语言,基于被检测程序的控制流图查找漏洞。
具体地,可以遍历中间语言,从该中间语言中查找漏洞,查找时基于被检测程序,也即安装包的控制流图来查找,由于该控制流图记录有该安装包经过反编译得到的中间语言的函数调用关系和语句跳转关系,漏洞扫描系统可以通过这两种关系来定位查找程序的漏洞。
步骤S406:跟踪寄存器变量对象。
具体地,可以根据控制流图,确定多个第二操作语句中与第一操作语句存在函数调用关系的第三操作语句,并将确定的第三操作语句作为起点,跟踪变量对象,以监测该变量对象是否存在某些漏洞。
步骤S407:判断是否遇到静态变量或类变量对象的取值语句。
具体地,若存在有静态变量或类变量对象的取值语句,则继续执行步骤S408,否则,判断出没有静态变量或类变量对象的取值语句,则返回执行步骤S406。
步骤S408:查找变量信息集合A,找出其所有的赋值语句。
具体地,从预先收集的变量信息集合中,获取变量对象的语句集合,其中,语句集合中包括多个第二操作语句,其中,第二操作语句指示的操作与第一操作语句指示的操作相反,将语句集合中语句位置在类初始化块中的第二操作语句划分至第一集合,并将语句集合中其余的第二操作语句划分至第二集合,在该步骤中,静态变量或者类变量即为类初始化块,取值语句对应为第一操作语句,即在第一集合中判断是否有取值语句,若存在静态变量对象的取值语句,查找变量信息中的各个变量对象的位置,找出该静态变量对象的取值语句对应的所有赋值语句;若存在静态变量对象的赋值语句,则查找变量信息中的各个变量对象的位置信息,找出该静态变量对象的赋值语句对应的所有取值语句。
步骤S409:将在类构造函数或静态变量static块中的赋值语句与其他赋值语句分开,设构造函数中的赋值语句为x,其他的为y。
具体地,上述步骤中的类构造函数或静态变量static块即为上述实施例中的类初始化块,赋值语句对应于上述实施例中的语句集合中的第二操作语句,其中,语句集合的语句位置在类初始化块中的第二操作语句划分至第一集合,可以将该第一集合设为赋值语句x,并将语句集合中其余的第二操作语句划分至第二集合,可以将该第二集合设为y。
步骤S410:根据控制流图,确定取值语句与每个y中的赋值语句之间是否有可达路径。
具体地,若确定取值语句与每个y中的赋值语句之间有可达路径,即确定第一操作语句与第二集合中的第二操作语句之间存在可达路径,则执行步骤S411;否则,若确定取值语句与每个y中的赋值语句之间没有可达路径,即确定第一操作语句与第二集合中的第二操作语句之间不存在可达路径,则执行步骤S412。
步骤S411:若找到可达路径,以赋值语句为起始语句,继续跟踪寄存器的值。
具体地,可以将第二操作语句中与第一语句存在可达路径的语句确定为第三操作语句,可以以赋值语句为起点,继续跟踪变量对象。
步骤S412:若未找到可达路径,则以在集合x中的赋值语句为起始语句,继续跟踪寄存器的值。
具体地,若确定取值语句与每个y中的赋值语句之间没有可达路径,即确定第一操作语句与第二集合中的第二操作语句之间不存在可达路径,则以集合x(即第一集合中的第二操作语句)为起点,继续跟踪变量对象。
通过上述实施例,可以在进行漏洞扫描之前,收集待检测程序中变量对象的位置信息,在确定扫描出的对变量对象进行操作的第一操作语句之后,获取与第一操作语句执行相反操作的控制流图的第二操作语句,通过控制流图定位第一操作语句与第二操作语句之间是否存在调用关系,并基于定位结果进行漏洞扫描,从而不会漏掉基于变量对象产生的漏洞。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该确定机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,确定机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
实施例2
根据本申请实施例,还提供了一种用于实施上述变量对象的跟踪方法的变量对象的跟踪装置,图5是根据本申请实施例的一种变量对象的跟踪装置的示意图,如图5所示,该装置包括:
查找单元51,用于在基于被检测程序的控制流图进行漏洞查找时,查找到变量对象的第一操作语句,其中,第一操作语句用于指示对变量对象进行赋值操作和取值操作。
获取单元52,用于从预先收集的变量信息集合中,获取变量对象的语句集合,其中,语句集合中包括多个第二操作语句,其中,第二操作语句指示对变量对象执行的操作与第一操作语句指示的对变量对象执行的操作相反。
确定单元53,用于根据控制流图,确定多个第二操作语句中与第一操作语句存在函数调用关系的第三操作语句。
跟踪单元54,用于将确定的第三操作语句作为起点,跟踪变量对象。
采用上述实施例,在本申请实施例中,在基于被检测程序的控制流图进行漏洞查找时,在查找到变量对象的第一操作语句之后,从预先收集的变量信息集合中,获取该变量对象的语句集合,并根据该控制流图,确定该语句集合中的多个第二操作语句中与该第一操作语句存在函数调用关系的第三操作语句;将确定的第三操作语句作为起点,跟踪该变量对象。在上述实施例中,在查找到变量对象的第一操作语句和获取到语句集合中的第二操作语句后,通过确定该第一操作语句与第二操作语句之间存在调用关系的第三操作语句,来基于该第三操作语句来进行变量对象的跟踪,使得对第一操作语句可以准确解析,基于准确的第一操作语句,漏洞可以全面准确地查找出,解决了在漏洞扫描的过程中无法跟踪变量对象造成漏洞漏报的问题,实现了准确地跟踪变量对象,漏洞全部得以准确上报,提高了对漏洞扫描的扫描精度。
在上述实施例中,漏洞扫描系统可以根据控制流图中记录的函数调用关系,确定第一操作语句与每个第二操作语句之间是否存在可达路径,若当前确定的第二操作语句与第一操作语句之间存在可达路径,即当前确定的第二操作语句与第一操作语句有调用和被调用的函数关系,可以通过该可达路径实现第一操作语句和第二操作语句之间的相互调用,则将当前确定的第二操作语句确定为第三操作语句,通过上述实施例中的判断方式,保证了第三操作语句的判别的准确度。
上述实施例中的赋值操作与取值操作为相反的操作,其中,在第一操作语句所指示的对变量对象执行的操作为赋值操作的情况下,第二操作语句指示的对变量对象执行的操作为取值操作;在第一操作语句所指示的对变量对象执行的操作为取值操作的情况下,第二操作语句指示的对变量对象执行的操作为赋值操作。
可选地,图6是根据本申请实施例的第二种变量对象的跟踪装置的示意图,如图6所示,该确定单元53包括:第一确定模块532和第二确定模块534。
其中,第一确定模块532,用于根据控制流图中记录的函数调用关系,确定第一操作语句与每个第二操作语句之间是否存在可达路径;第二确定模块534,用于若当前确定的第二操作语句与第一操作语句之间存在可达路径,则将当前确定的第二操作语句确定为第三操作语句。
上述实施例可以通过将语句集合按照位置划分成第一集合和第二集合,该第一集合中的操作语句为位于类初始化块中的第二操作语句,而第二集合为语句集合中非第一操作语句的语句集合,依次判断第二集合中的第二操作语句与第一操作语句之间是否存在可达路径,若判断结果为第一操作语句与第一集合中每个第二操作语句之间不存在可达路径,再判断第一操作语句与第一集合中的每个第二操作语句是否存在可达路径。
可选地,图7是根据本申请实施例的第三种变量对象的跟踪装置的示意图,如图7所示,第一确定模块532包括:划分子模块5321、第一确定子模块5322以及第二确定子模块5323。
其中,划分子模块5321,用于将语句集合中语句位置在类初始化块中的第二操作语句划分至第一集合,并将语句集合中其余的第二操作语句划分至第二集合。
第一确定子模块5322,用于确定第一操作语句与第二集合中每个第二操作语句之间是否存在可达路径。
第二确定子模块5323,用于若第二集合中的每条第二操作语句与第一操作语句不存在可达路径,确定第一操作语句与第一集合中每个第二操作语句之间是否存在可达路径。
通过上述实施例,将第二操作语句的语句集合按第二操作语句的类别进行分类,再分别对分类后的第二操作语句与第一操作语句进行可达路径的判断,通过分类可以提高同一类别第二操作语言的判断速度,进而提高了整体的第二操作语言与第一操作语言判断是否有可达路径的判断效率。
可选地,图8是根据本申请实施例的第四种变量对象的跟踪装置的示意图,如图8所示,该装置还包括:反编译单元55、生成单元56以及处理单元57。
其中,反编译单元55,用于在获取变量对象的语句集合之前,对被检测程序进行反编译处理,得到中间语言。
生成单元56,用于基于中间语言的函数调用关系和跳转语句关系生成控制流图。
处理单元57,用于收集中间语言中的变量信息,生成变量信息集合,其中,变量信息至少用于唯一标识对应的变量对象在被检测程序中的位置。
通过上述实施例,可以先对被检测程序进行反编译处理,生成中间语言,遍历该中间语言的函数调用关系和跳转语句关系生成控制流图,并收集中间语言中的用于唯一标识对应的变量对象在被检测程序中的位置的变量信息,其中可以包括类变量和静态变量出现的变量位置等信息,基于该变量信息生成变量信息集合,再从该变量集合中获取变量对象的语句集合,从而实现快速生成控制流程图和获取变量集合的效果。
可选地,图9是根据本申请实施例的第五种变量对象的跟踪装置的示意图,如图9所示,处理单元57包括:收集模块571和保存模块572。
其中,收集模块571,用于收集中间语言中变量对象的下述至少之一:语句操作信息、变量类型、类名称、类中装置的名称、类中装置的参数、类中装置的返回值以及变量对象在类中装置的偏移量。
保存模块572,用于保存语句操作信息、变量类型、类名称、类中装置的名称、类中装置的参数、类中装置的返回值以及变量对象在类中装置的偏移量中的至少之二的对应关系,生成变量信息。
可选地,语句操作信息包括:赋值操作和取值操作,变量类型包括:类变量和静态变量。
具体地,在收集中间语言中的变量信息时,该中间语言中的变量信息可以包括集静态变量和类变量信息,此时,该变量信息必须能够唯一定位该变量对象。例如,该变量信息可以包括:语句操作信息(取值/赋值)+变量类型(类变量/静态变量)+类名称+类中方法的名称+类中方法的参数+类中方法的返回值+变量在类中方法中的偏移量,可以设这个保存信息的集合(即变量信息集合)为集合A。
实施例3
本申请的实施例可以提供一种计算机终端,该计算机终端可以是计算机终端群中的任意一个计算机终端设备。可选地,在本实施例中,上述计算机终端也可以替换为移动终端等终端设备。
可选地,在本实施例中,上述计算机终端可以位于计算机网络的多个网络设备中的至少一个网络设备。
本申请实施例一所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在计算机终端上为例,图10是本申请实施例的一种变量对象的跟踪方法的计算机终端的硬件结构框图。如图10所示,计算机终端10可以包括一个或多个(图中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器104、以及用于通信功能的传输模块106。本领域普通技术人员可以理解,图10所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端10还可包括比图10中所示更多或者更少的组件,或者具有与图10所示不同的配置。
存储器104可用于存储应用软件的软件程序以及模块,如本申请实施例中的变量对象的跟踪方法对应的程序指令/模块,处理器102通过运行存储在存储器104内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的变量对象的跟踪方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
在本实施例中,上述计算机终端可以执行变量对象的跟踪方法中以下步骤的程序代码:在基于被检测程序的控制流图进行漏洞查找时,查找到变量对象的第一操作语句,其中,第一操作语句包括:赋值语句和取值语句;从预先收集的变量信息集合中,获取变量对象的语句集合,其中,语句集合中包括多个第二操作语句,其中,第二操作语句指示的操作与第一操作语句指示的操作相反;根据控制流图,确定多个第二操作语句中与第一操作语句存在函数调用关系的第三操作语句;将确定的第三操作语句作为起点,跟踪变量对象。
本申请实施例提供的变量对象跟踪的方案,在查找到变量对象的第一操作语句和获取到语句集合中的第二操作语句后,通过确定该第一操作语句与第二操作语句之间存在调用关系的第三操作语句,来基于该第三操作语句来进行变量对象的跟踪,使得对第一操作语句可以准确解析,基于准确的第一操作语句,漏洞可以全面准确地查找出,解决了在漏洞扫描的过程中无法跟踪变量对象造成漏洞漏报的问题,实现了准确地跟踪变量对象,漏洞全部得以准确上报,提高了对漏洞扫描的扫描精度。
可选地,上述计算机终端可以执行变量对象的跟踪方法中以下步骤:根据该控制流图中记录的函数调用关系,确定该第一操作语句与每个第二操作语句之间是否存在可达路径;若当前确定的第二操作语句与该第一操作语句之间存在可达路径,则将该当前确定的第二操作语句确定为该第三操作语句。
在上述实施例中,漏洞扫描系统可以根据控制流图中记录的函数调用关系,确定第一操作语句与每个第二操作语句之间是否存在可达路径,若当前确定的第二操作语句与第一操作语句之间存在可达路径,即当前确定的第二操作语句与第一操作语句有调用和被调用的函数关系,将确定出与第一操作语句之间存在可达路径的第二操作语句确定为第三操作语句,通过上述实施例中的判断方式,保证了第三操作语句的判别的准确度。
可选地,上述计算机终端可以执行变量对象的跟踪方法中以下步骤:将该语句集合中语句位置在类初始化块中的第二操作语句划分至第一集合,并将该语句集合中其余的第二操作语句划分至第二集合;确定该第一操作语句与该第二集合中每个第二操作语句之间是否存在可达路径;若该第二集合中的每条第二操作语句与该第一操作语句不存在该可达路径,确定该第一操作语句与该第一集合中每个第二操作语句之间是否存在可达路径。
上述实施例可以通过将语句集合按照语句所在的位置划分成第一集合和第二集合,该第一集合中的操作语句为位于类初始化块中的第二操作语句,而第二集合为语句集合中非第一操作语句的语句集合,依次判断第二集合中的第二操作语句与第一操作语句之间是否存在可达路径,若判断结果为第一操作语句与第一集合中每个第二操作语句之间不存在可达路径,再判断第一操作语句与第一集合中的每个第二操作语句是否存在可达路径。
通过上述实施例,将第二操作语句的语句集合按第二操作语句的语句位置进行分类,先判断在非类初始化块中的第二操作语句中是否有第三操作语句,若没有,则从类初始化块中的第二操作语句中获取第三操作语句,如果非类初始化块和类初始化块中的第二操作语句中均不存在第三操作语句,则可以确定该变量对象的操作语句不会为该待检测程序带来程序漏洞,若非类初始化块和类初始化块中的第二操作语句中存在第三操作语句,则将该第三操作语句所在的语句位置作为该跟踪变量对象的起点,以获取该变量对象为该待检测程序带来的程序漏洞。
可选地,上述计算机终端可以执行变量对象的跟踪方法中以下步骤:在获取该变量对象的语句集合之前,对该被检测程序进行反编译处理,得到中间语言;基于该中间语言的函数调用关系和跳转语句关系生成该控制流图;以及收集该中间语言中的变量信息,生成该变量信息集合,其中,该变量信息用于唯一标识对应的变量对象在该被检测程序中的位置。
通过上述实施例,可以先对被检测程序进行反编译处理,生成中间语言,遍历该中间语言的函数调用关系和跳转语句关系生成控制流图,并收集中间语言中的用于唯一标识对应的变量对象在被检测程序中的位置的变量信息,其中可以包括类变量和静态变量出现的变量位置等信息,基于该变量信息生成变量信息集合,再从该变量集合中获取变量对象的语句集合,从而实现快速生成控制流程图和获取变量集合的效果。
可选地,上述计算机终端可以执行变量对象的跟踪方法中以下步骤:收集该中间语言中的变量信息包括:收集该中间语言中变量对象的下述至少之一:语句操作信息、变量类型、类名称、类中方法的名称、该类中方法的参数、该类中方法的返回值以及该变量对象在该类中方法的偏移量;保存该语句操作信息、变量类型、类名称、类中方法的名称、该类中方法的参数、该类中方法的返回值以及该变量对象在该类中方法的偏移量中的至少之二的对应关系,生成该变量信息。
可选地,上述计算机终端可以执行变量对象的跟踪方法中以下步骤的程序代码:该语句操作信息包括:赋值操作和取值操作、该变量类型包括:类变量和静态变量。
具体地,在收集中间语言中的变量信息时,该中间语言中的变量信息可以包括集静态变量和类变量信息,此时,该变量信息必须能够唯一定位该变量对象。例如,该变量信息可以包括:语句操作信息(取值/赋值)+变量类型(类变量/静态变量)+类名称+类中方法的名称+类中方法的参数+类中方法的返回值+变量在类中方法中的偏移量,可以设这个保存信息的集合(即变量信息集合)为集合A。
本领域普通技术人员可以理解,图10所示的结构仅为示意,计算机终端也可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌声电脑以及移动互联网设备(MobileInternet Devices,MID)、PAD等终端设备。图10其并不对上述电子装置的结构造成限定。例如,计算机终端还可包括比图10中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图10所示不同的配置。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(RandomAccess Memory,RAM)、磁盘或光盘等。
其中,存储器可用于存储软件程序以及模块,如本申请实施例中的安全漏洞检测方法和装置对应的程序指令/模块,处理器通过运行存储在存储器内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的系统漏洞攻击的检测方法。存储器可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
实施例4
本申请的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于保存上述实施例一所提供的变量对象的跟踪方法所执行的程序代码。
可选地,在本实施例中,上述存储介质可以位于计算机网络中计算机终端群中的任意一个计算机终端中,或者位于移动终端群中的任意一个移动终端中。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:在基于被检测程序的控制流图进行漏洞查找时,查找到变量对象的第一操作语句,其中,第一操作语句包括:赋值语句和取值语句;从预先收集的变量信息集合中,获取变量对象的语句集合,其中,语句集合中包括多个第二操作语句,其中,第二操作语句指示的操作与第一操作语句指示的操作相反;根据控制流图,确定多个第二操作语句中与第一操作语句存在函数调用关系的第三操作语句;将确定的第三操作语句作为起点,跟踪变量对象。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:确定多个第二操作语句中与第一操作语句存在函数调用关系的第三操作语句包括:根据控制流图中记录的函数调用关系,确定第一操作语句与每个第二操作语句之间是否存在可达路径;若当前确定的第二操作语句与第一操作语句之间存在可达路径,则将当前确定的第二操作语句确定为第三操作语句。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:算第一操作语句与语句集合中每个第二操作语句之间是否存在可达路径包括:将语句集合中语句位置在类初始化块中的第二操作语句划分至第一集合,并将语句集合中其余的第二操作语句划分至第二集合;确定第一操作语句与第二集合中每个第二操作语句之间是否存在可达路径;若第二集合中的每条第二操作语句与第一操作语句不存在可达路径,确定第一操作语句与第一集合中每个第二操作语句之间是否存在可达路径。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:在获取变量对象的语句集合之前,该方法还包括:对被检测程序进行反编译处理,得到中间语言;基于中间语言的函数调用关系和跳转语句关系生成控制流图;以及收集中间语言中的变量信息,生成变量信息集合,其中,变量信息用于唯一标识对应的变量对象在被检测程序中的位置。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:收集中间语言中的变量信息包括:收集中间语言中变量对象的下述至少之一:语句操作信息、变量类型、类名称、类中方法的名称、类中方法的参数、类中方法的返回值以及变量在类中方法的偏移量;保存语句操作信息、变量类型、类名称、类中方法的名称、类中方法的参数、类中方法的返回值以及变量对象在类中方法的偏移量中的至少之二的对应关系,生成变量信息。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:语句操作信息包括:赋值操作和取值操作,变量类型包括:类变量和静态变量。
采用本申请实施例,在查找到变量对象的第一操作语句和获取到语句集合中的第二操作语句后,通过确定该第一操作语句与第二操作语句之间存在调用关系的第三操作语句,来基于该第三操作语句来进行变量对象的跟踪,使得对第一操作语句可以准确解析,基于准确的第一操作语句,漏洞可以全面准确地查找出,解决了在漏洞扫描的过程中无法跟踪变量对象造成漏洞漏报的问题,实现了准确地跟踪变量对象,漏洞全部得以准确上报,提高了对漏洞扫描的扫描精度。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

Claims (14)

1.一种变量对象的跟踪方法,其特征在于,包括:
在基于被检测程序的控制流图进行漏洞查找时,查找到变量对象的第一操作语句,其中,所述第一操作语句用于指示对所述变量对象进行赋值操作或取值操作,所述控制流图用于描述所述被检测程序中所有函数调用和跳转语句的关系,所述变量对象包括:类变量对象和静态变量对象;
从预先收集的变量信息集合中,获取所述变量对象的语句集合,其中,所述语句集合中包括多个第二操作语句,其中,所述第二操作语句指示的对所述变量对象执行的操作与所述第一操作语句指示的对所述变量对象执行的操作相反,在所述第一操作语句指示的对所述变量对象执行的操作为赋值操作的情况下,所述第二操作语句指示的对所述变量对象执行的操作为取值操作;在所述第一操作语句指示的对所述变量对象执行的操作为取值操作的情况下,所述第二操作语句指示的对所述变量对象执行的操作为赋值操作;
根据所述控制流图,确定所述多个第二操作语句中与所述第一操作语句存在函数调用关系的第三操作语句;
将确定的所述第三操作语句所在的语句位置作为起点,跟踪所述变量对象。
2.根据权利要求1所述的方法,其特征在于,确定所述多个第二操作语句中与所述第一操作语句存在函数调用关系的第三操作语句包括:
根据所述控制流图中记录的函数调用关系,确定所述第一操作语句与每个第二操作语句之间是否存在可达路径;
若当前确定的第二操作语句与所述第一操作语句之间存在可达路径,则将所述当前确定的第二操作语句确定为所述第三操作语句。
3.根据权利要求2所述的方法,其特征在于,确定所述第一操作语句与每个第二操作语句之间是否存在可达路径包括:
将所述语句集合中语句位置在类初始化块中的第二操作语句划分至第一集合,并将所述语句集合中其余的第二操作语句划分至第二集合;
确定所述第一操作语句与所述第二集合中每个第二操作语句之间是否存在可达路径;
若所述第二集合中的每条第二操作语句与所述第一操作语句不存在所述可达路径,确定所述第一操作语句与所述第一集合中每个第二操作语句之间是否存在可达路径。
4.根据权利要求1所述的方法,其特征在于,在获取所述变量对象的语句集合之前,所述方法还包括:
对所述被检测程序进行反编译处理,得到中间语言;
基于所述中间语言的函数调用关系和跳转语句关系生成所述控制流图;以及
收集所述中间语言中的变量信息,生成所述变量信息集合,其中,所述变量信息至少用于唯一标识对应的变量对象在所述被检测程序中的位置。
5.根据权利要求4所述的方法,其特征在于,收集所述中间语言中的变量信息包括:
收集所述中间语言中变量对象的下述至少之一:语句操作信息、变量类型、类名称、类中方法的名称、所述类中方法的参数、所述类中方法的返回值以及所述变量对象在所述类中方法的偏移量;
保存所述语句操作信息、变量类型、类名称、类中方法的名称、所述类中方法的参数、所述类中方法的返回值以及所述变量对象在所述类中方法的偏移量中的至少之二的对应关系,生成所述变量信息。
6.根据权利要求5所述的方法,其特征在于,所述语句操作信息包括:所述赋值操作和所述取值操作,所述变量类型包括:类变量和静态变量。
7.根据权利要求1至6中任意一项所述的方法,其特征在于,所述赋值操作与所述取值操作为相反的操作,其中,
在所述第一操作语句所指示的对所述变量对象执行的操作为所述赋值操作的情况下,所述第二操作语句指示的对所述变量对象执行的操作为所述取值操作;
在所述第一操作语句所指示的对所述变量对象执行的操作为所述取值操作的情况下,所述第二操作语句指示的对所述变量对象执行的操作为所述赋值操作。
8.一种变量对象的跟踪装置,其特征在于,包括:
查找单元,用于在基于被检测程序的控制流图进行漏洞查找时,查找到变量对象的第一操作语句,其中,所述第一操作语句用于指示对所述变量对象进行赋值操作或取值操作,所述控制流图用于描述所述被检测程序中所有函数调用和跳转语句的关系,所述变量对象包括:类变量对象和静态变量对象;
获取单元,用于从预先收集的变量信息集合中,获取所述变量对象的语句集合,其中,所述语句集合中包括多个第二操作语句,其中,所述第二操作语句指示的对所述变量对象执行的操作与所述第一操作语句指示的对所述变量对象执行的操作相反,在所述第一操作语句指示的对所述变量对象执行的操作为赋值操作的情况下,所述第二操作语句指示的对所述变量对象执行的操作为取值操作;在所述第一操作语句指示的对所述变量对象执行的操作为取值操作的情况下,所述第二操作语句指示的对所述变量对象执行的操作为赋值操作;
确定单元,用于根据所述控制流图,确定所述多个第二操作语句中与所述第一操作语句存在函数调用关系的第三操作语句;
跟踪单元,用于将确定的所述第三操作语句所在的语句位置作为起点,跟踪所述变量对象。
9.根据权利要求8所述的装置,其特征在于,所述确定单元包括:
第一确定模块,用于根据所述控制流图中记录的函数调用关系,确定所述第一操作语句与每个第二操作语句之间是否存在可达路径;
第二确定模块,用于若当前确定的第二操作语句与所述第一操作语句之间存在可达路径,则将所述当前确定的第二操作语句确定为所述第三操作语句。
10.根据权利要求9所述的装置,其特征在于,所述第一确定模块包括:
划分子模块,用于将所述语句集合中语句位置在类初始化块中的第二操作语句划分至第一集合,并将所述语句集合中其余的第二操作语句划分至第二集合;
第一确定子模块,用于确定所述第一操作语句与所述第二集合中每个第二操作语句之间是否存在可达路径;
第二确定子模块,用于若所述第二集合中的每条第二操作语句与所述第一操作语句不存在所述可达路径,确定所述第一操作语句与所述第一集合中每个第二操作语句之间是否存在可达路径。
11.根据权利要求8所述的装置,其特征在于,所述装置还包括:
反编译单元,用于在获取所述变量对象的语句集合之前,对所述被检测程序进行反编译处理,得到中间语言;
生成单元,用于基于所述中间语言的函数调用关系和跳转语句关系生成所述控制流图;以及
处理单元,用于收集所述中间语言中的变量信息,生成所述变量信息集合,其中,所述变量信息至少用于唯一标识对应的变量对象在所述被检测程序中的位置。
12.根据权利要求11所述的装置,其特征在于,所述处理单元包括:
收集模块,用于收集所述中间语言中变量对象的下述至少之一:语句操作信息、变量类型、类名称、类中装置的名称、所述类中装置的参数、所述类中装置的返回值以及所述变量对象在所述类中装置的偏移量;
保存模块,用于保存所述语句操作信息、变量类型、类名称、类中装置的名称、所述类中装置的参数、所述类中装置的返回值以及所述变量对象在所述类中装置的偏移量中的至少之二的对应关系,生成所述变量信息。
13.根据权利要求12所述的装置,其特征在于,所述语句操作信息包括:所述赋值操作和所述取值操作,所述变量类型包括:类变量和静态变量。
14.根据权利要求8至13中任意一项所述的装置,其特征在于,所述赋值操作与所述取值操作为相反的操作,其中,
在所述第一操作语句所指示的对所述变量对象执行的操作为所述赋值操作的情况下,所述第二操作语句指示的对所述变量对象执行的操作为所述取值操作;
在所述第一操作语句所指示的对所述变量对象执行的操作为所述取值操作的情况下,所述第二操作语句指示的对所述变量对象执行的操作为所述赋值操作。
CN201610005793.5A 2016-01-05 2016-01-05 变量对象的跟踪方法及装置 Active CN106940772B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610005793.5A CN106940772B (zh) 2016-01-05 2016-01-05 变量对象的跟踪方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610005793.5A CN106940772B (zh) 2016-01-05 2016-01-05 变量对象的跟踪方法及装置

Publications (2)

Publication Number Publication Date
CN106940772A CN106940772A (zh) 2017-07-11
CN106940772B true CN106940772B (zh) 2020-09-18

Family

ID=59469553

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610005793.5A Active CN106940772B (zh) 2016-01-05 2016-01-05 变量对象的跟踪方法及装置

Country Status (1)

Country Link
CN (1) CN106940772B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108763815B (zh) * 2018-06-08 2022-12-02 上海华虹宏力半导体制造有限公司 程序语法检查的方法及芯片验证的方法
WO2024103258A1 (zh) * 2022-11-15 2024-05-23 华为技术有限公司 代码执行方法、装置及设备

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPWO2006087780A1 (ja) * 2005-02-17 2008-07-03 富士通株式会社 脆弱性監査プログラム、脆弱性監査装置、脆弱性監査方法
CN102073587B (zh) * 2010-12-27 2013-07-03 北京邮电大学 一种程序中不可达路径的静态检测方法
US9182957B2 (en) * 2012-07-10 2015-11-10 Loring Craymer Method and system for automated improvement of parallelism in program compilation
CN104699599B (zh) * 2013-12-10 2018-11-06 上海精密计量测试研究所 基于idUCf五元结构的过程间静态切片提取方法
CN104484266A (zh) * 2014-11-07 2015-04-01 上海交通大学 一种锁使用模式自动化静态分析系统

Also Published As

Publication number Publication date
CN106940772A (zh) 2017-07-11

Similar Documents

Publication Publication Date Title
KR101904911B1 (ko) 하이브리드 퍼징 기반 보안 취약점 자동 탐색 방법 및 그 장치
KR101981028B1 (ko) 바이너리 기반 보안 취약점 탐색 시스템, 그 방법 및 프로그램
CN107657177B (zh) 一种漏洞检测方法及装置
JP6686529B2 (ja) 脆弱性分析のための自律型推論システム
KR101246623B1 (ko) 악성 애플리케이션 진단 장치 및 방법
JP5430570B2 (ja) システムコールカバレッジ基準による試験スイート削減のための方法
CN106295348B (zh) 应用程序的漏洞检测方法及装置
CN108874470B (zh) 一种信息处理方法及服务器、计算机存储介质
KR20170068814A (ko) 악성 모바일 앱 감지 장치 및 방법
CN110347085B (zh) 自动化测试系统、方法、车辆以及计算机可读介质
CN108491321B (zh) 测试用例范围确定方法、装置及存储介质
EP3001319B1 (en) Method for detecting libraries in program binaries
CN105204985A (zh) 漏洞检测方法及装置
CN105515909B (zh) 一种数据采集测试方法和装置
CN111831562A (zh) 一种基于机器学习的模糊测试用例生成方法及运行该方法的计算机设备与可读存储介质
CN114021142A (zh) 一种安卓应用程序漏洞检测方法
CN114462044A (zh) 一种基于污点分析的uefi固件漏洞静态检测方法及装置
CN107153605B (zh) 测试样本的生成方法及装置
CN106557419B (zh) 程序的测试方法及装置
CN108399321B (zh) 基于动态指令依赖图胎记的软件局部抄袭检测方法
CN106940772B (zh) 变量对象的跟踪方法及装置
CN113268243A (zh) 内存预测方法及装置、存储介质、电子设备
CN111538665A (zh) 程序的测试方法和装置、存储介质、电子装置
CN111090593A (zh) 确定崩溃归属的方法、装置、电子设备及存储介质
KR101324691B1 (ko) 모바일 악성 행위 어플리케이션 탐지 시스템 및 방법

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant