CN106940775B - 应用程序的漏洞检测方法和装置 - Google Patents

应用程序的漏洞检测方法和装置 Download PDF

Info

Publication number
CN106940775B
CN106940775B CN201610005155.3A CN201610005155A CN106940775B CN 106940775 B CN106940775 B CN 106940775B CN 201610005155 A CN201610005155 A CN 201610005155A CN 106940775 B CN106940775 B CN 106940775B
Authority
CN
China
Prior art keywords
vulnerability
statement
branch
characteristic
condition
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
CN201610005155.3A
Other languages
English (en)
Other versions
CN106940775A (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 CN201610005155.3A priority Critical patent/CN106940775B/zh
Publication of CN106940775A publication Critical patent/CN106940775A/zh
Application granted granted Critical
Publication of CN106940775B publication Critical patent/CN106940775B/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/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • 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 Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

本申请公开了一种应用程序的漏洞检测方法和装置。其中,该方法包括:获取被检测程序的控制流图,其中,控制流图中至少记录有被检测程序的反编译语句;在反编译语句中存在漏洞特征语句的情况下,进入漏洞查找状态;在漏洞查找状态中,获取与漏洞特征语句对应的分支裁剪条件,其中,分支裁剪条件用于指示进行漏洞查找的跳转分支;在分支裁剪条件所指示的跳转分支的路径中查找漏洞。通过本申请,解决了现有的应用程序的漏洞检测效率低的技术问题。

Description

应用程序的漏洞检测方法和装置
技术领域
本申请涉及移动安全领域,具体而言,涉及一种应用程序的漏洞检测方法和装置。
背景技术
在漏洞静态检测过程中,会涉及到对被扫描程序的全路径遍历,在遍历被扫描程序的路径的过程中,如果遇到条件分支形成的路径,如if(如果)的分支路径,switch(选择)的分支路径等,需对每个分支路径都进行遍历。
上述的漏洞静态检测的全路径遍历存在两方面的不足:一方面,产生误报,假设当一个if条件A为真时,在条件A为真时下面的所有子分支都不会出现程序漏洞,这时如果扫描程序进入该分支检测,那么在该分支中发现的任何漏洞都将是误报;另一方面,降低扫描效率,如上述假设,如果进入了不必要的分支进行扫描,则会加长扫描时间。
针对现有的应用程序的漏洞检测效率低的问题,目前尚未提出有效的解决方案。
发明内容
本申请实施例提供了一种应用程序的漏洞检测方法和装置,以至少解决现有的应用程序的漏洞检测效率低的技术问题。
根据本申请实施例的一个方面,提供了一种应用程序的漏洞检测方法,该方法包括:获取被检测程序的控制流图,其中,控制流图中至少记录有被检测程序的反编译语句;在从反编译语句中存在查找到漏洞特征语句的情况下,进入漏洞查找状态;在漏洞查找状态中,获取与漏洞特征语句对应符合的分支裁剪条件,其中,分支裁剪条件用于指示进行漏洞查找的跳转分支;在分支裁剪条件所指示的跳转分支的路径中查找漏洞。
根据本申请实施例的另一方面,还提供了一种应用程序的漏洞检测装置,该装置包括:第一获取模块,用于获取被检测程序的控制流图,其中,控制流图中至少记录有被检测程序的反编译语句;处理模块,用于在反编译语句中存在漏洞特征语句的情况下,进入漏洞查找状态;第二获取模块,用于在漏洞查找状态中,获取与漏洞特征语句对应的分支裁剪条件,其中,分支裁剪条件用于指示进行漏洞查找的跳转分支;查找模块,用于在分支裁剪条件所指示的跳转分支的路径中查找漏洞。
进一步地,所述装置还包括:配置模块,用于在获取与所述漏洞特征语句对应的分支裁剪条件之前,在漏洞配置文件中配置所述漏洞特征语句的分支裁剪条件,其中,所述分支裁剪条件中记录有所述漏洞特征语句的特征函数、以及所述特征函数的返回值的条件语句的跳转分支。
进一步地,所述第一获取模块包括:反编译子模块,用于对所述被检测程序进行反编译,得到反编译文件,其中,所述反编译文件包括所述反编译语句;保存子模块,用于保存所述反编译语句的函数和指令间的调用关系,得到所述被检测程序的控制流图。
在本申请实施例中,在进入漏洞查找状态之后,获取漏洞特征语句的分支裁剪条件所指示的跳转分支,并在该跳转分支的路径中查找漏洞。在上述实施例中,判断被检测程序的反编译语句是否存在漏洞特征语句,若存在漏洞特征语句,可以通过漏洞特征语句的分支裁剪条件,进入分支裁剪条件指示的分支路径,从而可以过滤掉不存在需要进行漏洞查找的路径,也即通过该方案,不需要对被检测程序的每个路径进行遍历,减少了查找漏洞过程中遍历的路径数目,缩短了遍历被检测程序的时间,从而提高了漏洞检测效率,解决了现有的应用程序的漏洞检测效率低的问题。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是本申请实施例的一种应用程序的漏洞检测方法的计算机终端的网络环境图;
图2是根据本申请实施例的一种应用程序的漏洞检测方法的流程图;
图3是根据本申请实施例的一种可选的应用程序的漏洞检测方法的流程图;
图4是根据本申请实施例的另一种可选的应用程序的漏洞检测方法的流程图;
图5是根据本申请实施例的一种应用程序的漏洞检测装置的示意图;
图6是根据本申请实施例的一种可选的应用程序的漏洞检测装置的示意图;
图7是根据本申请实施例的另一种可选的应用程序的漏洞检测装置的示意图;
图8是根据本申请实施例的又一种可选的应用程序的漏洞检测装置的示意图;
图9是根据本申请实施例的第四种可选的应用程序的漏洞检测装置的示意图;
图10是根据本申请实施例的第五种可选的应用程序的漏洞检测装置的示意图;
图11是根据本申请实施例的一种计算机终端的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本申请涉及到的名词解释如下:
APK,英文名称Android Package,即Android安装包。
中间语言,是指通过对被检测程序的源代码进行反编译得到的机器语言,中间语言中的中间语句也即反编译语句。
漏洞特征语句,指的是针对不同漏洞预先定义的表示漏洞特征的特征语句,漏洞特征语句至少可以包括所表示的漏洞的特征函数、以及特征函数的返回值。
实施例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:在分支裁剪条件所指示的跳转分支的路径中查找漏洞。
采用本申请实施例,在进入漏洞查找状态之后,获取漏洞特征语句的分支裁剪条件所指示的跳转分支,并在该跳转分支的路径中查找漏洞。在上述实施例中,判断被检测程序的反编译语句是否存在漏洞特征语句,若存在漏洞特征语句,可以通过漏洞特征语句的分支裁剪条件,进入分支裁剪条件指示的分支路径,从而可以过滤掉不存在需要进行漏洞查找的路径,也即通过该方案,不需要对被检测程序的每个路径进行遍历,减少了查找漏洞过程中遍历的路径数目,缩短了遍历被检测程序的时间,从而提高了漏洞检测效率,解决了现有的应用程序的漏洞检测效率低的问题。
上述的反编译语句指的是将待检测程序的源程序语句进行反编译,得到与源程序语句对应的反编译语句,如通过smali、jumpo语法进行反编译得到反编译语句。被检测程序可以为APK(Android Package,即Android安装包)程序。漏洞特征语句指的是针对不同漏洞预先定义的表示漏洞特征的特征语句,漏洞特征语句至少可以包括所表示的漏洞的特征函数、以及特征函数的返回值。
其中,上述的反编译语句可以为如下语句:
215 invoke-virtual{vθ,v1},Ljava/lang/String;->equals(Ljava/lang/Objiect;)Z
216
217 move-result v1
218
219 if-nez v1,:cond_b
220
221 const-string v1,“ERROR_”
222
223 invoke-virtual{vθ,v1},Ljava/lang/String;->indexOf(Ljava/lang/String;)I
224
225 move-result v1
226
227 :cond_b
228 :goto_b
229
230 return-object vθ
具体地,可以通过安装在终端上的漏洞扫描系统将被检测程序反编译为中间语言(即上述的反编译语句),通过中间语言得到被检测程序的控制流图;判断控制流图中记录的反编译语句中是否存在漏洞特征语句,若反编译语句中不存在漏洞特征语句,则表示该被检测程序不存在漏洞,不需要进入漏洞查找状态;若从反编译语句中查找到漏洞特征语句,则进入漏洞查找状态,进一步在漏洞查找状态中查找漏洞。在漏洞查找状态中,如果遇到漏洞特征语句的分支裁剪条件指示进行漏洞查找的跳转分支,则进入该跳转分支,并在该跳转分支的路径中查找漏洞。
上述的终端可以包括个人电脑、移动终端(如智能手机、平板电脑等)。
在本申请的上述实施例中,获取与漏洞特征语句对应的分支裁剪条件包括:从预先配置的漏洞配置文件中,读取漏洞特征语句的特征函数;在从反编译语句中查找到漏洞特征语句的特征函数的情况下,跟踪特征函数的返回值;当返回值流经到条件语句时,从漏洞配置文件中读取条件语句的分支裁剪条件。
进一步地,在分支裁剪条件所指示的跳转分支的路径中查找漏洞的同时,方法还包括:将条件语句的除跳转分支之外的其他分支标记为无效分支。
可选地,忽略条件语句的除跳转分支之外的其他分支,也即忽略标记的无效分支。
具体地,如果从反编译语句中查找到形成漏洞的特征语句(即上述的漏洞特征语句),则进入漏洞查找状态。在漏洞查找状态中,如果遇到分支裁剪配置文件(即上述的漏洞配置文件)中的特征函数,则跟踪该特征函数的返回值,并在该返回值流经到一个条件语句时,如果分支裁剪配置文件在该条件语句中定义了该返回值跳转的位置,则按照该定义的跳转位置进入指定分支,并忽略条件语句中的其余分支。
可选地,仍以上述的反编译语句为例,详述本申请的上述实施例。
215 invoke-virtual{vθ,v1},Ljava/lang/String;->equals(Ljava/lang/Objiect;)Z
216
217 move-result v1
218
219 if-nez v1,:cond_b
220
221 const-string v1,“ERROR_”
222
223 invoke-virtual{vθ,v1},Ljava/lang/String;->indexOf(Ljava/lang/String;)I
224
225 move-result v1
226
227 :cond_b
228 :goto_b
229
230 return-object vθ
配置的特征函数为:Ljava/lang/String;->equals(Ljava/lang/Objiect;)Z,对上述反编译语句进行扫描分析,可以在215行找到该预先配置的特征函数,即上述的特征函数可以为Ljava/lang/String;->equals(Ljava/lang/Objiect;)Z。并在217行得到该特征函数的返回值所在的寄存器v1,并跟踪该寄存器v1,该寄存器v1中存储的返回值在219行流经到一个条件语句,即上述语句中的if语句,从漏洞配置文件中读取到该if语句可以读取到,的分支裁剪条件配置文件被定义为:当该寄存器v1的返回值遇到if-nez(not equalzero,即非零)时,进入指定分支:cond_b,即进入227行继续查找漏洞。在进入该指定分支进行查询漏洞的同时,忽略if语句的其他分支,即220-226行的语句。
通过上述实施例,当分支裁剪配置文件中的特征函数的返回值流经一个条件语句时,可以根据定义的条件语句中的跳转位置,进入指定的跳转分支,同时,忽略条件语句中的其他分支,从而实现了在检测漏洞的过程中,去掉无效分支,进入有效分支查询漏洞,缩短了对被检测程序的检测时间,在保证检测精度的同时提高了检测效率。
在本申请的上述实施例中,在进入漏洞查找状态之前,该方法还包括:逐条读取控制流图中的反编译语句;在读取到的反编译语句中存在预先获取的漏洞特征的情况下,确定反编译语句中存在漏洞特征语句。
具体地,将被检测程序的源程序语言反编译为中间语言(即上述的反编译语句)之后,逐行分析反编译后的中间语言,若在分析的过程中,分析出中间语句中存在预先定义的漏洞特征,则确定中间语句中存在漏洞特征语句,并进入漏洞查找状态。
通过上述实施例,在未读取到反编译语句中存在预先获取的漏洞特征的情况下,则继续分析反编译语句,直到读取到反编译语句中存在预先获取的漏洞特征,确定从反编译语句中查找到漏洞特征语句,在查找到漏洞特征语句的情况下,进入漏洞查找状态,因此,采用该方案不会发生对被检测程序的路径进行全部遍历的情况,可以减少遍历被检测程序的路径数目,从而缩短对被检测程序的漏洞检测时间,提高漏洞检测效率。
在本申请的上述实施例中,在获取与漏洞特征语句对应的分支裁剪条件之前,该方法还包括:在漏洞配置文件中配置漏洞特征语句的分支裁剪条件,其中,分支裁剪条件中记录有漏洞特征语句的特征函数、以及特征函数的返回值的条件语句的跳转分支。
可选地,预先定义针对某个漏洞(如设漏洞名为A,即漏洞A)的分支裁剪配置文件(即上述的漏洞配置文件),该配置文件具有以下特点:
1)分支裁剪配置文件中的裁剪项与漏洞A对应。即当在查找漏洞A时,在满足分支裁剪条件时进行裁剪。其中,分支裁剪条件中记录有与该漏洞A对应的特征函数、特征函数的返回值流经的条件语句中指示查找漏洞A的跳转分支。
2)裁剪项应定义需要跟踪其返回值的特征函数(如设特征函数为B)。特征函数B即为上述的与漏洞A对应的特征函数,该特征函数应为一个系统函数,即系统提供给开发者调用的函数。
3)裁剪项应定义特征函数的返回值在遇到某个跳转情况时对应进入的跳转分支。即跟踪特征函数的返回值,在返回值流经的条件语句中遇到某个跳转情况时,进入定义的查找漏洞A的跳转分支。
在上述实施例中,通过预先定义与漏洞对应的分支裁剪配置文件,可以明确得出与漏洞对应的特征函数、以及特征函数的返回值的条件语句的跳转分支,从而实现在检测过程中能够准确去掉无效分支,以提高检测精度。
在本申请的上述实施例中,获取被检测程序的控制流图包括:对被检测程序进行反编译,得到反编译文件,其中,反编译文件包括反编译语句;保存反编译语句的函数和指令间的调用关系,得到被检测程序的控制流图。
可选地,在被检测程序为APK程序时,将待检测的APK程序的源程序进行反编译,得到反编译语句,即中间语言,如可以通过smali或jumpo语法进行反编译,得到中间语言。在得到中间语言之后,通过分析中间语言,保存中间语言的调用函数、跳转条件以及各个指令间的关系,得到记录有中间语言的控制流图,该指令包括调用指令和跳转指令。
下面结合图3详述本申请的上述实施例,如图3所示,该实施例可以包括如下步骤:
步骤S301:反编译被检测程序,得到反编译文件。
具体地,对被检测程序的源程序进行反编译,得到反编译文件,反编译文件包括多个反编译语句,也即中间语言。具体地的反编译方式与上述实施例中的实现方式一致,在此不再赘述。
其中,通过对被检测程序的源代码进行反编译得到的机器语言即为中间语言(也即反编译语句)。
步骤S302:根据反编译文件生成被检测程序的控制流图。
具体地,获取反编译语句中的调用函数和跳转指令的关系,保存获取到的这些关系得到被检测程序的控制流图。
步骤S303:逐行读取控制流图中的反编译语句。
步骤S304:如果在反编译语句中查找到能够形成漏洞的特征语句,则进入漏洞查找状态。
具体地,可以通过跟踪寄存器流经的语句查找形成漏洞的特征语句。可选地,在未读取到反编译语句中存在预先获取的漏洞特征的情况下,则继续分析反编译语句,直到读取到反编译语句中存在预先获取的漏洞特征,确定从反编译语句中查找到漏洞特征语句,在查找到漏洞特征语句的情况下,进入漏洞查找状态。
步骤S305:在漏洞查找状态中,如果从反编译语句中查找到分支裁剪配置文件中的特征函数,则跟踪特征函数的返回值。
其中,分支裁剪配置文件为上述的漏洞配置文件。分支裁剪配置文件是预先定义的,与漏洞对应,该分支裁剪配置文件中定义有与漏洞对应的特征函数、特征函数的返回值流经的条件语句中的跳转分支。
步骤S306:当特征函数的返回值流经到条件语句时,从分支裁剪配置文件中读取条件语句指示进行漏洞查找的指定分支。
可选地,当特征函数的返回值(返回值可以为布尔类型)流经到一个条件语句时,查找分支裁剪配置文件在该条件语句中定义的该返回值跳转的位置,按照该定义的跳转位置进入指定分支(即上述的跳转分支),并忽略条件语句中的其余分支。
步骤S307:在指定分支的路径中继续查找漏洞,直到查找过程结束。
在指定分支的路径中继续查找漏洞的过程中,若扫描到漏洞,则生成漏洞信息,该漏洞信息中可以包括漏洞名称、漏洞发生位置等信息。将生成的漏洞信息显示在终端屏幕上用于显示漏洞扫描系统的界面上。
下面结合图4详述本申请实施例。
步骤S401:设置漏洞配置文件。
具体地,可以在漏洞配置文件中设置一个或多个漏洞的漏洞信息,其中,该漏洞信息中可以包括漏洞的漏洞名称、漏洞特征语句、漏洞的特征函数以及条件语句的跳转分支。
步骤S402:获取待检测程序。
该待检测程序可以为安装在终端上的应用程序,如即时通讯程序、图片处理程序、邮件应用程序等。
步骤S403:反编译待检测程序得到反编译文件。
在启动终端的漏洞扫描系统时,漏洞扫描系统加载上述预先配置的漏洞配置文件,然后对待检测程序进行反编译,反编译的实现方式与上述实施例中的实现方式一致,在此不再赘述。
步骤S404:根据反编译文件生成待检测程序的控制流图。
具体地,可以获取该反编译文件中的反编译语句,基于该反编译语句的函数调用关系、指令跳转关系等生成控制流图,该步骤的实现方式与上述实施例中的实现方式一致,在此不再赘述。
步骤S405:逐行读取控制流图中的反编译语句。
步骤S406:查找反编译语句中的漏洞特征语句,进入漏洞查找状态。
由于漏洞配置文件中保存有多个漏洞的漏洞特征语句,查找到漏洞配置文件中的任意一个漏洞特征语句即可认为查找到漏洞特征语句,进入漏洞查找状态。
本申请以漏洞A为例,若查找到漏洞A的漏洞特征语句,进入漏洞查找状态。
步骤S407:在漏洞查找状态中,逐行读取反编译语句。
步骤S408:判断是否匹配到需要裁减分支的函数。
可选地,若在读取反编译语句的过程中,读取到漏洞配置文件中预先配置的漏洞A的需要裁减分支的函数(如特征函数),则将判断出匹配到需要裁减分支的函数,执行步骤S409;若否,则返回执行步骤S407。
步骤S409:跟踪需要裁减分支的函数的返回值所在的寄存器。
步骤S410:通过跟踪寄存器流经的语句,判断返回值是否流经条件语句。
若判断出返回值流经条件语句,则执行步骤S411;若未判断出返回值流经条件语句,则返回执行步骤S407,也即继续读取反编译语句。
步骤S411:按照漏洞A的分支裁剪条件确定跳转分支。
可选地,从漏洞配置文件中读取条件语句的分支裁剪条件,获取该分支裁剪条件的预定义值所指示的跳转条件,如,进入结果为真的条件、或进入结果为假的条件。
步骤S412:进入该跳转分支进行漏洞查找。
步骤S413:读取到指示漏洞查找结束条件的反编译语句时,停止查找漏洞。
通过本申请上述实施例,在启动终端的漏洞扫描系统时,漏洞扫描系统加载上述预先配置的漏洞配置文件,然后对待检测程序进行漏洞扫描。在通过漏洞扫描系统扫描待检测程序的过程中,可以基于漏洞配置文件中记录的漏洞的分支裁剪条件,去掉待检测程序中不存在漏洞的无效分支,不仅可以提高检测精度,还可以提高检测速度。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
实施例2
根据本申请实施例,还提供了一种应用程序的漏洞检测装置的实施例,如图5所示,该装置包括:第一获取模块50、处理模块52、第二获取模块54和查找模块56。
其中,第一获取模块50,用于获取被检测程序的控制流图,其中,控制流图中至少记录有被检测程序的反编译语句。
处理模块52,用于在反编译语句中存在漏洞特征语句的情况下,进入漏洞查找状态。
第二获取模块54,用于在漏洞查找状态中,获取与漏洞特征语句对应的分支裁剪条件,其中,分支裁剪条件用于指示进行漏洞查找的跳转分支。
查找模块56,用于在分支裁剪条件所指示的跳转分支的路径中查找漏洞。
采用本申请实施例,在进入漏洞查找状态之后,获取漏洞特征语句的分支裁剪条件所指示的跳转分支,并在该跳转分支的路径中查找漏洞。在上述实施例中,判断被检测程序的反编译语句是否存在漏洞特征语句,若存在漏洞特征语句,可以通过漏洞特征语句的分支裁剪条件,进入分支裁剪条件指示的分支路径,从而可以过滤掉不存在需要进行漏洞查找的路径,也即通过该方案,不需要对被检测程序的每个路径进行遍历,减少了查找漏洞过程中遍历的路径数目,缩短了遍历被检测程序的时间,从而提高了漏洞检测效率,解决了现有的应用程序的漏洞检测效率低的问题。
上述的反编译语句指的是将待检测程序的源程序语句进行反编译,得到与源程序语句对应的反编译语句,如通过smali、jumpo语法进行反编译得到反编译语句。被检测程序可以为APK(Android Package,即Android安装包)程序。漏洞特征语句指的是针对不同漏洞预先定义的表示漏洞特征的特征语句,漏洞特征语句至少可以包括所表示的漏洞的特征函数、以及特征函数的返回值。
具体地,可以通过安装在终端上的漏洞扫描系统将被检测程序反编译为中间语言(即上述的反编译语句),通过中间语言得到被检测程序的控制流图;判断控制流图中记录的反编译语句中是否存在漏洞特征语句,若反编译语句中不存在漏洞特征语句,则表示该被检测程序不存在漏洞,不需要进入漏洞查找状态;若从反编译语句中查找到漏洞特征语句,则进入漏洞查找状态,进一步在漏洞查找状态中查找漏洞。在漏洞查找状态中,如果遇到漏洞特征语句的分支裁剪条件指示进行漏洞查找的跳转分支,则进入该跳转分支,并在该跳转分支的路径中查找漏洞。
上述的终端可以包括个人电脑、移动终端(如智能手机、平板电脑等)。
在本申请的上述实施例中,如图6所示,第二获取模块54包括:第一读取子模块541,用于从预先配置的漏洞配置文件中,读取漏洞特征语句的特征函数;跟踪子模块543,用于在从反编译语句中查找到漏洞特征语句的特征函数的情况下,跟踪特征函数的返回值;第二读取子模块545,用于当返回值流经到条件语句时,从漏洞配置文件中读取条件语句的分支裁剪条件。
进一步地,如图7所示,上述装置还可以包括:标记模块71,用于在分支裁剪条件所指示的跳转分支的路径中查找漏洞的同时,将条件语句的除跳转分支之外的其他分支标记为无效分支。
可选地,忽略条件语句的除跳转分支之外的其他分支,也即忽略标记的无效分支。
具体地,如果从反编译语句中查找到形成漏洞的特征语句(即上述的漏洞特征语句),则进入漏洞查找状态。在漏洞查找状态中,如果遇到分支裁剪配置文件(即上述的漏洞配置文件)中的特征函数,则跟踪该特征函数的返回值,并在该返回值流经到一个条件语句时,如果分支裁剪配置文件在该条件语句中定义了该返回值跳转的位置,则按照该定义的跳转位置进入指定分支,并忽略条件语句中的其余分支。
通过上述实施例,当分支裁剪配置文件中的特征函数的返回值流经一个条件语句时,可以根据定义的条件语句中的跳转位置,进入指定的跳转分支,同时,忽略条件语句中的其他分支,从而实现了在检测漏洞的过程中,去掉无效分支,进入有效分支查询漏洞,缩短了对被检测程序的检测时间,在保证检测精度的同时提高了检测效率。
在本申请的上述实施例中,如图8所示,上述装置还可以包括:读取模块81,用于在进入漏洞查找状态之前,逐条读取控制流图中的反编译语句;确定模块83,用于在读取到的反编译语句中存在预先获取的漏洞特征的情况下,确定反编译语句中存在漏洞特征语句。
具体地,将被检测程序的源程序语言反编译为中间语言(即上述的反编译语句)之后,逐行分析反编译后的中间语言,若在分析的过程中,分析出中间语句中存在预先定义的漏洞特征,则确定中间语句中存在漏洞特征语句,并进入漏洞查找状态。
通过上述实施例,在未读取到反编译语句中存在预先获取的漏洞特征的情况下,则继续分析反编译语句,直到读取到反编译语句中存在预先获取的漏洞特征,确定从反编译语句中查找到漏洞特征语句,在查找到漏洞特征语句的情况下,进入漏洞查找状态,因此,采用该方案不会发生对被检测程序的路径进行全部遍历的情况,可以减少遍历被检测程序的路径数目,从而缩短对被检测程序的漏洞检测时间,提高漏洞检测效率。
在本申请的上述实施例中,如图9所示,上述装置还可以包括:配置模块91,用于在获取与漏洞特征语句对应的分支裁剪条件之前,在漏洞配置文件中配置漏洞特征语句的分支裁剪条件,其中,分支裁剪条件中记录有漏洞特征语句的特征函数、以及特征函数的返回值的条件语句的跳转分支。
可选地,预先定义针对某个漏洞(如设漏洞名为A,即漏洞A)的分支裁剪配置文件(即上述的漏洞配置文件),该配置文件具有以下特点:
1)分支裁剪配置文件中的裁剪项与漏洞A对应。即当在查找漏洞A时,在满足分支裁剪条件时进行裁剪。其中,分支裁剪条件中记录有与该漏洞A对应的特征函数、特征函数的返回值流经的条件语句中指示查找漏洞A的跳转分支。
2)裁剪项应定义需要跟踪其返回值的特征函数(如设特征函数为B)。特征函数B即为上述的与漏洞A对应的特征函数,该特征函数应为一个系统函数,即系统提供给开发者调用的函数。
3)裁剪项应定义特征函数的返回值在遇到某个跳转情况时对应进入的跳转分支。即跟踪特征函数的返回值,在返回值流经的条件语句中遇到某个跳转情况时,进入定义的查找漏洞A的跳转分支。
在上述实施例中,通过预先定义与漏洞对应的分支裁剪配置文件,可以明确得出与漏洞对应的特征函数、以及特征函数的返回值的条件语句的跳转分支,从而实现在检测过程中能够准确去掉无效分支,以提高检测精度。
在本申请的上述实施例中,如图10所示,第一获取模块50包括:反编译子模块501,用于对被检测程序进行反编译,得到反编译文件,其中,反编译文件包括反编译语句;保存子模块503,用于保存反编译语句的函数和指令间的调用关系,得到被检测程序的控制流图。
可选地,在被检测程序为APK程序时,将待检测的APK程序的源程序进行反编译,得到反编译语句,即中间语言,如可以通过smali或jumpo语法进行反编译,得到中间语言。在得到中间语言之后,通过分析中间语言,保存中间语言的调用函数、跳转条件以及各个指令间的关系,得到记录有中间语言的控制流图,该指令包括调用指令和跳转指令。
通过本申请上述实施例,在启动终端的漏洞扫描系统时,漏洞扫描系统加载上述预先配置的漏洞配置文件,然后对待检测程序进行漏洞扫描。在通过漏洞扫描系统扫描待检测程序的过程中,可以基于漏洞配置文件中记录的漏洞的分支裁剪条件,去掉待检测程序中不存在漏洞的无效分支,不仅可以提高检测精度,还可以提高检测速度。
实施例3
本申请的实施例可以提供一种计算机终端,该计算机终端可以是计算机终端群中的任意一个计算机终端设备。可选地,在本实施例中,上述计算机终端也可以替换为移动终端等终端设备。
可选地,在本实施例中,上述计算机终端可以位于计算机网络的多个网络设备中的至少一个网络设备。
在本实施例中,上述计算机终端可以执行应用程序的漏洞检测方法中以下步骤的程序代码:获取被检测程序的控制流图,其中,控制流图中至少记录有被检测程序的反编译语句;在反编译语句中存在漏洞特征语句的情况下,进入漏洞查找状态;在漏洞查找状态中,获取与漏洞特征语句对应的分支裁剪条件,其中,分支裁剪条件用于指示进行漏洞查找的跳转分支;在分支裁剪条件所指示的跳转分支的路径中查找漏洞。
可选地,图11是根据本申请实施例的一种计算机终端的结构框图。如图11所示,该计算机终端A可以包括:一个或多个(图中仅示出一个)处理器111、存储器113、以及传输装置115。
其中,存储器113可用于存储软件程序以及模块,如本申请实施例中的应用程序的漏洞检测方法和装置对应的程序指令/模块,处理器111通过运行存储在存储器内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的应用程序的漏洞检测方法。存储器113可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器113可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至终端A。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
处理器可以通过传输装置调用存储器存储的信息及应用程序,以执行下述步骤:获取被检测程序的控制流图,其中,控制流图中至少记录有被检测程序的反编译语句;在反编译语句中存在漏洞特征语句的情况下,进入漏洞查找状态;在漏洞查找状态中,获取与漏洞特征语句对应的分支裁剪条件,其中,分支裁剪条件用于指示进行漏洞查找的跳转分支;在分支裁剪条件所指示的跳转分支的路径中查找漏洞。
可选的,上述处理器还可以执行如下步骤的程序代码:获取与漏洞特征语句对应的分支裁剪条件包括:从预先配置的漏洞配置文件中,读取漏洞特征语句的特征函数;在从反编译语句中查找到漏洞特征语句的特征函数的情况下,跟踪特征函数的返回值;当返回值流经到条件语句时,从漏洞配置文件中读取条件语句的分支裁剪条件。
可选的,上述处理器还可以执行如下步骤的程序代码:在分支裁剪条件所指示的跳转分支的路径中查找漏洞的同时,方法还包括:将条件语句的除跳转分支之外的其他分支标记为无效分支。
可选的,上述处理器还可以执行如下步骤的程序代码:在进入漏洞查找状态之前,方法还包括:逐条读取控制流图中的反编译语句;在读取到的反编译语句中存在预先获取的漏洞特征的情况下,确定反编译语句中存在漏洞特征语句。
可选的,上述处理器还可以执行如下步骤的程序代码:在获取与漏洞特征语句对应的分支裁剪条件之前,方法还包括:在漏洞配置文件中配置漏洞特征语句的分支裁剪条件,其中,分支裁剪条件中记录有漏洞特征语句的特征函数、以及特征函数的返回值的条件语句的跳转分支。
采用本申请实施例,在进入漏洞查找状态之后,获取漏洞特征语句的分支裁剪条件所指示的跳转分支,并在该跳转分支的路径中查找漏洞。在上述实施例中,判断被检测程序的反编译语句是否存在漏洞特征语句,若存在漏洞特征语句,可以通过漏洞特征语句的分支裁剪条件,进入分支裁剪条件指示的分支路径,从而可以过滤掉不存在需要进行漏洞查找的路径,也即通过该方案,不需要对被检测程序的每个路径进行遍历,减少了查找漏洞过程中遍历的路径数目,缩短了遍历被检测程序的时间,从而提高了漏洞检测效率,解决了现有的应用程序的漏洞检测效率低的问题。
通过本申请上述实施例,在启动终端的漏洞扫描系统时,漏洞扫描系统加载上述预先配置的漏洞配置文件,然后对待检测程序进行漏洞扫描。在通过漏洞扫描系统扫描待检测程序的过程中,可以基于漏洞配置文件中记录的漏洞的分支裁剪条件,去掉待检测程序中不存在漏洞的无效分支,不仅可以提高检测精度,还可以提高检测速度。
本领域普通技术人员可以理解,图11所示的结构仅为示意,计算机终端也可以是智能手机(如Android手机、IOS手机等)、平板电脑、掌声电脑以及移动互联网设备(MobileInternet Devices,MID)、PAD等终端设备。图11其并不对上述电子装置的结构造成限定。例如,计算机终端A还可包括比图11中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图11所示不同的配置。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(RandomAccess Memory,RAM)、磁盘或光盘等。
实施例4
本申请的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于保存上述实施例一所提供的应用程序的漏洞检测方法所执行的程序代码。
可选地,在本实施例中,上述存储介质可以位于计算机网络中计算机终端群中的任意一个计算机终端中,或者位于移动终端群中的任意一个移动终端中。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:获取被检测程序的控制流图,其中,控制流图中至少记录有被检测程序的反编译语句;在反编译语句中存在漏洞特征语句的情况下,进入漏洞查找状态;在漏洞查找状态中,获取与漏洞特征语句对应的分支裁剪条件,其中,分支裁剪条件用于指示进行漏洞查找的跳转分支;在分支裁剪条件所指示的跳转分支的路径中查找漏洞。
可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:获取与漏洞特征语句对应的分支裁剪条件包括:从预先配置的漏洞配置文件中,读取漏洞特征语句的特征函数;在从反编译语句中查找到漏洞特征语句的特征函数的情况下,跟踪特征函数的返回值;当返回值流经到条件语句时,从漏洞配置文件中读取条件语句的分支裁剪条件。
可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:在分支裁剪条件所指示的跳转分支的路径中查找漏洞的同时,方法还包括:将条件语句的除跳转分支之外的其他分支标记为无效分支。
可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:在进入漏洞查找状态之前,方法还包括:逐条读取控制流图中的反编译语句;在读取到的反编译语句中存在预先获取的漏洞特征的情况下,确定反编译语句中存在漏洞特征语句。
可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:在获取与漏洞特征语句对应的分支裁剪条件之前,方法还包括:在漏洞配置文件中配置漏洞特征语句的分支裁剪条件,其中,分支裁剪条件中记录有漏洞特征语句的特征函数、以及特征函数的返回值的条件语句的跳转分支。
采用本申请实施例,在进入漏洞查找状态之后,获取漏洞特征语句的分支裁剪条件所指示的跳转分支,并在该跳转分支的路径中查找漏洞。在上述实施例中,判断被检测程序的反编译语句是否存在漏洞特征语句,若存在漏洞特征语句,可以通过漏洞特征语句的分支裁剪条件,进入分支裁剪条件指示的分支路径,从而可以过滤掉不存在需要进行漏洞查找的路径,也即通过该方案,不需要对被检测程序的每个路径进行遍历,减少了查找漏洞过程中遍历的路径数目,缩短了遍历被检测程序的时间,从而提高了漏洞检测效率,解决了现有的应用程序的漏洞检测效率低的问题。
通过本申请上述实施例,在启动终端的漏洞扫描系统时,漏洞扫描系统加载上述预先配置的漏洞配置文件,然后对待检测程序进行漏洞扫描。在通过漏洞扫描系统扫描待检测程序的过程中,可以基于漏洞配置文件中记录的漏洞的分支裁剪条件,去掉待检测程序中不存在漏洞的无效分支,不仅可以提高检测精度,还可以提高检测速度。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

