CN112000339A - 安卓apk文件依赖组件识别方法及装置 - Google Patents
安卓apk文件依赖组件识别方法及装置 Download PDFInfo
- Publication number
- CN112000339A CN112000339A CN202010657866.5A CN202010657866A CN112000339A CN 112000339 A CN112000339 A CN 112000339A CN 202010657866 A CN202010657866 A CN 202010657866A CN 112000339 A CN112000339 A CN 112000339A
- Authority
- CN
- China
- Prior art keywords
- android
- file
- component
- package
- depended
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/53—Decompilation; Disassembly
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例提供一种安卓APK文件依赖组件识别方法及装置。其中,方法包括:解析安卓APK文件,获取代码文件和清单文件,根据代码文件和清单文件,获取安卓工程依赖的各组件的文件和package目录;将安卓工程依赖的各组件的文件和package目录与Android SDK部分中各组件的jar的反编译结果进行比较,获取Android SDK部分所依赖的组件;将安卓工程依赖的各组件的文件和package目录与非Android SDK部分的各package依赖的jar的反编译结果进行比较,获取非Android SDK部分所依赖的组件。本发明实施例提供的安卓APK文件依赖组件识别方法及装置,能降低误识别率。
Description
技术领域
本发明实施例涉及计算机软件技术领域,更具体地,涉及一种安卓APK文件依赖组件识别方法及装置。
背景技术
安卓(Android)应用的APK(Android Package)安装文件是一个包含所有代码和资源文件的压缩包,用于分发和安装移动应用及中间件。一个Android应用程序的代码想要在Android设备上运行,必须先进行编译,然后被打包成为一个被Android系统所能识别的文件才可以被运行,而这种能被Android系统识别并运行的文件格式便是“APK”。
APK文件内包含被编译的代码文件(.dex文件),lib(程序依赖的native库目录),文件资源(resources),原生资源文件(assets),证书(certificates)和清单文件(AndroidManifest文件)。
dex文件是传统的Java程序,Android应用在打包时通过AndroidSDK中的dx工具将Java字节码转换为Dalvik字节码。
lib目录放的是程序依赖的native库文件,一般是用C/C++编写。由于ARM架构的手机占大多数,所以一般的APK只包含ARM和ARM-V7a的so。
res目录是resource的缩写,这个目录存放资源文件。
META-INF目录存放的是签名相关的信息,用于验证APK包的完整性以及保证系统的安全。
现有安卓APK文件依赖组件的静态识别方法,识别lib目录中的本地(native)组件,得不到完整的组件,从而导致误报率较高。
发明内容
本发明实施例提供一种安卓APK文件依赖组件识别方法及装置,用以解决或者至少部分地解决现有技术存在的误报率较高的缺陷。
第一方面,本发明实施例提供一种安卓APK文件依赖组件识别方法,包括:
解析安卓APK文件,获取代码文件和清单文件,根据所述代码文件和清单文件,获取安卓工程依赖的各组件的文件和package目录;
将所述安卓工程依赖的各组件的文件和package目录与所述安卓APK文件中Android SDK部分中各组件的jar的反编译结果进行比较,获取所述安卓APK文件中AndroidSDK部分所依赖的组件;
将所述安卓工程依赖的各组件的文件和package目录与所述安卓APK文件中非Android SDK部分的各package依赖的jar的反编译结果进行比较,获取所述安卓APK文件中非Android SDK部分所依赖的组件。
优选地,所述将所述安卓工程依赖的各组件的文件和package目录与所述安卓APK文件中Android SDK部分中各组件的jar的反编译结果进行比较,获取所述安卓APK文件中Android SDK部分所依赖的组件的具体步骤包括:
对所述Android SDK部分中各组件的jar进行反编译,获取所述Android SDK部分中各组件的java文件和package目录;
将所述安卓工程依赖的各组件的文件和package目录,与所述Android SDK部分中各组件的java文件和package目录进行对比,根据对比结果,获取所述Android SDK部分所依赖的组件。
优选地,所述将所述安卓工程依赖的各组件的文件和package目录与所述安卓APK文件中非Android SDK部分的各package依赖的jar的反编译结果进行比较,获取所述安卓APK文件中非Android SDK部分所依赖的组件的具体步骤包括:
根据所述安卓工程依赖的文件和package目录中,与所述Android SDK部分中每一组件的java文件和package目录均不相同的文件和package目录,确定所述安卓APK文件中非Android SDK部分的各package;
通过gradle下载所述非Android SDK部分的各package依赖的jar并进行反编译,获取所述非Android SDK部分中各组件的java文件和package目录;
将所述安卓工程依赖的各组件的文件和package目录,与所述非Android SDK部分中各组件的java文件和package目录进行对比,根据对比结果,获取所述非Android SDK部分所依赖的组件。
优选地,所述根据对比结果,获取所述Android SDK部分所依赖的组件的具体步骤包括:
若判断获知所述Android SDK部分中任一所述组件的java文件和package目录,与所述安卓工程依赖的任一组件的文件和package目录相同,则将所述组件确定为所述Android SDK部分所依赖的组件。
优选地,所述根据对比结果,获取所述非Android SDK部分所依赖的组件的具体步骤包括:
若判断获知所述非Android SDK部分中任一所述组件的java文件和package目录,与所述安卓工程依赖的任一组件的文件和package目录相同,则将所述组件确定为所述非Android SDK部分所依赖的组件。
优选地,所述解析安卓APK文件,获取代码文件和清单文件,根据所述代码文件和清单文件,获取安卓工程依赖的各组件的文件和package目录的具体步骤包括:
解析安卓APK文件,获取代码文件和清单文件;
将所述代码文件转换为jar后进行反编译,获取所述安卓工程的java文件,并对所述清单文件中的manifest标签进行识别,获取所述安卓工程的package目录;
根据所述安卓工程的java文件和package目录,获取安卓工程依赖的各组件的文件和package目录。
优选地,所述将所述安卓工程依赖的各组件的文件和package目录与所述安卓APK文件中非Android SDK部分的各package依赖的jar的反编译结果进行比较,获取所述安卓APK文件中非Android SDK部分所依赖的组件之后,还包括:
根据所述代码文件中的import的类,对所述安卓APK文件中Android SDK部分和非Android SDK部分所依赖的组件进行定位。
第二方面,本发明实施例提供一种安卓APK文件依赖组件识别装置,包括:
解析模块,用于解析安卓APK文件,获取代码文件和清单文件,根据所述代码文件和清单文件,获取安卓工程依赖的各组件的文件和package目录;
第一比对模块,用于将所述安卓工程依赖的各组件的文件和package目录与所述安卓APK文件中Android SDK部分中各组件的jar的反编译结果进行比较,获取所述安卓APK文件中Android SDK部分所依赖的组件;
第二比对模块,用于将所述安卓工程依赖的各组件的文件和package目录与所述安卓APK文件中非Android SDK部分的各package依赖的jar的反编译结果进行比较,获取所述安卓APK文件中非Android SDK部分所依赖的组件。
第三方面,本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,执行所述程序时实现如第一方面的各种可能的实现方式中任一种可能的实现方式所提供的安卓APK文件依赖组件识别方法的步骤。
第四方面,本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面的各种可能的实现方式中任一种可能的实现方式所提供的安卓APK文件依赖组件识别方法的步骤。
本发明实施例提供的安卓APK文件依赖组件识别方法及装置,通过解析安卓APK文件,获取代码文件和清单文件,根据代码文件和清单文件,获取安卓工程依赖的各组件的文件和package目录,将安卓工程依赖的各组件的文件和package目录,分别与安卓APK文件中Android SDK部分中各组件的jar的反编译结果和非Android SDK部分的各package依赖的jar的反编译结果进行比较,获取安卓APK文件依赖的组件,能识别出安卓APK文件真正使用的组件,能降低误识别率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为根据本发明实施例提供的安卓APK文件依赖组件识别方法的流程示意图;
图2为根据本发明实施例提供的安卓APK文件依赖组件识别装置的结构示意图;
图3为根据本发明实施例提供的电子设备的实体结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了克服现有技术的上述问题,本发明实施例提供一种安卓APK文件依赖组件识别方法及装置,其发明构思是,结合安卓的清单(AndroidManifest)文件和反编译工具,识别安卓APK文件真正使用(依赖)的组件,降低误识别率。
图1为根据本发明实施例提供的安卓APK文件依赖组件识别方法的流程示意图。如图1所示,该方法包括:步骤S101、解析安卓APK文件,获取代码文件和清单文件,根据代码文件和清单文件,获取安卓工程依赖的各组件的文件和package目录。
具体地,读取并解析安卓APK文件,可以获得lib文件夹、META-INF文件夹、res文件夹、AndroidManifest.xml文件和classes.dex文件。
AndroidManifest.xml文件为清单文件,classes.dex文件为代码文件。
解析安卓APK文件,可以通过APKTool实现。
安卓反编译技术是一种将通过Android SDK通过dx工具将Java字节码转换成Dalvik字节码的技术。安卓反编译至少包括3个工具,它们分别是:APKTool,dex2jar和jd-gui。
APKTool用于解析APK的res文件以及AndroidManifest.xml文件。
dex2jar用于将APK文件解压获得的classes.dex文件解析为后缀为jar的文件。
d-gui是java的反编译工具,其作用是将jar文件解析为Java文件,从而得到软件的核心代码。
AndroidManifest.xml是Android应用程序的配置文件,是一个用来描述Android应用“整体资讯”的设定文件,简单来说,相当于Android应用向Android系统“自我介绍”的配置文件,Android系统可以根据这个“自我介绍”完整地了解APK应用程序的资讯,每个Android应用程序都必须包含一个AndroidManifest.xml文件,且它的名字是固定的,不能修改。程序打包时,会对AndroidManifest.xml进行简单的编译,便于Android系统识别,编译之后的格式是AXML格式。
根据代码文件和清单文件进行分析,可以获取安卓APK文件涉及的全部文件和package目录;排除其中安卓自身的文件和package目录,剩下的部分就是安卓工程依赖的各组件的文件和package目录。
步骤S102、将安卓工程依赖的各组件的文件和package目录与安卓APK文件中Android SDK部分中各组件的jar的反编译结果进行比较,获取安卓APK文件中Android SDK部分所依赖的组件。
具体地,先对安卓APK文件中Android SDK部分中的各组件的jar进行反编译。
Android SDK指的是Android专属的软件开发工具包。
将反编译结果,与步骤S101获得的安卓工程依赖的各组件的文件和package目录进行比较。
如果是相同的java文件,则可以将该java文件对应的组件为Android SDK部分所依赖的组件。
步骤S103、将安卓工程依赖的各组件的文件和package目录与安卓APK文件中非Android SDK部分的各package依赖的jar的反编译结果进行比较,获取安卓APK文件中非Android SDK部分所依赖的组件。
具体地,对于安卓工程依赖的各组件的文件和package目录,除去Android SDK部分所依赖的组件的文件和package目录之外,对于剩余的部分中的任一文件和package目录,如果根据package名称,可以获取到反编译结果,则作为安卓APK文件中非Android SDK部分的各package依赖的jar的反编译结果。
将反编译结果,与步骤S101获得的安卓工程依赖的各组件的文件和package目录进行比较。
如果是相同的java文件,则可以将该java文件对应的组件为非Android SDK部分所依赖的组件。
将安卓APK文件中Android SDK部分所依赖的组件和非Android SDK部分所依赖的组件,作为该安卓APK文件依赖的组件。
本发明实施例通过解析安卓APK文件,获取代码文件和清单文件,根据代码文件和清单文件,获取安卓工程依赖的各组件的文件和package目录,将安卓工程依赖的各组件的文件和package目录,分别与安卓APK文件中Android SDK部分中各组件的jar的反编译结果和非Android SDK部分的各package依赖的jar的反编译结果进行比较,获取安卓APK文件依赖的组件,能识别出安卓APK文件真正使用的组件,能降低误识别率。
基于上述各实施例的内容,将安卓工程依赖的各组件的文件和package目录与安卓APK文件中Android SDK部分中各组件的jar的反编译结果进行比较,获取安卓APK文件中Android SDK部分所依赖的组件的具体步骤包括:对Android SDK部分中各组件的jar进行反编译,获取Android SDK部分中各组件的java文件和package目录。
具体地,对Android SDK部分中每一组件的jar进行反编译,获得每个组件jar的反编译结果,即每个组件的java文件和package目录。
将安卓工程依赖的各组件的文件和package目录,与Android SDK部分中各组件的java文件和package目录进行对比,根据对比结果,获取Android SDK部分所依赖的组件。
具体地,组件的文件和package目录构成路径。
将安卓工程依赖的每一组件的文件和package目录,与Android SDK部分中每一组件的java文件和package目录进行对比,如果构成的路径相同,则将该组件确定为AndroidSDK部分所依赖的组件,并可以识别出版本的列表和对应的Java文件。
本发明实施例通过将安卓工程依赖的各组件的文件和package目录,与安卓APK文件中Android SDK部分中各组件的jar的反编译结果进行比较,获取安卓APK文件依赖的组件,能识别出安卓APK文件真正使用的组件,能降低误识别率。
基于上述各实施例的内容,根据对比结果,获取Android SDK部分所依赖的组件的具体步骤包括:若判断获知Android SDK部分中任一组件的java文件和package目录,与安卓工程依赖的任一组件的文件和package目录相同,则将组件确定为Android SDK部分所依赖的组件。
具体地,将安卓工程依赖的每一组件的文件和package目录,与Android SDK部分中每一组件的java文件和package目录进行对比,如果构成的路径相同,则将该组件确定为Android SDK部分所依赖的组件,并可以识别出版本的列表和对应的Java文件。
本发明实施例通过将安卓工程依赖的各组件的文件和package目录,与安卓APK文件中Android SDK部分中各组件的jar的反编译结果进行比较,获取安卓APK文件依赖的组件,能识别出安卓APK文件真正使用的组件,能降低误识别率。
基于上述各实施例的内容,将安卓工程依赖的各组件的文件和package目录与安卓APK文件中非Android SDK部分的各package依赖的jar的反编译结果进行比较,获取安卓APK文件中非Android SDK部分所依赖的组件的具体步骤包括:根据安卓工程依赖的文件和package目录中,与Android SDK部分中每一组件的java文件和package目录均不相同的文件和package目录,确定安卓APK文件中非Android SDK部分的各package。
具体地,安卓工程依赖的文件和package目录中,除去Android SDK部分所依赖的组件的文件和package目录之外,剩余的部分为Android自身之外的部分依赖的组件的文件和package目录,从而可以确定安卓APK文件中非Android SDK部分的各package。
通过gradle下载非Android SDK部分的各package依赖的jar并进行反编译,获取非Android SDK部分中各组件的java文件和package目录。
具体地,安卓APK文件中非Android SDK部分的每一package,根据Java文件目录所得到的该package的名称,通过gradle从互联网或其他数据源进行下载,如果可以下载到该package依赖的jar,则对该package依赖的jar进行反编译,作为非Android SDK部分中该package对应的组件的jar的反编译结果,即该组件的java文件和package目录。
将安卓工程依赖的各组件的文件和package目录,与非Android SDK部分中各组件的java文件和package目录进行对比,根据对比结果,获取非Android SDK部分所依赖的组件。
具体地,组件的文件和package目录构成路径。
将安卓工程依赖的每一组件的文件和package目录,与Android SDK部分中每一组件的java文件和package目录进行对比,如果构成的路径相同,则将该组件确定为非Android SDK部分所依赖的组件,并可以识别出版本的列表和对应的Java文件。
本发明实施例通过将安卓工程依赖的各组件的文件和package目录,与安卓APK文件中非Android SDK部分中各组件的jar的反编译结果进行比较,获取安卓APK文件依赖的组件,能识别出安卓APK文件真正使用的组件,能降低误识别率。
基于上述各实施例的内容,根据对比结果,获取非Android SDK部分所依赖的组件的具体步骤包括:若判断获知非Android SDK部分中任一组件的java文件和package目录,与安卓工程依赖的任一组件的文件和package目录相同,则将组件确定为非Android SDK部分所依赖的组件。
具体地,将安卓工程依赖的每一组件的文件和package目录,与Android SDK部分中每一组件的java文件和package目录进行对比,如果构成的路径相同,则将该组件确定为非Android SDK部分所依赖的组件,并可以识别出版本的列表和对应的Java文件。
本发明实施例通过将安卓工程依赖的各组件的文件和package目录,与安卓APK文件中非Android SDK部分中各组件的jar的反编译结果进行比较,获取安卓APK文件依赖的组件,能识别出安卓APK文件真正使用的组件,能降低误识别率。
基于上述各实施例的内容,解析安卓APK文件,获取代码文件和清单文件,根据代码文件和清单文件,获取安卓工程依赖的各组件的文件和package目录的具体步骤包括:解析安卓APK文件,获取代码文件和清单文件。
具体地,可以通过APKTool解析安卓APK文件,获得lib文件夹、META-INF文件夹、res文件夹、AndroidManifest.xml文件和classes.dex文件。
将代码文件转换为jar后进行反编译,获取安卓工程的java文件,并对清单文件中的manifest标签进行识别,获取安卓工程的package目录。
具体地,通过dex2jar工具将classes.dex转换成jar文件,再使用jd-gui工具将jar文件反编译为java文件,作为安卓工程的java文件。
对AndroidManifest.xml分析manifest标签,识别出安卓工程的package目录。
根据安卓工程的java文件和package目录,获取安卓工程依赖的各组件的文件和package目录。
具体地,对安卓工程的java文件和package目录进行分析,排除其中安卓自身的文件和package目录,剩下的部分就是安卓工程依赖的各组件的文件和package目录。
本发明实施例通过解析安卓APK文件,获取代码文件和清单文件,根据代码文件和清单文件,获取安卓工程依赖的各组件的文件和package目录,从而能基于安卓工程依赖的各组件的文件和package目录进行文件分析,识别出安卓APK文件真正使用的组件,能降低误识别率。
基于上述各实施例的内容,将安卓工程依赖的各组件的文件和package目录与安卓APK文件中非Android SDK部分的各package依赖的jar的反编译结果进行比较,获取安卓APK文件中非Android SDK部分所依赖的组件之后,还包括:根据代码文件中的import的类,对安卓APK文件中Android SDK部分和非Android SDK部分所依赖的组件进行定位。
具体地,遍历安卓原始java文件中的所有代码,读取各import的类。
将每一上述import的类,与安卓APK文件中Android SDK部分和非Android SDK部分所依赖的组件的Java文件进行遍历,确定与该import的类匹配的组件,并确定安卓APK文件依赖的每一组件,在代码中的依赖位置。依赖位置,为组件匹配的import的类的位置。
本发明实施例根据代码文件中的import的类,对安卓APK文件中Android SDK部分和非Android SDK部分所依赖的组件进行定位,能确定组件在代码中的依赖位置。
图2为根据本发明实施例提供的安卓APK文件依赖组件识别装置的结构示意图。基于上述各实施例的内容,如图2所示,该装置包括解析模块201、第一比对模块202和第二比对模块203,其中:
解析模块201,用于解析安卓APK文件,获取代码文件和清单文件,根据代码文件和清单文件,获取安卓工程依赖的各组件的文件和package目录;
第一比对模块202,用于将安卓工程依赖的各组件的文件和package目录与安卓APK文件中Android SDK部分中各组件的jar的反编译结果进行比较,获取安卓APK文件中Android SDK部分所依赖的组件;
第二比对模块203,用于将安卓工程依赖的各组件的文件和package目录与安卓APK文件中非Android SDK部分的各package依赖的jar的反编译结果进行比较,获取安卓APK文件中非Android SDK部分所依赖的组件。
具体地,解析模块201、第一比对模块202和第二比对模块203依次电连接。
解析模块201读取并解析安卓APK文件,可以获得lib文件夹、META-INF文件夹、res文件夹、AndroidManifest.xml文件和classes.dex文件;根据代码文件和清单文件进行分析,可以获取安卓APK文件涉及的全部文件和package目录;排除其中安卓自身的文件和package目录,剩下的部分就是安卓工程依赖的各组件的文件和package目录。
第一比对模块202对安卓APK文件中Android SDK部分中的各组件的jar进行反编译;将反编译结果,与安卓工程依赖的各组件的文件和package目录进行比较;如果是相同的java文件,则可以将该java文件对应的组件为Android SDK部分所依赖的组件
第二比对模块203对于安卓工程依赖的各组件的文件和package目录,除去Android SDK部分所依赖的组件的文件和package目录之外,对于剩余的部分中的任一文件和package目录,如果根据package名称,可以获取到反编译结果,则作为安卓APK文件中非Android SDK部分的各package依赖的jar的反编译结果;将反编译结果,与安卓工程依赖的各组件的文件和package目录进行比较;如果是相同的java文件,则可以将该java文件对应的组件为非Android SDK部分所依赖的组件。
本发明实施例提供的安卓APK文件依赖组件识别装置,用于执行本发明上述各实施例提供的安卓APK文件依赖组件识别方法,该安卓APK文件依赖组件识别装置包括的各模块实现相应功能的具体方法和流程详见上述安卓APK文件依赖组件识别方法的实施例,此处不再赘述。
该安卓APK文件依赖组件识别装置用于前述各实施例的安卓APK文件依赖组件识别方法。因此,在前述各实施例中的安卓APK文件依赖组件识别方法中的描述和定义,可以用于本发明实施例中各执行模块的理解。
本发明实施例通过解析安卓APK文件,获取代码文件和清单文件,根据代码文件和清单文件,获取安卓工程依赖的各组件的文件和package目录,将安卓工程依赖的各组件的文件和package目录,分别与安卓APK文件中Android SDK部分中各组件的jar的反编译结果和非Android SDK部分的各package依赖的jar的反编译结果进行比较,获取安卓APK文件依赖的组件,能识别出安卓APK文件真正使用的组件,能降低误识别率。
图3为根据本发明实施例提供的电子设备的实体结构示意图。基于上述实施例的内容,如图3所示,该电子设备可以包括:处理器(processor)301、存储器(memory)302和总线303;其中,处理器301和存储器302通过总线303完成相互间的通信;处理器301用于调用存储在存储器302中并可在处理器301上运行的计算机程序指令,以执行上述各方法实施例所提供的安卓APK文件依赖组件识别方法,例如包括:解析安卓APK文件,获取代码文件和清单文件,根据代码文件和清单文件,获取安卓工程依赖的各组件的文件和package目录;将安卓工程依赖的各组件的文件和package目录与安卓APK文件中Android SDK部分中各组件的jar的反编译结果进行比较,获取安卓APK文件中Android SDK部分所依赖的组件;将安卓工程依赖的各组件的文件和package目录与安卓APK文件中非Android SDK部分的各package依赖的jar的反编译结果进行比较,获取安卓APK文件中非Android SDK部分所依赖的组件。
本发明另一实施例公开一种计算机程序产品,计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,计算机程序包括程序指令,当程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的安卓APK文件依赖组件识别方法,例如包括:解析安卓APK文件,获取代码文件和清单文件,根据代码文件和清单文件,获取安卓工程依赖的各组件的文件和package目录;将安卓工程依赖的各组件的文件和package目录与安卓APK文件中Android SDK部分中各组件的jar的反编译结果进行比较,获取安卓APK文件中Android SDK部分所依赖的组件;将安卓工程依赖的各组件的文件和package目录与安卓APK文件中非Android SDK部分的各package依赖的jar的反编译结果进行比较,获取安卓APK文件中非Android SDK部分所依赖的组件。
此外,上述的存储器302中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本发明另一实施例提供一种非暂态计算机可读存储介质,非暂态计算机可读存储介质存储计算机指令,计算机指令使计算机执行上述各方法实施例所提供的安卓APK文件依赖组件识别方法,例如包括:解析安卓APK文件,获取代码文件和清单文件,根据代码文件和清单文件,获取安卓工程依赖的各组件的文件和package目录;将安卓工程依赖的各组件的文件和package目录与安卓APK文件中Android SDK部分中各组件的jar的反编译结果进行比较,获取安卓APK文件中Android SDK部分所依赖的组件;将安卓工程依赖的各组件的文件和package目录与安卓APK文件中非Android SDK部分的各package依赖的jar的反编译结果进行比较,获取安卓APK文件中非Android SDK部分所依赖的组件。
以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行上述各个实施例或者实施例的某些部分的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种安卓APK文件依赖组件识别方法,其特征在于,包括:
解析安卓APK文件,获取代码文件和清单文件,根据所述代码文件和清单文件,获取安卓工程依赖的各组件的文件和package目录;
将所述安卓工程依赖的各组件的文件和package目录与所述安卓APK文件中AndroidSDK部分中各组件的jar的反编译结果进行比较,获取所述安卓APK文件中Android SDK部分所依赖的组件;
将所述安卓工程依赖的各组件的文件和package目录与所述安卓APK文件中非AndroidSDK部分的各package依赖的jar的反编译结果进行比较,获取所述安卓APK文件中非Android SDK部分所依赖的组件。
2.根据权利要求1所述的安卓APK文件依赖组件识别方法,其特征在于,所述将所述安卓工程依赖的各组件的文件和package目录与所述安卓APK文件中Android SDK部分中各组件的jar的反编译结果进行比较,获取所述安卓APK文件中Android SDK部分所依赖的组件的具体步骤包括:
对所述Android SDK部分中各组件的jar进行反编译,获取所述Android SDK部分中各组件的java文件和package目录;
将所述安卓工程依赖的各组件的文件和package目录,与所述Android SDK部分中各组件的java文件和package目录进行对比,根据对比结果,获取所述Android SDK部分所依赖的组件。
3.根据权利要求2所述的安卓APK文件依赖组件识别方法,其特征在于,所述将所述安卓工程依赖的各组件的文件和package目录与所述安卓APK文件中非Android SDK部分的各package依赖的jar的反编译结果进行比较,获取所述安卓APK文件中非Android SDK部分所依赖的组件的具体步骤包括:
根据所述安卓工程依赖的文件和package目录中,与所述Android SDK部分中每一组件的java文件和package目录均不相同的文件和package目录,确定所述安卓APK文件中非Android SDK部分的各package;
通过gradle下载所述非Android SDK部分的各package依赖的jar并进行反编译,获取所述非Android SDK部分中各组件的java文件和package目录;
将所述安卓工程依赖的各组件的文件和package目录,与所述非Android SDK部分中各组件的java文件和package目录进行对比,根据对比结果,获取所述非Android SDK部分所依赖的组件。
4.根据权利要求2所述的安卓APK文件依赖组件识别方法,其特征在于,所述根据对比结果,获取所述Android SDK部分所依赖的组件的具体步骤包括:
若判断获知所述Android SDK部分中任一所述组件的java文件和package目录,与所述安卓工程依赖的任一组件的文件和package目录相同,则将所述组件确定为所述AndroidSDK部分所依赖的组件。
5.根据权利要求3所述的安卓APK文件依赖组件识别方法,其特征在于,所述根据对比结果,获取所述非Android SDK部分所依赖的组件的具体步骤包括:
若判断获知所述非Android SDK部分中任一所述组件的java文件和package目录,与所述安卓工程依赖的任一组件的文件和package目录相同,则将所述组件确定为所述非Android SDK部分所依赖的组件。
6.根据权利要求1所述的安卓APK文件依赖组件识别方法,其特征在于,所述解析安卓APK文件,获取代码文件和清单文件,根据所述代码文件和清单文件,获取安卓工程依赖的各组件的文件和package目录的具体步骤包括:
解析安卓APK文件,获取代码文件和清单文件;
将所述代码文件转换为jar后进行反编译,获取所述安卓工程的java文件,并对所述清单文件中的manifest标签进行识别,获取所述安卓工程的package目录;
根据所述安卓工程的java文件和package目录,获取安卓工程依赖的各组件的文件和package目录。
7.根据权利要求1至6任一所述的安卓APK文件依赖组件识别方法,其特征在于,所述将所述安卓工程依赖的各组件的文件和package目录与所述安卓APK文件中非Android SDK部分的各package依赖的jar的反编译结果进行比较,获取所述安卓APK文件中非Android SDK部分所依赖的组件之后,还包括:
根据所述代码文件中的import的类,对所述安卓APK文件中Android SDK部分和非Android SDK部分所依赖的组件进行定位。
8.一种安卓APK文件依赖组件识别装置,其特征在于,包括:
解析模块,用于解析安卓APK文件,获取代码文件和清单文件,根据所述代码文件和清单文件,获取安卓工程依赖的各组件的文件和package目录;
第一比对模块,用于将所述安卓工程依赖的各组件的文件和package目录与所述安卓APK文件中Android SDK部分中各组件的jar的反编译结果进行比较,获取所述安卓APK文件中Android SDK部分所依赖的组件;
第二比对模块,用于将所述安卓工程依赖的各组件的文件和package目录与所述安卓APK文件中非Android SDK部分的各package依赖的jar的反编译结果进行比较,获取所述安卓APK文件中非Android SDK部分所依赖的组件。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任一项所述的安卓APK文件依赖组件识别方法的步骤。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至7任一项所述的安卓APK文件依赖组件识别方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010657866.5A CN112000339B (zh) | 2020-07-09 | 2020-07-09 | 安卓apk文件依赖组件识别方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010657866.5A CN112000339B (zh) | 2020-07-09 | 2020-07-09 | 安卓apk文件依赖组件识别方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112000339A true CN112000339A (zh) | 2020-11-27 |
CN112000339B CN112000339B (zh) | 2021-09-21 |
Family
ID=73467395
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010657866.5A Active CN112000339B (zh) | 2020-07-09 | 2020-07-09 | 安卓apk文件依赖组件识别方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112000339B (zh) |
Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104063318A (zh) * | 2014-06-24 | 2014-09-24 | 湘潭大学 | Android应用相似性快速检测方法 |
US8869120B2 (en) * | 2007-11-20 | 2014-10-21 | National Ict Australia Limited | Multi language software code analysis |
CN104123493A (zh) * | 2014-07-31 | 2014-10-29 | 百度在线网络技术(北京)有限公司 | 应用程序的安全性检测方法和装置 |
CN104424402A (zh) * | 2013-08-28 | 2015-03-18 | 卓易畅想(北京)科技有限公司 | 一种用于检测盗版应用程序的方法及装置 |
CN105630684A (zh) * | 2016-01-26 | 2016-06-01 | 百度在线网络技术(北京)有限公司 | 软件开发工具包识别方法和装置 |
CN106502879A (zh) * | 2015-09-07 | 2017-03-15 | 中国移动通信集团公司 | 一种实现应用程序安全性检测的方法及装置 |
US20170337372A1 (en) * | 2016-05-18 | 2017-11-23 | Trustlook Inc. | Maliciousness Categorization of Application Packages Based on Dynamic Analysis |
US20180018459A1 (en) * | 2016-07-15 | 2018-01-18 | Trustlook Inc. | Notification of Maliciousness Categorization of Application Programs for Mobile Devices |
US20180096146A1 (en) * | 2015-11-18 | 2018-04-05 | Tencent Technology (Shenzhen) Company Limited | Method and apparatus for identifying malicious software |
US20180253298A1 (en) * | 2017-03-03 | 2018-09-06 | Foundation Of Soongsil University-Industry Cooperation | Android dynamic loading file extraction method, recording medium and system for performing the method |
CN108549535A (zh) * | 2018-03-16 | 2018-09-18 | 北京大学 | 一种基于文件依赖关系的高效程序解析方法和系统 |
CN111045670A (zh) * | 2019-12-13 | 2020-04-21 | 中国科学院信息工程研究所 | 一种二进制代码与源代码间复用关系的识别方法与装置 |
CN111124486A (zh) * | 2019-12-05 | 2020-05-08 | 任子行网络技术股份有限公司 | 发现安卓应用引用第三方工具的方法、系统及存储介质 |
-
2020
- 2020-07-09 CN CN202010657866.5A patent/CN112000339B/zh active Active
Patent Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8869120B2 (en) * | 2007-11-20 | 2014-10-21 | National Ict Australia Limited | Multi language software code analysis |
CN104424402A (zh) * | 2013-08-28 | 2015-03-18 | 卓易畅想(北京)科技有限公司 | 一种用于检测盗版应用程序的方法及装置 |
CN104063318A (zh) * | 2014-06-24 | 2014-09-24 | 湘潭大学 | Android应用相似性快速检测方法 |
CN104123493A (zh) * | 2014-07-31 | 2014-10-29 | 百度在线网络技术(北京)有限公司 | 应用程序的安全性检测方法和装置 |
CN106502879A (zh) * | 2015-09-07 | 2017-03-15 | 中国移动通信集团公司 | 一种实现应用程序安全性检测的方法及装置 |
US20180096146A1 (en) * | 2015-11-18 | 2018-04-05 | Tencent Technology (Shenzhen) Company Limited | Method and apparatus for identifying malicious software |
CN105630684A (zh) * | 2016-01-26 | 2016-06-01 | 百度在线网络技术(北京)有限公司 | 软件开发工具包识别方法和装置 |
US20170337372A1 (en) * | 2016-05-18 | 2017-11-23 | Trustlook Inc. | Maliciousness Categorization of Application Packages Based on Dynamic Analysis |
US20180018459A1 (en) * | 2016-07-15 | 2018-01-18 | Trustlook Inc. | Notification of Maliciousness Categorization of Application Programs for Mobile Devices |
US20180253298A1 (en) * | 2017-03-03 | 2018-09-06 | Foundation Of Soongsil University-Industry Cooperation | Android dynamic loading file extraction method, recording medium and system for performing the method |
CN108549535A (zh) * | 2018-03-16 | 2018-09-18 | 北京大学 | 一种基于文件依赖关系的高效程序解析方法和系统 |
CN111124486A (zh) * | 2019-12-05 | 2020-05-08 | 任子行网络技术股份有限公司 | 发现安卓应用引用第三方工具的方法、系统及存储介质 |
CN111045670A (zh) * | 2019-12-13 | 2020-04-21 | 中国科学院信息工程研究所 | 一种二进制代码与源代码间复用关系的识别方法与装置 |
Non-Patent Citations (4)
Title |
---|
RUO ANDO: "An empirical study of third party APK"s URL using scriptable API and fast identifier-specific filter", 《2017 IEEE 9TH INTERNATIONAL CONFERENCE ON COMMUNICATION SOFTWARE AND NETWORKS (ICCSN)》 * |
东哥: "如何自动识别APK中使用了哪些SDK", 《HTTPS://WWW.LUOXUDONG.COM/210.HTML》 * |
凯文•贝利格里姆斯: "《Gradle for Android 中文版》", 31 October 2016 * |
孙聪: "《软件逆向工程原理与实践》", 31 March 2018 * |
Also Published As
Publication number | Publication date |
---|---|
CN112000339B (zh) | 2021-09-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10152594B2 (en) | Method and device for identifying virus APK | |
US9600668B2 (en) | Method and device for extracting characteristic code of APK virus | |
CN111967017B (zh) | 生成依赖关系的方法、装置、终端设备及存储介质 | |
US20080196004A1 (en) | Apparatus and method for developing component-based software | |
CN108920359B (zh) | 应用程序的测试方法、装置、存储介质和电子装置 | |
CN110069259B (zh) | 基于idl文件的解析方法、装置、电子设备和存储介质 | |
CN112965720B (zh) | 一种组件编译方法、装置、设备及计算机可读存储介质 | |
CN106055375B (zh) | 应用程序安装方法及装置 | |
CN112804097A (zh) | 私有云的部署方法、装置及服务器 | |
CN114328274A (zh) | 测试模板生成方法、装置、计算机设备和存储介质 | |
CN114816816A (zh) | 崩溃堆栈信息处理方法、装置、设备及存储介质 | |
CN111752820A (zh) | gRPC接口的压力测试方法、计算机设备和存储介质 | |
CN112000339B (zh) | 安卓apk文件依赖组件识别方法及装置 | |
CN110941443B (zh) | 修改sdk中文件名的方法、装置及电子设备 | |
CN111782239A (zh) | 软件打包和源码版本信息获取方法、装置及存储介质 | |
CN115756484A (zh) | 预编译目标代码仓库确定方法及装置、存储介质 | |
CN106778270B (zh) | 一种恶意应用程序的检测方法及系统 | |
CN114417347A (zh) | 应用程序的漏洞检测方法、装置、设备、存储介质和程序 | |
CN107291494B (zh) | 应用程序安装包的生成方法及装置 | |
CN111273940B (zh) | 将程序文件上传至代码仓库的方法及装置 | |
CN112953721A (zh) | 一种ipa文件的解析方法、装置、设备及存储介质 | |
US10726109B2 (en) | Method and system for identifying whether an application is genuine by means of digital watermarks | |
CN110399295B (zh) | 一种基于原始文件名的应用程序测试方法及装置 | |
US11940870B2 (en) | Method and device for automatically detecting potential failures in mobile applications | |
CN110716746B (zh) | 将rn样式代码转换为小程序样式代码的方法及装置 |
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 |