CN114417347A - 应用程序的漏洞检测方法、装置、设备、存储介质和程序 - Google Patents
应用程序的漏洞检测方法、装置、设备、存储介质和程序 Download PDFInfo
- Publication number
- CN114417347A CN114417347A CN202111530305.XA CN202111530305A CN114417347A CN 114417347 A CN114417347 A CN 114417347A CN 202111530305 A CN202111530305 A CN 202111530305A CN 114417347 A CN114417347 A CN 114417347A
- Authority
- CN
- China
- Prior art keywords
- file
- vulnerability
- application program
- index
- decompiled
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
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)
- Stored Programmes (AREA)
Abstract
本发明实施例提供一种应用程序的漏洞检测方法、装置、设备、存储介质和程序。该方法包括:从待检测应用程序的安装包中获取可执行文件,并对所述可执行文件进行反编译处理,得到反编译文件;获取所述反编译文件中的多个元素,并基于多个所述元素在所述反编译文件中的位置建立索引表,以及基于多个所述元素之间的关系建立关联关系表;根据所述索引表和关联关系表,生成以目标元素为起始节点的第一抽象语法树;根据预设的多组检测规则以及所述第一抽象语法树的各个节点之间的关系,确定所述应用程序中是否存在漏洞。上述方案中通过反编译文件、索引和关联关系表以及得到的抽象语法树,易于对应用程序进行漏洞检测,漏洞检测的效率较高。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种应用程序的漏洞检测方法、装置、设备、存储介质和程序。
背景技术
随着安卓(Android)平台的迅猛发展,安卓应用程序的数量一直处于快速增长中,但是随之增长的还有安卓应用程序所产生的漏洞。所有的安卓应用程序的漏洞都存在被攻击者潜在利用的可能,因此更全面的了解漏洞,从而发现漏洞并修复它,是避免软件遭受攻击的有效方法。
目前,漏洞检测主要通过逆向工具将安卓应用程序的安装包中的可执行代码转化为类汇编代码,之后基于类汇编代码检测是否存在有安全漏洞。但通过逆向工具获取得到的类汇编等类反编译代码,不容易理解,基于该类反编译代码较难检测到安全漏洞。
发明内容
针对现有技术中的问题,本发明实施例提供一种应用程序的漏洞检测方法、装置、设备、存储介质和程序。
具体地,本发明实施例提供了以下技术方案:
第一方面,本发明实施例提供了一种应用程序的漏洞检测方法,包括:
从待检测应用程序的安装包中获取可执行文件,并对所述可执行文件进行反编译处理,得到反编译文件;
获取所述反编译文件中的多个元素,并基于多个所述元素在所述反编译文件中的位置建立索引表,以及基于多个所述元素之间的关系建立关联关系表;
根据所述索引表和关联关系表,生成以目标元素为起始节点的第一抽象语法树;
根据预设的多组检测规则以及所述第一抽象语法树的各个节点之间的关系,确定所述应用程序中是否存在漏洞。
可选地,若所述反编译文件的数量为多个,所述根据所述索引表和关联关系表,生成以目标元素为起始节点的第一抽象语法树之前,还包括:
基于多个所述反编译文件中的多个元素、所述索引表和所述关联关系表,生成各个所述反编译文件对应的第二抽象语法树;
对多个所述第二抽象语法树进行合并和修复处理,并对所述索引表和关联关系表进行更新,得到更新后的索引表和关联关系表。
可选地,所述得到反编译文件之后,还包括:
确定所述可执行文件中至少一个索引区各自对应的数据是否存在非法数据;
若至少一个所述索引区对应的数据存在非法数据,则将各个所述索引区对应的数据进行更新;
对所述索引区中的索引以及所述可执行文件的文件头进行更新。
可选地,所述将各个所述索引区对应的数据进行更新,包括:
针对任一所述索引区,所述索引区对应的数据存在命名冲突的非法数据,则将所述命名冲突的非法数据的命名进行更新。
可选地,所述生成以目标元素为起始节点的第一抽象语法树之前,还包括:
根据所述索引表,确定所述反编译文件中进行漏洞检测的入口位置;
将所述入口位置的元素,作为所述目标元素。
可选地,所述确定所述应用程序中是否存在漏洞之后,还包括:
根据所述索引表确定漏洞对应的索引位置,基于所述索引位置从所述反编译文件中获取所述漏洞对应的代码;
生成所述代码和漏洞的说明信息并存储。
可选地,所述方法还包括:
根据所述反编译文件对应的包名,确定所述反编译文件中的代码是否为第三方软件开发工具包SDK的代码。
第二方面,本发明实施例还提供了一种应用程序的漏洞检测装置,包括:
获取模块,用于从待检测应用程序的安装包中获取可执行文件;
处理模块,用于对所述可执行文件进行反编译处理,得到反编译文件;
所述获取模块,还用于获取所述反编译文件中的多个元素,并基于多个所述元素在所述反编译文件中的位置建立索引表,以及基于多个所述元素之间的关系建立关联关系表;
所述处理模块,还用于根据所述索引表和关联关系表,生成以目标元素为起始节点的第一抽象语法树;根据预设的多组检测规则以及所述第一抽象语法树的各个节点之间的关系,确定所述应用程序中是否存在漏洞。
第三方面,本发明实施例还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如第一方面所述应用程序的漏洞检测方法的步骤。
第四方面,本发明实施例还提供了一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面所述应用程序的漏洞检测方法的步骤。
第五方面,本发明实施例还提供了一种计算机程序产品,其上存储有可执行指令,该指令被处理器执行时使处理器实现第一方面所述应用程序的漏洞检测方法的步骤。
本发明实施例提供的应用程序的漏洞检测方法、装置、设备、存储介质和程序,对应用程序的可执行文件进行反编译处理,得到反编译文件,进一步,基于反编译文件中的多个元素在反编译文件中的位置建立索引表,以及基于多个元素之间的关系建立关联关系表;根据索引表和关联关系表,生成以目标元素为起始节点的第一抽象语法树,根据多组检测规则以及第一抽象语法树的各个节点之间的关系,对漏洞进行检测,确定应用程序中是否存在漏洞,即可以确定该应用程序的可执行文件中是否存在漏洞,由于是对反编译的源代码进行漏洞检测,漏洞检测的准确性较高,而且基于索引表可以准确且快速的获知漏洞所在的代码位置,从而易于对漏洞问题进行定位,问题定位和修复的效率较高。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明提供的应用程序的漏洞检测方法的一实施例的流程示意图;
图2为本发明提供的应用程序的漏洞检测方法的另一实施例的流程示意图之一;
图3为本发明提供的应用程序的漏洞检测方法的另一实施例的流程示意图之二;
图4为本发明提供的应用程序的漏洞检测方法的另一实施例的流程示意图之三;
图5为本发明提供的应用程序的漏洞检测方法的另一实施例的流程示意图之四;
图6是本发明提供的应用程序的漏洞检测装置一实施例的结构示意图;
图7是本发明提供的电子设备一实施例的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例的方法可以应用于对应用程序的安全漏洞进行检测的场景中,应用程序例如以安卓应用程序为例进行说明。
本发明实施例的应用程序的漏洞检测方法,对可执行文件进行反编译处理,得到反编译文件,进一步,基于反编译文件中的多个元素在反编译文件中的位置建立索引表,以及基于多个元素之间的关系建立关联关系表;根据索引表和关联关系表,生成以目标元素为起始节点的第一抽象语法树,根据多组检测规则以及第一抽象语法树的各个节点之间的关系,对漏洞进行检测,确定应用程序中是否存在漏洞,即可以确定该应用程序的可执行文件中是否存在漏洞,由于是对反编译的源代码进行漏洞检测,漏洞检测的准确性较高,而且基于索引表可以准确且快速的获知漏洞所在的代码位置,从而易于对漏洞问题进行定位,问题定位和修复的效率较高。
下面结合图1-图5以具体的实施例对本发明的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
图1是本发明实施例提供的应用程序的漏洞检测方法一实施例的流程示意图。如图1、图2所示,本发明实施例提供的方法,包括:
步骤101、从待检测应用程序的安装包中获取一个或多个可执行文件,并对可执行文件进行反编译处理,得到反编译文件;
其中,安装包是安卓操作系统使用的一种应用程序包文件格式,用于分发和安装移动应用及中间件。通常以.apk作为文件后缀名。
接收到应用程序的安装包之后首先对安装包进行解压操作。一般APK文件是通过ZIP压缩技术进行打包的文件集合,可以通过ZIP解压工具进行解压。
对解压得到的文件进行遍历,检查解压得到的文件中存在的可执行文件。可执行文件可以通过检查文件的后缀名和文件头进行确认。安卓应用程序的安装包中的可执行文件通常使用.dex作为文件后缀名。文件头例如包括了一些基本的校验、大小属性,还有数据结构体的大小和偏移,具有目录一样的作用。
反编译处理,是指从低级或中间级语言到高级语言的解析。
其中,一个可执行文件进行反编译之后可以得到一个或多个反编译文件。
由于应用程序的安装包比较易于获取到,因此本发明实施例的方法可以解决在大多数检测场景中无法直接获取到应用源代码的问题。
可选地,可以将所有得到的反编译文件按照文件目录层级结构复制到同一个文件夹下,从而保证进行过程间分析时可以对所有的反编译文件的代码进行关联。
进一步,在获取到可执行文件的反编译文件后,可以记录反编译文件和可执行文件的对应关系。
步骤102、获取反编译文件中的多个元素,并基于多个元素在反编译文件中的位置建立索引表,以及基于多个元素之间的关系建立关联关系表;
具体的,反编译文件中的代码具有多个元素,元素例如包括:函数、变量、类、常量和字符串等。
对所有的反编译文件的代码进行中间表示生成。中间表示生成主要是通过对反编译代码进行分析,提取反编译代码中的元素,根据反编译文件的不同组成部分的元素的索引位置,以及关联关系,生成对应的索引表和关联关系表。
其中,索引表中包括各个元素在反编译文件中的索引位置;关联关系表用于表示反编译文件中多个元素之间的关系。
步骤103、根据索引表和关联关系表,生成以目标元素为起始节点的第一抽象语法树;
具体的,首先可以确定出目标元素,即进行漏洞检测的起始点,将该目标元素作为该第一抽象语法树的起始节点,通过索引表和关联关系表,生成反编译文件对应的第一抽象语法树。
其中,第一抽象语法树可以通过邻接表的方式构造,邻接表就是通过链表或者利用数组模拟链表的方式将图的相连接关系表示的一种方法,存储方法跟树的孩子链表示法相类似,是一种顺序分配和链式分配相结合的存储结构。例如这个表头结点所对应的顶点存在相邻顶点,则把相邻顶点依次存放于表头结点所指向的单向链表中。
步骤104、根据预设的多组检测规则以及第一抽象语法树的各个节点之间的关系,确定应用程序中是否存在漏洞。
具体的,可以基于预设的多组检测规则,以及第一抽象语法树的各个节点之间的关系,判断应用程序中是否存在有安全漏洞,即获取到检测结果,检测结果表示是否存在漏洞,以及漏洞的信息。
其中,预设的多组检测规则可以以安全漏洞检测插件的形式对漏洞进行检测。
本实施例的方法,对可执行文件进行反编译处理,得到反编译文件,进一步,基于反编译文件中的多个元素在反编译文件中的位置建立索引表,以及基于多个元素之间的关系建立关联关系表;根据索引表和关联关系表,生成以目标元素为起始节点的第一抽象语法树,根据多组检测规则以及第一抽象语法树的各个节点之间的关系,对漏洞进行检测,确定应用程序中是否存在漏洞,即可以确定该应用程序的可执行文件中是否存在漏洞,由于是对反编译的源代码进行漏洞检测,漏洞检测的准确性较高,而且基于索引表可以准确且快速的获知漏洞所在的代码位置,从而易于对漏洞问题进行定位,问题定位和修复的效率较高。
可选地,可以通过如下步骤确定目标元素:
根据所述索引表,确定所述反编译文件中进行漏洞检测的入口位置;
将所述入口位置的元素,作为所述目标元素。
具体的,如图3所示,在生成的索引表中查询是否有安全漏洞检测插件对应的检测入口点,即进行漏洞检测的入口位置。如果存在检测入口点,则依据存储的索引表中的索引信息和关联关系表,生成以该入口位置的目标元素为起始节点的第一抽象语法树,并检测应用程序中是否存在安全漏洞。
可选地,步骤104之后还可以进行如下操作:
根据索引表确定漏洞对应的索引位置,基于索引位置从反编译文件中获取漏洞对应的代码;
生成代码和漏洞的说明信息并存储。
具体的,如图3所示,若存在漏洞,则从索引表中查找漏洞对应的索引位置,进而根据该索引位置从反编译文件中获取漏洞对应的代码;
生成代码和漏洞的说明信息并存储。
其中,说明信息可以以文件的形式存储,以方便安全人员进行确认和开发人员对漏洞进行修复。
上述实施方式中,基于反编译后的高级语言检测发现的漏洞问题,通过索引表易于让安全分析人员和应用开发人员与应用程序的源代码进行对应和检查漏洞,快速定位到漏洞问题对应的代码,并进行分析,便于漏洞修复。而且基于反编译后的高级代码,易于安全人员进行检测结果的复核,确认检测发现的问题是否真实存在,也易于安全人员以此为基础进一步发现更多的问题。
可选地,根据反编译文件对应的包名,确定反编译文件中的代码是否为第三方软件开发工具包SDK的代码。
具体的,对于反编译得到的代码,根据其所在的文件对应的包名,区分得到的反编译代码是属于已知的第三方SDK还是该应用程序的自主开发的代码。可以方便定位发现的安全漏洞问题是来自于应用程序自身的代码还是第三方SDK。
例如,反编译文件的首行代码中具有包名,“package com.pangu.codemeter”,该包名与该反编译文件的文件路径对应,例如文件路径为:**/com/pangu/codemeter/***.java。基于该文件路径可以判断出该反编译文件中的代码是否为第三方软件开发工具包SDK的代码。
上述实施方式中,方便定位发现的安全漏洞问题是来自于应用程序自身的代码还是第三方SDK。
在一实施例中,步骤102之后还可以进行如下操作:
基于多个反编译文件中的多个元素、索引表和关联关系表,生成各个反编译文件对应的第二抽象语法树;
对多个第二抽象语法树进行合并和修复处理,并对索引表和关联关系表进行更新,得到更新后的索引表和关联关系表。
具体的,如图4所示,基于多个反编译文件中的多个元素、索引表和关联关系表,生成各个反编译文件对应的第二抽象语法树,对多个第二抽象语法树进行合并和修复处理,并对索引表和关联关系表进行更新,得到更新后的索引表和关联关系表。
整个中间表示可以分为三个阶段:修复阶段、解析阶段和记录阶段。修复阶段是对反编译文件的第二抽象语法树进行解析和合并,对于无法合并的抽象语法树片段需要进行修复还原其缺失的节点,使得抽象语法树可以完成合并;解析阶段是根据生成的反编译文件对应的抽象语法树,将各可执行文件中的元素进行确认,对冲突的元素进行更新,转化为中间表示数据结构,即生成新的索引表和关联关系表;记录阶段是将中间表示数据结构以文件的方式进行存储,方便后续在漏洞检测时进行快速查询。
例如,可执行文件中反编译得到的反编译文件1和反编译文件2中都有变量C,则对变量C重新进行定义,反编译文件1中变量C可以改成C1,反编译文件2中变量C可以改成C2。
上述实施方式中,基于多个反编译文件中的多个元素、索引表和关联关系表,生成各个反编译文件对应的第二抽象语法树;对多个第二抽象语法树进行合并和修复处理,并对索引表和关联关系表进行更新,在漏洞检测时可以应用更新后的索引表和关联关系表,生成第一抽象语法树,从而使得漏洞检测结果更加准确。
在一实施例中,在反编译之前,还可以对可执行文件进行修复,具体可以采用如下操作:
确定可执行文件中至少一个索引区各自对应的数据是否存在非法数据;
若至少一个索引区对应的数据存在非法数据,则将各个索引区对应的数据进行更新;
对索引区中的索引以及可执行文件的文件头进行更新。
具体的,由于安卓应用程序的文件在编译的时候,编译器会根据安卓操作系统的特性进行优化和编译,会对某些索引进行优化和重命名,来提高可执行文件在安卓系统中的执行效率。但是这些优化会影响反编译工具,使部分可执行文件的代码反编译失败。因此本发明实施例中为了避免反编译工具的报错,需要对解压得到的可执行文件进行修复。具体可以对可执行文件的各索引区的内容进行检查,并确认对应的数据内容,例如包括字符串内容,将不合法的数据进行修改。
可执行文件的结构例如表1所示:
表1
由于更新了索引区对应的数据,因此需要对索引区中的索引进行更新,而且由于文件头中包括了一些基本的校验、大小属性,还有数据结构体的大小和偏移等,因此数据更新之后也需要对文件头进行更新。
可选地,针对任一索引区,确定索引区对应的数据中是否存在命名冲突的非法数据;
若索引区对应的数据存在命名冲突的非法数据,则将命名冲突的非法数据的命名进行更新。
具体的,如图5所示,在对可执行文件进行修复时,读取可执行文件的文件头和索引区内容,并获取索引对应的数据内容;进一步,判断各类名、属性名、方法名和包名是否存在命名冲突,若存在命名冲突,则更新命名避免冲突,进而更新文件头和索引区内容,并将更新后的可执行文件进行存储。
上述实施方式中,对可执行文件进行修复,尤其是对在命名冲突的非法数据的命名进行更新,使得反编译得到的代码更加准确,进而使得漏洞检测结果更加准确。
下面对本发明提供的应用程序的漏洞检测装置进行描述,下文描述的应用程序的漏洞检测装置与上文描述的应用程序的漏洞检测方法可相互对应参照。
图6是本发明提供的应用程序的漏洞检测装置一实施例的结构示意图。
如图6所示,本实施例提供的应用程序的漏洞检测装置,包括:
获取模块210,用于从待检测应用程序的安装包中获取可执行文件;
处理模块220,用于对所述可执行文件进行反编译处理,得到反编译文件;
所述获取模块210,还用于获取所述反编译文件中的多个元素,并基于多个所述元素在所述反编译文件中的位置建立索引表,以及基于多个所述元素之间的关系建立关联关系表;
所述处理模块220,还用于根据所述索引表和关联关系表,生成以目标元素为起始节点的第一抽象语法树;根据预设的多组检测规则以及所述第一抽象语法树的各个节点之间的关系,确定所述应用程序中是否存在漏洞。
可选地,若所述反编译文件的数量为多个,所述处理模块220,具体用于:
基于多个所述反编译文件中的多个元素、所述索引表和所述关联关系表,生成各个所述反编译文件对应的第二抽象语法树;
对多个所述第二抽象语法树进行合并和修复处理,并对所述索引表和关联关系表进行更新,得到更新后的索引表和关联关系表。
可选地,所述处理模块220,具体用于:
确定所述可执行文件中至少一个索引区各自对应的数据是否存在非法数据;
若至少一个所述索引区对应的数据存在非法数据,则将各个所述索引区对应的数据进行更新;
对所述索引区中的索引以及所述可执行文件的文件头进行更新。
可选地,所述处理模块220,具体用于:
针对任一所述索引区,所述索引区对应的数据存在命名冲突的非法数据,则将所述命名冲突的非法数据的命名进行更新。
可选地,所述处理模块220,还用于:
根据所述索引表,确定所述反编译文件中进行漏洞检测的入口位置;
将所述入口位置的元素,作为所述目标元素。
可选地,所述处理模块220,还用于:
根据所述索引表确定漏洞对应的索引位置,基于所述索引位置从所述反编译文件中获取所述漏洞对应的代码;
生成所述代码和漏洞的说明信息并存储。
可选地,所述处理模块220,还用于:
根据所述反编译文件对应的包名,确定所述反编译文件中的代码是否为第三方软件开发工具包SDK的代码。
本发明实施例的装置,其用于执行前述任一方法实施例中的方法,其实现原理和技术效果类似,此次不再赘述。
举个例子如下:
图7示例了一种电子设备的实体结构示意图,如图7所示,该电子设备可以包括:处理器(processor)810、通信接口(Communications Interface)820、存储器(memory)830和通信总线840,其中,处理器810,通信接口820,存储器830通过通信总线840完成相互间的通信。处理器810可以调用存储器830中的逻辑指令,以执行如下方法:从待检测应用的安装包中获取可执行文件,并对所述可执行文件进行反编译处理,得到反编译文件;获取所述反编译文件中的多个元素,并基于多个所述元素在所述反编译文件中的位置建立索引表,以及基于多个所述元素之间的关系建立关联关系表;根据所述索引表和关联关系表,生成以目标元素为起始节点的第一抽象语法树;确定所述第一抽象语法树的各个节点是否存在漏洞。
此外,上述的存储器830中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的应用程序的漏洞检测方法包括:从待检测应用的安装包中获取可执行文件,并对所述可执行文件进行反编译处理,得到反编译文件;获取所述反编译文件中的多个元素,并基于多个所述元素在所述反编译文件中的位置建立索引表,以及基于多个所述元素之间的关系建立关联关系表;根据所述索引表和关联关系表,生成以目标元素为起始节点的第一抽象语法树;确定所述第一抽象语法树的各个节点是否存在漏洞。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (11)
1.一种应用程序的漏洞检测方法,其特征在于,包括:
从待检测应用程序的安装包中获取可执行文件,并对所述可执行文件进行反编译处理,得到反编译文件;
获取所述反编译文件中的多个元素,并基于多个所述元素在所述反编译文件中的位置建立索引表,以及基于多个所述元素之间的关系建立关联关系表;
根据所述索引表和关联关系表,生成以目标元素为起始节点的第一抽象语法树;
根据预设的多组检测规则以及所述第一抽象语法树的各个节点之间的关系,确定所述应用程序中是否存在漏洞。
2.根据权利要求1所述的应用程序的漏洞检测方法,其特征在于,若所述反编译文件的数量为多个,所述根据所述索引表和关联关系表,生成以目标元素为起始节点的第一抽象语法树之前,还包括:
基于多个所述反编译文件中的多个元素、所述索引表和所述关联关系表,生成各个所述反编译文件对应的第二抽象语法树;
对多个所述第二抽象语法树进行合并和修复处理,并对所述索引表和关联关系表进行更新,得到更新后的索引表和关联关系表。
3.根据权利要求1或2所述的应用程序的漏洞检测方法,其特征在于,所述得到反编译文件之后,还包括:
确定所述可执行文件中至少一个索引区各自对应的数据是否存在非法数据;
若至少一个所述索引区对应的数据存在非法数据,则将各个所述索引区对应的数据进行更新;
对所述索引区中的索引以及所述可执行文件的文件头进行更新。
4.根据权利要求3所述的应用程序的漏洞检测方法,其特征在于,所述将各个所述索引区对应的数据进行更新,包括:
针对任一所述索引区,所述索引区对应的数据存在命名冲突的非法数据,则将所述命名冲突的非法数据的命名进行更新。
5.根据权利要求1或2所述的应用程序的漏洞检测方法,其特征在于,所述生成以目标元素为起始节点的第一抽象语法树之前,还包括:
根据所述索引表,确定所述反编译文件中进行漏洞检测的入口位置;
将所述入口位置的元素,作为所述目标元素。
6.根据权利要求1或2所述的应用程序的漏洞检测方法,其特征在于,所述确定所述应用程序中是否存在漏洞之后,还包括:
根据所述索引表确定漏洞对应的索引位置,基于所述索引位置从所述反编译文件中获取所述漏洞对应的代码;
生成所述代码和漏洞的说明信息并存储。
7.根据权利要求1或2所述的应用程序的漏洞检测方法,其特征在于,所述方法还包括:
根据所述反编译文件对应的包名,确定所述反编译文件中的代码是否为第三方软件开发工具包SDK的代码。
8.一种应用程序的漏洞检测装置,其特征在于,包括:
获取模块,用于从待检测应用程序的安装包中获取可执行文件;
处理模块,用于对所述可执行文件进行反编译处理,得到反编译文件;
所述获取模块,还用于获取所述反编译文件中的多个元素,并基于多个所述元素在所述反编译文件中的位置建立索引表,以及基于多个所述元素之间的关系建立关联关系表;
所述处理模块,还用于根据所述索引表和关联关系表,生成以目标元素为起始节点的第一抽象语法树;根据预设的多组检测规则以及所述第一抽象语法树的各个节点之间的关系,确定所述应用程序中是否存在漏洞。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任一项所述应用程序的漏洞检测方法的步骤。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至7任一项所述应用程序的漏洞检测方法的步骤。
11.一种计算机程序产品,其上存储有可执行指令,其特征在于,该指令被处理器执行时使处理器实现如权利要求1至7中任一项所述应用程序的漏洞检测方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111530305.XA CN114417347A (zh) | 2021-12-14 | 2021-12-14 | 应用程序的漏洞检测方法、装置、设备、存储介质和程序 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111530305.XA CN114417347A (zh) | 2021-12-14 | 2021-12-14 | 应用程序的漏洞检测方法、装置、设备、存储介质和程序 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114417347A true CN114417347A (zh) | 2022-04-29 |
Family
ID=81268326
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111530305.XA Pending CN114417347A (zh) | 2021-12-14 | 2021-12-14 | 应用程序的漏洞检测方法、装置、设备、存储介质和程序 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114417347A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116049835A (zh) * | 2023-03-08 | 2023-05-02 | 中汽智联技术有限公司 | 汽车固件的安全漏洞检测方法、设备和存储介质 |
-
2021
- 2021-12-14 CN CN202111530305.XA patent/CN114417347A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116049835A (zh) * | 2023-03-08 | 2023-05-02 | 中汽智联技术有限公司 | 汽车固件的安全漏洞检测方法、设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CA2871470C (en) | Method and system for matching unknown software component to known software component | |
CN104123493B (zh) | 应用程序的安全性检测方法和装置 | |
WO2017049800A1 (zh) | 检测应用漏洞代码的方法和装置 | |
US9928042B2 (en) | Automatic classification of compilers | |
US20040205411A1 (en) | Method of detecting malicious scripts using code insertion technique | |
CN111967017B (zh) | 生成依赖关系的方法、装置、终端设备及存储介质 | |
KR102011725B1 (ko) | 악성코드 검출을 위한 화이트리스트 구축 방법 및 이를 수행하기 위한 기록매체 및 장치 | |
US20230252135A1 (en) | Behavioral threat detection definition and compilation | |
CN113835713B (zh) | 源码包下载方法、装置、计算机设备和存储介质 | |
CN114386032A (zh) | 电力物联网设备的固件检测系统及方法 | |
CN112612502A (zh) | 补丁生成方法、装置、设备及存储介质 | |
CN104715199A (zh) | 一种病毒apk的识别方法及装置 | |
CN113312618A (zh) | 程序漏洞检测方法、装置、电子设备及介质 | |
CN112559344A (zh) | 远程mock测试方法及系统 | |
KR20200096766A (ko) | 오픈소스 소프트웨어의 라이선스를 검증하는 방법 및 시스템 | |
CN114417347A (zh) | 应用程序的漏洞检测方法、装置、设备、存储介质和程序 | |
CN116324773A (zh) | 用于保护智能合约免受攻击的方法和装置 | |
EP3147781A1 (en) | Wrapper calls identification | |
Feichtner et al. | Obfuscation-resilient code recognition in Android apps | |
CN113626823B (zh) | 一种基于可达性分析的组件间交互威胁检测方法及装置 | |
US10789067B2 (en) | System and method for identifying open source usage | |
Liu et al. | Reunify: A step towards whole program analysis for react native android apps | |
KR101600178B1 (ko) | 불법 복제 애플리케이션 탐지 방법 및 장치 | |
Cam et al. | Detect repackaged android applications by using representative graphs | |
US20220398308A1 (en) | Methods and Systems for Securing a Build Execution Pipeline |
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 |