Claims (12)

1.一种应用程序的漏洞检测方法,其特征在于,包括:
获取被检测程序的控制流图,其中,所述控制流图中至少记录有所述被检测程序的反编译语句;
在所述反编译语句中存在漏洞特征语句的情况下,进入漏洞查找状态;
在所述漏洞查找状态中,获取与所述漏洞特征语句对应的分支裁剪条件,其中,所述分支裁剪条件用于指示进行漏洞查找的跳转分支;
在所述分支裁剪条件所指示的跳转分支的路径中查找漏洞;
其中,所述漏洞特征语句指的是针对不同漏洞预先定义的表示漏洞特征的特征语句,所述漏洞特征语句至少包括所表示的漏洞的特征函数、以及特征函数的返回值;
当所述分支裁剪条件中的特征函数的返回值流经一个条件语句时,根据定义的条件语句中的跳转位置,进入指定的跳转分支,忽略所述条件语句中的其他分支。
2.根据权利要求1所述的方法,其特征在于,获取与所述漏洞特征语句对应的分支裁剪条件包括:
从预先配置的漏洞配置文件中,读取所述漏洞特征语句的特征函数;
在从所述反编译语句中查找到所述漏洞特征语句的特征函数的情况下,跟踪所述特征函数的返回值;
当所述返回值流经到条件语句时,从所述漏洞配置文件中读取所述条件语句的分支裁剪条件。
3.根据权利要求2所述的方法,其特征在于,在所述分支裁剪条件所指示的跳转分支的路径中查找漏洞的同时,所述方法还包括:
将所述条件语句的除所述跳转分支之外的其他分支标记为无效分支。
4.根据权利要求1所述的方法,其特征在于,在进入漏洞查找状态之前,所述方法还包括:
逐条读取所述控制流图中的反编译语句;
在读取到的反编译语句中存在预先获取的漏洞特征的情况下,确定所述反编译语句中存在所述漏洞特征语句。
5.根据权利要求1至4中任意一项所述的方法,其特征在于,在获取与所述漏洞特征语句对应的分支裁剪条件之前,所述方法还包括:
在漏洞配置文件中配置所述漏洞特征语句的分支裁剪条件,
其中,所述分支裁剪条件中记录有所述漏洞特征语句的特征函数、以及所述特征函数的返回值的条件语句的跳转分支。
6.根据权利要求1至4中任意一项所述的方法,其特征在于,获取被检测程序的控制流图包括:
对所述被检测程序进行反编译,得到反编译文件,其中,所述反编译文件包括所述反编译语句;
保存所述反编译语句的函数和指令间的调用关系,得到所述被检测程序的控制流图。
7.一种应用程序的漏洞检测装置,其特征在于,包括:
第一获取模块,用于获取被检测程序的控制流图,其中,所述控制流图中至少记录有所述被检测程序的反编译语句;
处理模块,用于在所述反编译语句中存在漏洞特征语句的情况下,进入漏洞查找状态;
第二获取模块,用于在所述漏洞查找状态中,获取与所述漏洞特征语句对应的分支裁剪条件,其中,所述分支裁剪条件用于指示进行漏洞查找的跳转分支;
查找模块,用于在所述分支裁剪条件所指示的跳转分支的路径中查找漏洞;
其中,所述漏洞特征语句指的是针对不同漏洞预先定义的表示漏洞特征的特征语句,所述漏洞特征语句至少包括所表示的漏洞的特征函数、以及特征函数的返回值;
当所述分支裁剪条件中的特征函数的返回值流经一个条件语句时,根据定义的条件语句中的跳转位置,进入指定的跳转分支,忽略所述条件语句中的其他分支。
8.根据权利要求7所述的装置,其特征在于,所述第二获取模块包括:
第一读取子模块,用于从预先配置的漏洞配置文件中,读取所述漏洞特征语句的特征函数;
跟踪子模块,用于在从所述反编译语句中查找到所述漏洞特征语句的特征函数的情况下,跟踪所述特征函数的返回值;
第二读取子模块,用于当所述返回值流经到条件语句时,从所述漏洞配置文件中读取所述条件语句的分支裁剪条件。
9.根据权利要求8所述的装置,其特征在于,所述装置还包括:
标记模块,用于在所述分支裁剪条件所指示的跳转分支的路径中查找漏洞的同时,将所述条件语句的除所述跳转分支之外的其他分支标记为无效分支。
10.根据权利要求7所述的装置,其特征在于,所述装置还包括:
读取模块,用于在进入漏洞查找状态之前,逐条读取所述控制流图中的反编译语句;
确定模块,用于在读取到的反编译语句中存在预先获取的漏洞特征的情况下,确定所述反编译语句中存在所述漏洞特征语句。
11.根据权利要求7至10中任意一项所述的装置,其特征在于,所述装置还包括:
配置模块,用于在获取与所述漏洞特征语句对应的分支裁剪条件之前,在漏洞配置文件中配置所述漏洞特征语句的分支裁剪条件,
其中,所述分支裁剪条件中记录有所述漏洞特征语句的特征函数、以及所述特征函数的返回值的条件语句的跳转分支。
12.根据权利要求7至10中任意一项所述的装置,其特征在于,所述第一获取模块包括:
反编译子模块,用于对所述被检测程序进行反编译,得到反编译文件,其中,所述反编译文件包括所述反编译语句;
保存子模块,用于保存所述反编译语句的函数和指令间的调用关系,得到所述被检测程序的控制流图。
CN201610005155.3A 2016-01-04 2016-01-04 应用程序的漏洞检测方法和装置 Active CN106940775B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610005155.3A CN106940775B (zh) 2016-01-04 2016-01-04 应用程序的漏洞检测方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610005155.3A CN106940775B (zh) 2016-01-04 2016-01-04 应用程序的漏洞检测方法和装置

