CN116541847A - 一种应用程序的安全检测方法及装置 - Google Patents
一种应用程序的安全检测方法及装置 Download PDFInfo
- Publication number
- CN116541847A CN116541847A CN202310484128.9A CN202310484128A CN116541847A CN 116541847 A CN116541847 A CN 116541847A CN 202310484128 A CN202310484128 A CN 202310484128A CN 116541847 A CN116541847 A CN 116541847A
- Authority
- CN
- China
- Prior art keywords
- library file
- library
- application program
- detected
- identification information
- 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
- 238000001514 detection method Methods 0.000 title claims abstract description 166
- 238000011161 development Methods 0.000 claims abstract description 65
- 238000000034 method Methods 0.000 claims abstract description 40
- 238000009434 installation Methods 0.000 claims description 53
- 230000006870 function Effects 0.000 claims description 42
- 238000012216 screening Methods 0.000 claims description 22
- 238000012795 verification Methods 0.000 claims description 20
- 230000008569 process Effects 0.000 claims description 9
- 238000004590 computer program Methods 0.000 claims description 8
- 239000000243 solution Substances 0.000 description 10
- 238000002347 injection Methods 0.000 description 9
- 239000007924 injection Substances 0.000 description 9
- 238000012360 testing method Methods 0.000 description 9
- 230000006399 behavior Effects 0.000 description 5
- 230000003068 static effect Effects 0.000 description 5
- 238000013475 authorization Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000002452 interceptive effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000004888 barrier function Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000007789 sealing Methods 0.000 description 1
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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test or assess software
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
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
技术领域
本公开涉及计算机技术领域,具体而言,涉及一种应用程序的安全检测方法及装置。
背景技术
在应用程序发布上线之前,需要对应用程序进行安全检测,检测应用程序是否存在安全风险,在检测到风险时,需要对风险进行定位,得到风险的来源,开发人员才能够对风险进行修复。
应用程序通常会使用一些开发包(软件开发工具包,Software Development Kit,SDK),这些开发包会对应用程序的安全检测带来阻碍。
发明内容
本公开实施例至少提供一种应用程序的安全检测方法及装置。
第一方面,本公开实施例提供了一种应用程序的安全检测方法,包括:
获取待检测应用程序中的可执行文件对应的源代码;
基于所述源代码,检测得到所述待检测应用程序对应的第一库文件列表;所述第一库文件列表中包含多个第一库文件的标识信息,所述第一库文件为待校验的开发包的库文件;
基于所述待检测应用程序在运行时生成的库文件加载信息,对所述第一库文件列表进行校验,并根据校验结果,对所述第一库文件列表进行更新,得到所述待检测应用程序的第二库文件列表;
基于所述第二库文件列表,对所述待检测应用程序进行安全检测。
一种可选的实施方式中,所述基于所述源代码,检测得到所述待检测应用程序对应的第一库文件列表,包括:
基于所述待检测应用程序的安装包的信息描述文件,获取所述待检测应用程序对应的多个库文件的标识信息;
基于获取到的所述多个库文件的标识信息,从所述源代码中查找是否存在调用所述库文件的代码,若存在,则将该库文件作为第三库文件;
基于预先配置的开发包清单,以及各所述第三库文件对应的第一动态库文件的标识信息,对各所述第三库文件进行筛选,得到所述第一库文件列表中的各个第一库文件。
一种可选的实施方式中,基于预先配置的开发包清单,以及各所述第三库文件对应的第一动态库文件的标识信息,对各所述第三库文件进行筛选之前,还包括:
从所述待检测应用程序的安装包的库文件路径获取所述待检测应用程序对应的多个第二动态库文件的标识信息;
根据所述源代码中调用所述第三库文件的代码的上下文信息,确定所述第三库文件对应的第二动态库文件的标识信息;
所述基于预先配置的开发包清单,以及各所述第三库文件对应的第一动态库文件的标识信息,对各所述第三库文件进行筛选,得到所述第一库文件列表中的各个第一库文件,包括:
基于所述第一动态库文件的标识信息和各所述第三库文件对应的第二动态库文件的标识信息,从各所述第三库文件中筛选得到存在与所述第二动态库文件的标识信息相同的目标第一动态库文件;
其中,所述第一库文件列表中包括所述目标第一动态库文件对应的第三库文件,以及位于所述开发包清单中的库文件。
一种可选的实施方式中,所述基于所述待检测应用程序在运行时生成的库文件加载信息,对所述第一库文件列表进行校验,并根据校验结果,对所述第一库文件列表进行更新,得到所述待检测应用程序的第二库文件列表,包括:
基于所述库文件加载信息中的调用栈信息及动态库参数信息,确定所述待检测应用程序在运行时所加载动态库的标识信息,以及在所述待检测应用程序运行时,所加载的动态库文件对应的第四库文件的标识信息;
基于所述第四库文件的标识信息,对所述第一库文件列表进行校验,并根据校验结果,对所述第一库文件列表进行更新,得到所述待检测应用程序的第二库文件列表。
一种可选的实施方式中,所述基于所述第四库文件的标识信息,对所述第一库文件列表进行校验,并根据校验结果,对所述第一库文件列表进行更新,得到所述待检测应用程序的第二库文件列表,包括:
针对任一所述第一库文件,若存在任一第四库文件的标识信息与所述第一库文件的标识信息相同,则将所述第一库文件作为所述第二库文件;
若不存在第四库文件的标识信息与所述第一库文件的标识信息相同,且在所述第一库文件对应的目标源代码中查询到对应的动态库文件的标识信息,则将所述第一库文件作为所述第二库文件;
针对任一所述第四库文件,若不存在第一库文件的标识信息与所述第四库文件的标识信息相同,则将所述第四库文件作为所述第二库文件。
一种可选的实施方式中,通过以下步骤获取所述待检测应用程序在运行时生成的库文件加载信息:
确定所述待检测应用程序对应的库文件加载函数,并生成针对所述库文件加载函数的检测代码;
将所述检测代码注入至所述待检测应用程序的安装包中,并基于注入检测代码后的安装包运行所述待检测应用程序;
基于注入的所述检测代码,获取所述待检测应用程序在运行时生成的库文件加载信息。
一种可选的实施方式中,所述基于所述第二库文件列表,对所述待检测应用程序进行安全检测,包括:
在所述待检测应用程序的安装包注入安全检测代码,并基于注入所述安全检测代码的安装包,运行所述待检测应用程序;
基于所述安全检测代码,生成所述待检测应用程序的安全检测结果;
基于所述第二库文件列表,对所述安全检测结果中指示的安全风险进行定位。
第二方面,本公开实施例还提供一种应用程序的安全检测装置,包括:
获取模块,用于获取待检测应用程序中的可执行文件对应的源代码;
第一检测模块,用于基于所述源代码,检测得到所述待检测应用程序对应的第一库文件列表;所述第一库文件列表中包含多个第一库文件的标识信息,所述第一库文件为待校验的开发包的库文件;
更新模块,用于基于所述待检测应用程序在运行时生成的库文件加载信息,对所述第一库文件列表进行校验,并根据校验结果,对所述第一库文件列表进行更新,得到所述待检测应用程序的第二库文件列表;
第二检测模块,用于基于所述第二库文件列表,对所述待检测应用程序进行安全检测。
一种可选的实施方式中,所述第一检测模块具体用于:
基于所述待检测应用程序的安装包的信息描述文件,获取所述待检测应用程序对应的多个库文件的标识信息;
基于获取到的所述多个库文件的标识信息,从所述源代码中查找是否存在调用所述库文件的代码,若存在,则将该库文件作为第三库文件;
基于预先配置的开发包清单,以及各所述第三库文件对应的第一动态库文件的标识信息,对各所述第三库文件进行筛选,得到所述第一库文件列表中的各个第一库文件。
一种可选的实施方式中,基于预先配置的开发包清单,以及各所述第三库文件对应的第一动态库文件的标识信息,对各所述第三库文件进行筛选之前,所述第一检测模块还用于:
从所述待检测应用程序的安装包的库文件路径获取所述待检测应用程序对应的多个第二动态库文件的标识信息;
根据所述源代码中调用所述第三库文件的代码的上下文信息,确定所述第三库文件对应的第二动态库文件的标识信息;
所述第一检测模块在基于预先配置的开发包清单,以及各所述第三库文件对应的第一动态库文件的标识信息,对各所述第三库文件进行筛选,得到所述第一库文件列表中的各个第一库文件时,用于:
基于所述第一动态库文件的标识信息和各所述第三库文件对应的第二动态库文件的标识信息,从各所述第三库文件中筛选得到存在与所述第二动态库文件的标识信息相同的目标第一动态库文件;
其中,所述第一库文件列表中包括所述目标第一动态库文件对应的第三库文件,以及位于所述开发包清单中的库文件。
一种可选的实施方式中,所述更新模块具体用于:
基于所述库文件加载信息中的调用栈信息及动态库参数信息,确定所述待检测应用程序在运行时所加载动态库的标识信息,以及在所述待检测应用程序运行时,所加载的动态库文件对应的第四库文件的标识信息;
基于所述第四库文件的标识信息,对所述第一库文件列表进行校验,并根据校验结果,对所述第一库文件列表进行更新,得到所述待检测应用程序的第二库文件列表。
一种可选的实施方式中,所述更新模块在基于所述第四库文件的标识信息,对所述第一库文件列表进行校验,并根据校验结果,对所述第一库文件列表进行更新,得到所述待检测应用程序的第二库文件列表时,用于:
针对任一所述第一库文件,若存在任一第四库文件的标识信息与所述第一库文件的标识信息相同,则将所述第一库文件作为所述第二库文件;
若不存在第四库文件的标识信息与所述第一库文件的标识信息相同,且在所述第一库文件对应的目标源代码中查询到对应的动态库文件的标识信息,则将所述第一库文件作为所述第二库文件;
针对任一所述第四库文件,若不存在第一库文件的标识信息与所述第四库文件的标识信息相同,则将所述第四库文件作为所述第二库文件。
一种可选的实施方式中,所述更新模块还用于:
确定所述待检测应用程序对应的库文件加载函数,并生成针对所述库文件加载函数的检测代码;
将所述检测代码注入至所述待检测应用程序的安装包中,并基于注入检测代码后的安装包运行所述待检测应用程序;
基于注入的所述检测代码,获取所述待检测应用程序在运行时生成的库文件加载信息。
一种可选的实施方式中,所述第二检测模块具体用于:
在所述待检测应用程序的安装包注入安全检测代码,并基于注入所述安全检测代码的安装包,运行所述待检测应用程序;
基于所述安全检测代码,生成所述待检测应用程序的安全检测结果;
基于所述第二库文件列表,对所述安全检测结果中指示的安全风险进行定位。
第三方面,本公开可选实现方式还提供一种计算机设备,处理器、存储器,所述存储器存储有所述处理器可执行的机器可读指令,所述处理器用于执行所述存储器中存储的机器可读指令,所述机器可读指令被所述处理器执行时,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
第四方面,本公开可选实现方式还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
关于上述应用程序的安全检测装置、计算机设备、及计算机可读存储介质的效果描述参见上述应用程序的安全检测方法的说明,这里不再赘述。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,而非限制本公开的技术方案。
本公开实施例提供的应用程序的安全检测方法及装置,获取待检测应用程序的可执行文件对应的源代码,然后,利用可执行文件的源代码,检测得到第一库文件列表,其中指示了待校验的多个开发包的第一库文件,从而完成对待检测应用程序所使用的开发包的初步判断,之后,再利用待检测应用程序在运行时生成的库文件加载信息对第一库文件列表进行校验,并根据校验结果对第一库文件列表进行更新得到第二库文件列表,对初步判断结果进行检验及修正,提高库文件列表的精确度,从而在进行安全检测时提供可靠的风险定位。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本公开实施例所提供的应用程序的安全检测方法的流程图;
图2示出了本公开实施例所提供的另一种应用程序的安全检测方法的流程图;
图3示出了本公开实施例所提供的确定第二库文件列表的步骤的流程图;
图4示出了本公开一些实施例所提供的一种应用程序的安全检测装置的示意图;
图5示出了本公开一些实施例所提供的计算机设备的示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
为了保证应用程序的安全性,在应用程序发布上线之前,需要对应用程序进行安全检测,来判断应用程序是否存在风险,以及检测到的风险位于应用程序文件中的位置。应用程序通常会通过调用第三方的开发包来实现一些功能,这些开发包的库文件具有封闭性,无法读取其内部的代码内容,导致在安全检测的过程中,无法对开发包引起的风险进行定位。
基于上述研究,本公开提供了一种应用程序的安全检测方法,能够对应用程序的源代码进行检测,对其所使用的开发包进行初步判断,再利用应用程序在运行时生成的库文件加载信息对初步判断结果进行校验及修正,提高确定应用程序所用开发包的精确度,从而在对应用程序进行安全检测时提供可靠的风险定位。
针对以上方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本公开针对上述问题所提出的解决方案,都应该是发明人在本公开过程中对本公开做出的贡献。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种应用程序的安全检测方法进行详细介绍,本公开实施例所提供的应用程序的安全方法的执行主体一般为具有一定计算能力的计算机设备,该计算机设备例如包括:终端设备或服务器或其它处理设备。在一些可能的实现方式中,该应用程序的安全检测方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
下面以执行主体为终端设备为例对本公开实施例提供的应用程序的安全检测方法加以说明。
参见图1所示,为本公开实施例提供的应用程序的安全检测方法的流程图,所述方法包括步骤S101~S104,其中:
S101、获取待检测应用程序中的可执行文件对应的源代码。
其中,待检测应用程序的安装包中可以包含可执行文件,安装包可以为apk格式,待检测应用程序可以为多媒体平台、游戏等类型,能够运行在安卓Android框架下的系统平台。
上述安装包中的可执行文件通常可以为.dex文件,可以通过Jadx命令行等反编译工具,将其反编译为源代码,源代码通常可以以.java文件的形式呈现。
S102、基于所述源代码,检测得到所述待检测应用程序对应的第一库文件列表;所述第一库文件列表中包含多个第一库文件的标识信息,所述第一库文件为待校验的开发包的库文件。
若待检测应用程序使用了一个开发包,则必然存在调用该开发包的源代码,可以从可执行文件对应的源代码中,检测出包含开发包库文件的标识信息,并基于检测到的标识信息,形成第一库文件列表。
上述第一库文件列表可以被认为是针对待检测应用程序使用的开发包的初步检测结果,第一库文件列表中指示有待校验的多个开发包的第一库文件的标识信息,这些第一库文件的标识信息通常是从源代码中提取出来的。
具体的,在检测得到第一库文件列表的过程中,可以先基于安装包的信息描述文件,获取到待检测应用程序对应的多个库文件的标识信息。
示例性的,安装包的信息描述文件可以为AndroidManifest.xml文件,该信息描述文件中可以指示有待检测应用程序的重要信息,比如安装包的标识信息、待检测应用程序的组成信息、待检测应用程序所使用到的库文件信息等。通过对该文件进行解析,可以得到待检测应用程序各个组件的名称(name),通过对组件名称进行位数保留处理,可以得到各个组件调用的库文件的列表,该列表中可以指示有各个被调用的库文件的标识信息。
在得到各个组件对应的库文件的列表之后,可以从上述源代码中查找是否存在调用该列表中指示的库文件的代码,若成功查找到对应的代码,说明该库文件确实被待检测应用程序所调用,则可以将其作为第三库文件。
经过上述步骤,可以确定出待检测应用程序具体调用了哪些库文件,但这些库文件可能是系统功能的库文件,也可能是第三方开发包的库文件,或是其他类型的库文件,因此,需要对第三库文件进行筛选,从中将开发包对应的库文件筛选出来。
在对第三库文件进行筛选的过程中,可以获取预先配置的开发包清单和第三库文件对应的第一动态库文件的标识信息,并基于上述开发包清单和第一动态库文件的标识信息对第三库文件进行筛选,得到第一库文件列表中的各个第一库文件。
由于开发包通常包含自身对应的库文件,以及该库文件对应的动态库文件,因此,可以通过判断库文件是否存在对应的动态库文件的形式来判断该库文件是否为开发包的库文件。
为了进行是否存在对应动态库文件的判断,可以先从目标开发包的库文件路径获取待检测应用程序对应的多个第二动态库文件的标识信息,确定出待检测应用程序包含的全部动态库文件;同时,可以根据源代码中调用第三库文件的代码的上下文信息,确定第三库文件对应的第二动态库文件的标识信息,也即确定出第三库文件对应的第二动态库文件。
之后,可以基于第一动态库文件的标识信息和各第三库文件对应的第二动态库文件的标识信息,从第三库文件中筛选得到存在与所述第二动态库文件的标识信息相同的目标第一动态库文件,将目标第一动态库文件对应的第三库文件添加至第一库文件列表中。
其中,安装包的库文件路径可以指安装包的lib文件库的路径,在该路径下,可以存储有安装包所有的动态库文件的标识信息;在源代码中,调用第三库文件的代码时,通常也会调用第三文件库对应的动态库文件,因此,可以从调用第三库文件的代码的上下文信息中,搜索出第三库文件对应的第二动态库文件的标识信息。
在搜索第二动态库文件的标识信息的过程中,可以按照动态库文件的匹配规则进行搜索,比如,动态库文件的后缀通常为“.so”,加载动态库文件的函数通常为“System.load”,则可以搜索带有“.so”的代码以及“System.load”函数对应的参数(如System.load(xxx)中的“xxx”即为动态库文件的标识信息);对于System.loadLibrary函数,其调用动态库文件时使用的参数需要将动态库文件的标识信息中的lib和.so后缀进行去除,因此,在得到System.loadLibrary函数的参数后,需要参数再重新添加lib前缀和.so后缀,比如,若检测到了System.loadLibrary(ABC),则其调用的动态库文件的标识信息则为libABC.so。
同时,存在一些已知的开发包,开发人员可以维护一个预设的开发包清单,该开发包清单中可以指示有一些已经确定的开发包的库文件的标识信息,在得到第三库文件之后,可以从开发包清单中查找该第三库文件对应的标识信息,若查找到,也即该第三库文件是位于开发包清单中的库文件,则可以将该库文件添加至第一库文件列表中。
在上述需要进行关键字和长度匹配的步骤中,可以先进行代码的模糊搜索,得到粒度较大的数据块,再分别从各个数据块中进行粒度较小的数据的匹配,能够有效提高关键字及长度匹配的效率。
由于上述基于源代码确定第一库文件列表的步骤是在没有运行待检测应用程序的情况下进行的,可以成为静态检测环节。
S103、基于所述待检测应用程序在运行时生成的库文件加载信息,对所述第一库文件列表进行校验,并根据校验结果,对所述第一库文件列表进行更新,得到所述待检测应用程序的第二库文件列表。
由于一些调用函数的特殊性,静态检测环节中使用的匹配规则可能无法覆盖到所有的库文件,导致出现漏检、多检或错检的情况,对此,本公开实施例提供了针对静态检测环节得到的第一库文件列表的校验步骤,也即上述S103,该步骤基于待检测应用程序在运行时生成的库文件加载信息对第一库文件列表进行校验,可以被称为动态校验环节。
在该步骤中,可以获取待检测应用程序在运行时的库文件加载信息,库文件加载信息可以通过对加载动态库文件的函数进行检测,获取加载动态库文件的函数在被调用时对应的调用栈信息和动态库参数信息,并基于上述调用栈信息和动态库参数信息,直接得到开发包的库文件与对应动态库文件之间的对应关系,并基于该对应关系对第一库文件列表进行校验和更新。
示例性的,可以通过注入代码的方式(如利用Frida框架注入代码),向安装包注入检测所需函数的代码,以及获取库文件加载信息的代码。这样,在运行安装包时,所需要的函数一旦被调用,就会将其对应的库文件加载信息回传。
具体的,可以确定待检测应用程序对应的库文件加载函数,并生成针对所述库文件加载函数的检测代码;然后,将检测代码注入至安装包中,并基于注入检测代码后的安装包运行待检测应用程序;基于注入的检测代码,获取所述待检测应用程序在运行时生成的库文件加载信息。
在实际应用当中,存在一些特殊的函数,这些函数在加载动态资源库时使用的加载方式和普通的动态加载资源库的函数不同,无法直接使用注入代码的方式进行库文件加载信息的获取,因此,可以对该特殊函数进行分析,经过分析可以发现,有些函数,如java.lang.System.loadLibrary函数,会对一些参数或对象进行修改,导致注入获取的信息与待检测应用程序本身使用的信息不同,无法找到对应的动态库文件,对于这类函数,可能存在利用其他函数进行动态库加载,可以进一步对源代码进行分析,找到该函数真正对应的动态库文件加载函数。
比如,上述java.lang.System.loadLibrary函数所对应的动态库文件加载函数为java.lang.Runtime的nativeLoad函数,对java.lang.Runtime的nativeLoad函数进行代码注入即可实现对java.lang.System.loadLibrary函数的调用检测。
在上述步骤中,可以对调用栈信息和动态库参数信息进行分析,即可得知哪些调用栈加载了动态库文件,以及调用的是哪个动态库文件,在加载了动态库文件的调用栈的调用栈信息中,可以提取出对应开发包的标识信息,也即,基于库文件加载信息中的调用栈信息及动态库参数信息,确定待检测应用程序在运行时所加载动态库的标识信息,以及在待检测应用程序运行时,所加载的动态库文件对应的第四库文件的标识信息。
在得到第四库文件的标识信息之后,可以基于第四库文件的标识信息对第一库文件列表进行校验,并根据校验结果,对第一库文件列表进行更新,得到待检测应用程序的第二库文件列表。
在进行校验的过程中,可以将第一库文件列表中的各个第一库文件的标识信息,与上述多个第四库文件的标识信息进行对比。
示例性的,针对任一第一库文件,若存在任一第四库文件的标识信息与第一库文件的标识信息相同,则说明静态检测环节与动态校验环节同时检测到了该第一库文件,该第一库文件是开发包的库文件,则可以直接将该第一库文件作为第二库文件。
若不存在第四库文件的标识信息与上述第一库文件的标识信息相同,且在该第一库文件对应的目标源代码中查询到了对应的动态库文件的标识信息,也即动态校验环节没有调用到该第一库文件,但该第一库文件存在其对应的动态库文件,说明该第一库文件是开发包的库文件,将其作为第二库文件。
若不存在第四库文件的标识信息与上述第一库文件的标识信息相同,且在该第一库文件对应的目标源代码中没有查询到对应的动态库文件的标识信息,则说明该第一库文件有可能为误检,可以由开发人员进一步的核实。
针对任一第四库文件,若不存在第一库文件的标识信息与该第四库文件的标识信息相同,则说明静态检测环节没有检测到该第四库文件,属于漏检,可以将该第四库文件作为第二库文件。
S104、基于所述第二库文件列表,对所述待检测应用程序进行安全检测。
在进行安全检测时,可以在安装包中注入安全检测代码,并基于注入安全检测代码的安装包,运行待检测应用程序,然后,基于安全检测代码生成待检测应用程序的安全检测结果,再基于第二库文件列表,对所述安全检测结果中指示的安全风险进行定位。
在该步骤中,可以根据需要进行的安全检测的种类,生成对应的安全检测代码,不同的安全检测可以分别对应不同的安全检测代码。
上述安全检测的种类可以包括自启动安全检测、信息收集行为安全检测、权限安全检测、信息存储行为安全检测、追踪器安全检测、域名安全检测、密钥存储安全检测、剪切板安全检测、证书安全检测等类型中的至少一种。
上述各个种类的安全检测中,根据所需要的获取的数据不同,可以采取不同的检测方式,一些种类的安全检测(如自启动安全检测、证书安全检测等),其需要的数据可以直接利用命令行工具获取,对于不能利用命令行工具获取数据的安全检测(如权限安全检测、信息收集行为安全检测、追踪器安全检测等),可以采用代码注入的方式,将获取相关数据的代码注入至应用程序中,从而在应用程序运行时,获取需要的代码。
在需要利用代码注入的方式获取安全检测所需数据时,可以从上述第二库文件列表中查找需要的开发包的库文件信息,并利用查找到的信息生成注入代码,从而实现与库文件匹配的数据的获取。
在进行安全检测时,可以向用户展示交互界面,交互界面中可以提供选择需要进行安全检测的项目的按钮,以及生成注入代码、编辑注入代码、代码注入及开始检测的按钮,检测完成之后可以将检测结果展示给用户。
这样,通过上述多个类型的安全检测,可以有效覆盖游戏等大型应用程序的检测需求,保证安全检测的内容完备。
在确定第二库文件列表之后,可以将第二库文件列表与上述预先配置的开发包清单进行对比,将新增的开发包的库文件的标识信息添加至上述开发包清单中,便于后续的安全检测。
值得注意的是,在确定上述第一库文件列表之后,可以直接对安装包进行安全检测,并在安全检测的过程中同步获取待检测应用程序在运行时生成的库文件加载信息,并对第一库文件列表进行校验和更新,得到第二库文件列表。
本公开实施例提供的应用程序的安全检测方法,获取待检测应用程序的可执行文件对应的源代码,然后,利用可执行文件的源代码,检测得到第一库文件列表,其中指示了待校验的多个开发包的第一库文件,从而完成对待检测应用程序所使用的开发包的初步判断,之后,再利用待检测应用程序在运行时生成的库文件加载信息对第一库文件列表进行校验,并根据校验结果对第一库文件列表进行更新得到第二库文件列表,对初步判断结果进行检验及修正,提高库文件列表的精确度,从而在对安装包进行安全检测时提供可靠的风险定位。
参见图2所示,为本公开实施例所提供的另一种应用程序的安全检测方法的流程图,该方法首先获取安装包,然后对安装包进行安装和包体分析,获取到安装包的包名、源代码、第二库文件列表等信息,然后利用获取到的信息进行自启动安全检测、信息收集行为安全检测、权限安全检测、信息存储行为安全检测中的授权前检测部分,完成用户授权前的安全检测,然后响应用户授权,进行追踪器安全检测、域名安全检测、密钥存储安全检测、剪切板安全检测、证书安全检测、明文信息安全检测、权限安全检测、信息收集行为安全检测的授权后检测部分,最后根据检测结果生成检测报告。
参见图3所示,为本公开实施例所提供的确定第二库文件列表的步骤的流程图。该步骤首先对安装包中的信息描述文件进行解析,获取各个组件的name,并对name进行位数保留处理,得到调用的库文件的包名列表;然后,扫描安装包的lib文件库,获取lib文件库中所有动态库的名称,得到动态库文件库名;之后,将所有得到的库文件的包名在源代码目录中进行匹配,确定是否能够在对应路径中匹配到代码;对于能够匹配到代码的库文件包名,可以形成初步SDK列表,并在包名对应的源代码中搜索对应的加载到的动态库文件;匹配库文件包名所对应的动态库文件与安装包的动态库文件库名,以及,匹配初步SDK列表与预设的SDK数据库表;若上述两种匹配有任一项成功,则将其对应的库文件的包名放入疑似SDK库列表中;正常启动待检测应用程序后,利用注入代码的方式,动态获取实际调用的动态库的相关数据;分析实际调用动态库的相关数据,得到调用栈和动态链接库的关系表,将关系表与疑似SDK库列表进行对比,并对疑似SDK库列表进行更新,得到第二库文件列表。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与应用程序的安全检测方法对应的应用程序的安全检测装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述应用程序的安全检测方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
参照图4所示,为本公开实施例提供的一种应用程序的安全检测装置的示意图,所述装置包括:
获取模块410,用于获取待检测应用程序中的可执行文件对应的源代码;
第一检测模块420,用于基于所述源代码,检测得到所述待检测应用程序对应的第一库文件列表;所述第一库文件列表中包含多个第一库文件的标识信息,所述第一库文件为待校验的开发包的库文件;
更新模块430,用于基于所述待检测应用程序在运行时生成的库文件加载信息,对所述第一库文件列表进行校验,并根据校验结果,对所述第一库文件列表进行更新,得到所述待检测应用程序的第二库文件列表;
第二检测模块440,用于基于所述第二库文件列表,对所述待检测应用程序进行安全检测。
一种可选的实施方式中,所述第一检测模块420具体用于:
基于所述待检测应用程序的安装包的信息描述文件,获取所述待检测应用程序对应的多个库文件的标识信息;
基于获取到的所述多个库文件的标识信息,从所述源代码中查找是否存在调用所述库文件的代码,若存在,则将该库文件作为第三库文件;
基于预先配置的开发包清单,以及各所述第三库文件对应的第一动态库文件的标识信息,对各所述第三库文件进行筛选,得到所述第一库文件列表中的各个第一库文件。
一种可选的实施方式中,基于预先配置的开发包清单,以及各所述第三库文件对应的第一动态库文件的标识信息,对各所述第三库文件进行筛选之前,所述第一检测模块420还用于:
从所述待检测应用程序的安装包的库文件路径获取所述待检测应用程序对应的多个第二动态库文件的标识信息;
根据所述源代码中调用所述第三库文件的代码的上下文信息,确定所述第三库文件对应的第二动态库文件的标识信息;
所述第一检测模块420在基于预先配置的开发包清单,以及各所述第三库文件对应的第一动态库文件的标识信息,对各所述第三库文件进行筛选,得到所述第一库文件列表中的各个第一库文件时,用于:
基于所述第一动态库文件的标识信息和各所述第三库文件对应的第二动态库文件的标识信息,从各所述第三库文件中筛选得到存在与所述第二动态库文件的标识信息相同的目标第一动态库文件;
其中,所述第一库文件列表中包括所述目标第一动态库文件对应的第三库文件,以及位于所述开发包清单中的库文件。
一种可选的实施方式中,所述更新模块430具体用于:
基于所述库文件加载信息中的调用栈信息及动态库参数信息,确定所述待检测应用程序在运行时所加载动态库的标识信息,以及在所述待检测应用程序运行时,所加载的动态库文件对应的第四库文件的标识信息;
基于所述第四库文件的标识信息,对所述第一库文件列表进行校验,并根据校验结果,对所述第一库文件列表进行更新,得到所述待检测应用程序的第二库文件列表。
一种可选的实施方式中,所述更新模块430在基于所述第四库文件的标识信息,对所述第一库文件列表进行校验,并根据校验结果,对所述第一库文件列表进行更新,得到所述待检测应用程序的第二库文件列表时,用于:
针对任一所述第一库文件,若存在任一第四库文件的标识信息与所述第一库文件的标识信息相同,则将所述第一库文件作为所述第二库文件;
若不存在第四库文件的标识信息与所述第一库文件的标识信息相同,且在所述第一库文件对应的目标源代码中查询到对应的动态库文件的标识信息,则将所述第一库文件作为所述第二库文件;
针对任一所述第四库文件,若不存在第一库文件的标识信息与所述第四库文件的标识信息相同,则将所述第四库文件作为所述第二库文件。
一种可选的实施方式中,所述更新模块430还用于:
确定所述待检测应用程序对应的库文件加载函数,并生成针对所述库文件加载函数的检测代码;
将所述检测代码注入至所述待检测应用程序的安装包中,并基于注入检测代码后的安装包运行所述待检测应用程序;
基于注入的所述检测代码,获取所述待检测应用程序在运行时生成的库文件加载信息。
一种可选的实施方式中,所述第二检测模块440具体用于:
在所述待检测应用程序的安装包注入安全检测代码,并基于注入所述安全检测代码的安装包,运行所述待检测应用程序;
基于所述安全检测代码,生成所述待检测应用程序的安全检测结果;
基于所述第二库文件列表,对所述安全检测结果中指示的安全风险进行定位。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
本公开实施例还提供了一种计算机设备,如图5所示,为本公开实施例提供的计算机设备结构示意图,包括:
处理器51和存储器52;所述存储器52存储有处理器51可执行的机器可读指令,处理器51用于执行存储器52中存储的机器可读指令,所述机器可读指令被处理器51执行时,处理器51执行下述步骤:
获取待检测应用程序中的可执行文件对应的源代码;
基于所述源代码,检测得到所述待检测应用程序对应的第一库文件列表;所述第一库文件列表中包含多个第一库文件的标识信息,所述第一库文件为待校验的开发包的库文件;
基于所述待检测应用程序在运行时生成的库文件加载信息,对所述第一库文件列表进行校验,并根据校验结果,对所述第一库文件列表进行更新,得到所述待检测应用程序的第二库文件列表;
基于所述第二库文件列表,对所述待检测应用程序进行安全检测。
一种可选的实施方式中,所述处理器51执行的指令中,所述基于所述源代码,检测得到所述待检测应用程序对应的第一库文件列表,包括:
基于所述待检测应用程序的安装包的信息描述文件,获取所述待检测应用程序对应的多个库文件的标识信息;
基于获取到的所述多个库文件的标识信息,从所述源代码中查找是否存在调用所述库文件的代码,若存在,则将该库文件作为第三库文件;
基于预先配置的开发包清单,以及各所述第三库文件对应的第一动态库文件的标识信息,对各所述第三库文件进行筛选,得到所述第一库文件列表中的各个第一库文件。
一种可选的实施方式中,所述处理器51执行的指令中,基于预先配置的开发包清单,以及各所述第三库文件对应的第一动态库文件的标识信息,对各所述第三库文件进行筛选之前,还包括:
从所述待检测应用程序的安装包的库文件路径获取所述待检测应用程序对应的多个第二动态库文件的标识信息;
根据所述源代码中调用所述第三库文件的代码的上下文信息,确定所述第三库文件对应的第二动态库文件的标识信息;
所述基于预先配置的开发包清单,以及各所述第三库文件对应的第一动态库文件的标识信息,对各所述第三库文件进行筛选,得到所述第一库文件列表中的各个第一库文件,包括:
基于所述第一动态库文件的标识信息和各所述第三库文件对应的第二动态库文件的标识信息,从各所述第三库文件中筛选得到存在与所述第二动态库文件的标识信息相同的目标第一动态库文件;
其中,所述第一库文件列表中包括所述目标第一动态库文件对应的第三库文件,以及位于所述开发包清单中的库文件。
一种可选的实施方式中,所述处理器51执行的指令中,所述基于所述待检测应用程序在运行时生成的库文件加载信息,对所述第一库文件列表进行校验,并根据校验结果,对所述第一库文件列表进行更新,得到所述待检测应用程序的第二库文件列表,包括:
基于所述库文件加载信息中的调用栈信息及动态库参数信息,确定所述待检测应用程序在运行时所加载动态库的标识信息,以及在所述待检测应用程序运行时,所加载的动态库文件对应的第四库文件的标识信息;
基于所述第四库文件的标识信息,对所述第一库文件列表进行校验,并根据校验结果,对所述第一库文件列表进行更新,得到所述待检测应用程序的第二库文件列表。
一种可选的实施方式中,所述处理器51执行的指令中,所述基于所述第四库文件的标识信息,对所述第一库文件列表进行校验,并根据校验结果,对所述第一库文件列表进行更新,得到所述待检测应用程序的第二库文件列表,包括:
针对任一所述第一库文件,若存在任一第四库文件的标识信息与所述第一库文件的标识信息相同,则将所述第一库文件作为所述第二库文件;
若不存在第四库文件的标识信息与所述第一库文件的标识信息相同,且在所述第一库文件对应的目标源代码中查询到对应的动态库文件的标识信息,则将所述第一库文件作为所述第二库文件;
针对任一所述第四库文件,若不存在第一库文件的标识信息与所述第四库文件的标识信息相同,则将所述第四库文件作为所述第二库文件。
一种可选的实施方式中,所述处理器51执行的指令中,还包括:
确定所述待检测应用程序对应的库文件加载函数,并生成针对所述库文件加载函数的检测代码;
将所述检测代码注入至所述待检测应用程序的安装包中,并基于注入检测代码后的安装包运行所述待检测应用程序;
基于注入的所述检测代码,获取所述待检测应用程序在运行时生成的库文件加载信息。
一种可选的实施方式中,所述处理器51执行的指令中,所述基于所述第二库文件列表,对所述待检测应用程序进行安全检测,包括:
在所述待检测应用程序的安装包注入安全检测代码,并基于注入所述安全检测代码的安装包,运行所述待检测应用程序;
基于所述安全检测代码,生成所述待检测应用程序的安全检测结果;
基于所述第二库文件列表,对所述安全检测结果中指示的安全风险进行定位。
上述存储器52包括内存521和外部存储器522;这里的内存521也称内存储器,用于暂时存放处理器51中的运算数据,以及与硬盘等外部存储器522交换的数据,处理器51通过内存521与外部存储器522进行数据交换。
上述指令的具体执行过程可以参考本公开实施例中所述的应用程序的安全检测方法的步骤,此处不再赘述。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的应用程序的安全检测方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例还提供一种计算机程序产品,该计算机程序产品承载有程序代码,所述程序代码包括的指令可用于执行上述方法实施例中所述的应用程序的安全检测方法的步骤,具体可参见上述方法实施例,在此不再赘述。
其中,上述计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
可以理解的是,在使用本公开各实施例公开的技术方案之前,均应当依据相关法律法规通过恰当的方式对本公开所涉及个人信息的类型、使用范围、使用场景等告知用户并获得用户的授权。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。
Claims (10)
1.一种应用程序的安全检测方法,其特征在于,包括:
获取待检测应用程序中的可执行文件对应的源代码;
基于所述源代码,检测得到所述待检测应用程序对应的第一库文件列表;所述第一库文件列表中包含多个第一库文件的标识信息,所述第一库文件为待校验的开发包的库文件;
基于所述待检测应用程序在运行时生成的库文件加载信息,对所述第一库文件列表进行校验,并根据校验结果,对所述第一库文件列表进行更新,得到所述待检测应用程序的第二库文件列表;
基于所述第二库文件列表,对所述待检测应用程序进行安全检测。
2.根据权利要求1所述的方法,其特征在于,所述基于所述源代码,检测得到所述待检测应用程序对应的第一库文件列表,包括:
基于所述待检测应用程序的安装包的信息描述文件,获取所述待检测应用程序对应的多个库文件的标识信息;
基于获取到的所述多个库文件的标识信息,从所述源代码中查找是否存在调用所述库文件的代码,若存在,则将该库文件作为第三库文件;
基于预先配置的开发包清单,以及各所述第三库文件对应的第一动态库文件的标识信息,对各所述第三库文件进行筛选,得到所述第一库文件列表中的各个第一库文件。
3.根据权利要求2所述的方法,其特征在于,基于预先配置的开发包清单,以及各所述第三库文件对应的第一动态库文件的标识信息,对各所述第三库文件进行筛选之前,还包括:
从所述待检测应用程序的安装包的库文件路径获取所述待检测应用程序对应的多个第二动态库文件的标识信息;
根据所述源代码中调用所述第三库文件的代码的上下文信息,确定所述第三库文件对应的第二动态库文件的标识信息;
所述基于预先配置的开发包清单,以及各所述第三库文件对应的第一动态库文件的标识信息,对各所述第三库文件进行筛选,得到所述第一库文件列表中的各个第一库文件,包括:
基于所述第一动态库文件的标识信息和各所述第三库文件对应的第二动态库文件的标识信息,从各所述第三库文件中筛选得到存在与所述第二动态库文件的标识信息相同的目标第一动态库文件;
其中,所述第一库文件列表中包括所述目标第一动态库文件对应的第三库文件,以及位于所述开发包清单中的库文件。
4.根据权利要求1所述的方法,其特征在于,所述基于所述待检测应用程序在运行时生成的库文件加载信息,对所述第一库文件列表进行校验,并根据校验结果,对所述第一库文件列表进行更新,得到所述待检测应用程序的第二库文件列表,包括:
基于所述库文件加载信息中的调用栈信息及动态库参数信息,确定所述待检测应用程序在运行时所加载动态库的标识信息,以及在所述待检测应用程序运行时,所加载的动态库文件对应的第四库文件的标识信息;
基于所述第四库文件的标识信息,对所述第一库文件列表进行校验,并根据校验结果,对所述第一库文件列表进行更新,得到所述待检测应用程序的第二库文件列表。
5.根据权利要求4所述的方法,其特征在于,所述基于所述第四库文件的标识信息,对所述第一库文件列表进行校验,并根据校验结果,对所述第一库文件列表进行更新,得到所述待检测应用程序的第二库文件列表,包括:
针对任一所述第一库文件,若存在任一第四库文件的标识信息与所述第一库文件的标识信息相同,则将所述第一库文件作为所述第二库文件;
若不存在第四库文件的标识信息与所述第一库文件的标识信息相同,且在所述第一库文件对应的目标源代码中查询到对应的动态库文件的标识信息,则将所述第一库文件作为所述第二库文件;
针对任一所述第四库文件,若不存在第一库文件的标识信息与所述第四库文件的标识信息相同,则将所述第四库文件作为所述第二库文件。
6.根据权利要求1所述的方法,其特征在于,通过以下步骤获取所述待检测应用程序在运行时生成的库文件加载信息:
确定所述待检测应用程序对应的库文件加载函数,并生成针对所述库文件加载函数的检测代码;
将所述检测代码注入至所述待检测应用程序的安装包中,并基于注入检测代码后的安装包运行所述待检测应用程序;
基于注入的所述检测代码,获取所述待检测应用程序在运行时生成的库文件加载信息。
7.根据权利要求1所述的方法,其特征在于,所述基于所述第二库文件列表,对所述待检测应用程序进行安全检测,包括:
在所述待检测应用程序的安装包注入安全检测代码,并基于注入所述安全检测代码的安装包,运行所述待检测应用程序;
基于所述安全检测代码,生成所述待检测应用程序的安全检测结果;
基于所述第二库文件列表,对所述安全检测结果中指示的安全风险进行定位。
8.一种应用程序的安全检测装置,其特征在于,包括:
获取模块,用于获取待检测应用程序中的可执行文件对应的源代码;
第一检测模块,用于基于所述源代码,检测得到所述待检测应用程序对应的第一库文件列表;所述第一库文件列表中包含多个第一库文件的标识信息,所述第一库文件为待校验的开发包的库文件;
更新模块,用于基于所述待检测应用程序在运行时生成的库文件加载信息,对所述第一库文件列表进行校验,并根据校验结果,对所述第一库文件列表进行更新,得到所述待检测应用程序的第二库文件列表;
第二检测模块,用于基于所述第二库文件列表,对所述待检测应用程序进行安全检测。
9.一种计算机设备,其特征在于,包括:处理器、存储器,所述存储器存储有所述处理器可执行的机器可读指令,所述处理器用于执行所述存储器中存储的机器可读指令,所述机器可读指令被所述处理器执行时,所述处理器执行如权利要求1至7任一项所述的应用程序的安全检测方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被计算机设备运行时,所述计算机设备执行如权利要求1至7任意一项所述的应用程序的安全检测方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310484128.9A CN116541847A (zh) | 2023-04-28 | 2023-04-28 | 一种应用程序的安全检测方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310484128.9A CN116541847A (zh) | 2023-04-28 | 2023-04-28 | 一种应用程序的安全检测方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116541847A true CN116541847A (zh) | 2023-08-04 |
Family
ID=87457032
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310484128.9A Pending CN116541847A (zh) | 2023-04-28 | 2023-04-28 | 一种应用程序的安全检测方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116541847A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117056921A (zh) * | 2023-08-11 | 2023-11-14 | 上海弘连网络科技有限公司 | 生成Frida脚本与APK动态分析的方法、系统、设备及介质 |
-
2023
- 2023-04-28 CN CN202310484128.9A patent/CN116541847A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117056921A (zh) * | 2023-08-11 | 2023-11-14 | 上海弘连网络科技有限公司 | 生成Frida脚本与APK动态分析的方法、系统、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107273751B (zh) | 基于多模式匹配的安全漏洞在线发现方法 | |
CN107451474B (zh) | 用于终端的软件漏洞修复方法和装置 | |
US8635602B2 (en) | Verification of information-flow downgraders | |
Baca et al. | Improving software security with static automated code analysis in an industry setting | |
CN103984900A (zh) | Android应用漏洞检测方法及系统 | |
US11550923B2 (en) | Systems and/or methods for static-dynamic security testing using a test configurator to identify vulnerabilities and automatically repair defects | |
CN108763951B (zh) | 一种数据的保护方法及装置 | |
US20240121261A1 (en) | Automated Security Analysis of Software Libraries | |
Zhang et al. | Ripple: Reflection analysis for android apps in incomplete information environments | |
CN109271789B (zh) | 恶意进程检测方法、装置、电子设备及存储介质 | |
CN114021142A (zh) | 一种安卓应用程序漏洞检测方法 | |
Alves et al. | Prioritizing test cases for early detection of refactoring faults | |
CN116541847A (zh) | 一种应用程序的安全检测方法及装置 | |
CN115391230A (zh) | 一种测试脚本生成、渗透测试方法、装置、设备及介质 | |
CN114065222A (zh) | 源代码风险分析方法、装置、电子设备及存储介质 | |
CN112419057A (zh) | 智能合约的日志生成及保存方法、装置、设备和存储介质 | |
Gauthier et al. | Experience: model-based, feedback-driven, Greybox web fuzzing with BackREST | |
US11695793B2 (en) | Vulnerability scanning of attack surfaces | |
CN112019544B (zh) | 网络接口的安全扫描方法、装置及系统 | |
Ascia et al. | Making android apps data-leak-safe by data flow analysis and code injection | |
CN109492392B (zh) | 一种核心函数的检测方法及系统 | |
IL285079B1 (en) | Discovery of exploitable paths in application software that uses third-party libraries | |
CN112783759B (zh) | 白盒测试任务执行方法、装置、存储介质和计算机设备 | |
Bogdanas et al. | Analysis and transformations in support of android privacy | |
CN111625784B (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 |