Publications (2)

Publication Number Publication Date
CN106940775A CN106940775A (zh) 2017-07-11
CN106940775B true CN106940775B (zh) 2020-07-14

Family

ID=59469706

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610005155.3A Active CN106940775B (zh) 2016-01-04 2016-01-04 应用程序的漏洞检测方法和装置

Country Status (1)

Country Link
CN (1) CN106940775B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110427757A (zh) * 2019-08-06 2019-11-08 南方电网科学研究院有限责任公司 一种Android漏洞检测方法、系统及相关装置
CN113221127B (zh) * 2021-07-07 2021-12-14 鹏城实验室 程序的漏洞检测方法、装置、终端设备以及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7617489B2 (en) * 2006-09-15 2009-11-10 Ounce Labs, Inc. Method and system for detecting interprocedural vulnerability by analysis of source code
CN102945347A (zh) * 2012-09-29 2013-02-27 中兴通讯股份有限公司 一种检测Android恶意软件的方法、系统及设备
CN104794401A (zh) * 2015-04-15 2015-07-22 南京大学 一种静态分析辅助的符号执行漏洞检测方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7617489B2 (en) * 2006-09-15 2009-11-10 Ounce Labs, Inc. Method and system for detecting interprocedural vulnerability by analysis of source code
CN102945347A (zh) * 2012-09-29 2013-02-27 中兴通讯股份有限公司 一种检测Android恶意软件的方法、系统及设备
CN104794401A (zh) * 2015-04-15 2015-07-22 南京大学 一种静态分析辅助的符号执行漏洞检测方法

Also Published As

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

Similar Documents

Publication Publication Date Title
US10481964B2 (en) Monitoring activity of software development kits using stack trace analysis
KR101246623B1 (ko) 악성 애플리케이션 진단 장치 및 방법
CN108845930B (zh) 界面操作测试方法和装置、存储介质及电子装置
CN102882886B (zh) 一种呈现访问网站的相关信息的网络终端和方法
US10176327B2 (en) Method and device for preventing application in an operating system from being uninstalled
US20170214704A1 (en) Method and device for feature extraction
CN108874470B (zh) 一种信息处理方法及服务器、计算机存储介质
CN106815135B (zh) 漏洞检测方法及装置
US20170068810A1 (en) Method and apparatus for installing an application program based on an intelligent terminal device
KR20170068814A (ko) 악성 모바일 앱 감지 장치 및 방법
US20150222660A1 (en) Method and apparatus for detecting hidden content of web page
CN106295346B (zh) 一种应用漏洞检测方法、装置及计算设备
KR20150083627A (ko) 액티비티 문자열 분석에 의한 안드로이드 악성코드 검출 방법
CN105204985A (zh) 漏洞检测方法及装置
CN109508546A (zh) 一种基于软件基因的软件同源性分析方法和装置
KR20180079434A (ko) 바이러스 데이터베이스 획득 방법 및 기기, 장비, 서버 그리고 시스템
CN106940775B (zh) 应用程序的漏洞检测方法和装置
CN105515909B (zh) 一种数据采集测试方法和装置
CN110019377B (zh) 动态脱敏方法、装置、设备及介质
CN114462044A (zh) 一种基于污点分析的uefi固件漏洞静态检测方法及装置
KR101767481B1 (ko) 프로그램 분석 장치 및 프로그램 분석 제공 방법
CN110889116A (zh) 一种广告拦截方法、装置及电子设备
CN111538665A (zh) 程序的测试方法和装置、存储介质、电子装置
CN105843740B (zh) 代码编译结果的检测方法和装置
CN111324892A (zh) 生成脚本文件的软件基因和脚本检测的方法、装置及介质

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