CN112286706B - 安卓应用的应用信息远程快速获取方法及相关设备 - Google Patents
安卓应用的应用信息远程快速获取方法及相关设备 Download PDFInfo
- Publication number
- CN112286706B CN112286706B CN202011556513.2A CN202011556513A CN112286706B CN 112286706 B CN112286706 B CN 112286706B CN 202011556513 A CN202011556513 A CN 202011556513A CN 112286706 B CN112286706 B CN 112286706B
- Authority
- CN
- China
- Prior art keywords
- file
- central directory
- apk file
- information
- content
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/544—Remote
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本说明书一个或多个实施例提供一种安卓应用的应用信息远程快速获取方法及相关设备;所述方法包括:首先调查Android应用信息在APK中所处文件,明确获取完整应用信息必需获取到的目标文件列表。然后根据APK文件的Zip压缩文件结构,对APK文件进行反向区域查找,依次得到End of Central Directory Record区域、Central Directory区域及各目标文件在Central Directory区域中的File Header文件信息结构体。进一步的,根据文件信息结构体记录的文件起止偏移地址,直接下载目标文件内容;最后,根据不同目标文件自身结构特征,分析不同应用信息所处位置,获取其具体内容。
Description
技术领域
本说明书一个或多个实施例涉及移动端应用信息采集技术领域,尤其涉及一种安卓应用的应用信息远程快速获取方法及相关设备。
背景技术
随着智能手机的广泛普及以及手机应用的日益丰富,手机用户在社交、娱乐、工作等各方面与智能手机及其应用的联系也日益紧密。监管移动互联网各平台中Android应用发布情况成为保障移动安全的首要任务,统计Android应用发布情况,首先需要对平台上发布的各Android应用的基本信息进行获取。
Android应用信息获取主要方法是先获取完整的Android应用安装文件即APK文件,然后将其按照Zip文件进行解压,分析META-INF文件夹下电子签名文件中的证书相关信息,将AndroidManifest.xml文件进行反编译,并按照ElementTree结构分析获取不同元素中记录的不同的应用信息或资源索引,将resources.arsc反编译为res文件夹下的资源文件,或直接对.arsc文件结构进行分析,从而得到资源索引对应的资源字符串值或资源路径字符串值,最终获取所有Android应用目标信息。
现有方法均是基于一个完整的APK文件进行文件的分析及目标信息的提取,但是结合实际应用场景,移动应用市场监管的对象是急剧增长的各大平台Android应用,监管的要求还需尽可能完整、准确、实时,因此仅提高APK文件的反编译及信息查找效率是不够的,还需在APK文件这个源头进行进一步的优化,完整APK文件的下载时间是现有工具分析获取APK信息所消耗时间的数倍,同时大量应用下载消耗的流量及存储等资源占用情况也不允许持续的下载新上架的Android应用安装文件。
基于此,需要一种在不下载完整APK文件的情况下仍可快速、准确、完整获取Android应用信息的方案。
发明内容
有鉴于此,本说明书一个或多个实施例的目的在于提出一种安卓应用的应用信息远程快速获取方法及相关设备。
基于上述目的,本说明书一个或多个实施例提供了一种安卓应用的应用信息远程快速获取方法,包括:
请求服务器中的APK文件,得到服务器响应后获取所述APK文件;
寻找所述APK文件中的End of Central Directory Record区域,根据所述End ofCentral Directory Record区域中记录的Central Directory区域的相关信息计算出所述Central Directory区域的地址;
根据所述Central Directory区域的地址,在Central Directory区域的内容中,寻找包含所述APK文件应用信息的File Header结构体;
根据所述File Header结构体,计算所述File Header结构体对应的文件数据在所述APK文件中的起止位置的偏移地址,根据所述偏移地址,向服务器请求获取所述APK文件中对应的文件数据;
处理所述APK文件中对应的文件数据,得到安卓应用的目标信息。
基于同一发明构思,本说明书一个或多个实施例还提供了一种安卓应用的应用信息远程快速获取装置,包括:
请求模块,被配置为请求服务器中的APK文件,得到服务器响应后获取所述APK文件;
计算模块,被配置为寻找所述APK文件中的End of Central Directory Record区域,根据所述End of Central Directory Record区域中记录的Central Directory区域的相关信息计算出所述Central Directory区域的地址;
搜索模块,被配置为根据所述Central Directory区域的地址,在CentralDirectory区域的内容中,寻找包含所述APK文件应用信息的File Header结构体;
获取模块,被配置为根据所述File Header结构体,计算所述File Header结构体对应的文件数据在所述APK文件中的起止位置的偏移地址,根据所述偏移地址,向服务器请求获取所述APK文件中对应的文件数据;
处理模块,被配置为处理所述APK文件中对应的文件数据,得到安卓应用的目标信息。
基于同一发明构思,本说明书一个或多个实施例还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上任意一项所述的方法。
基于同一发明构思,本说明书一个或多个实施例还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行如上任一所述方法。
从上面所述可以看出,本说明书一个或多个实施例提供的安卓应用的应用信息远程快速获取方法及相关设备,通过对服务器请求以及APK文件结构的利用,在完整、准确获取APP基本信息的基础上,实现了信息获取速度的提升,以及流量、存储资源占用的减少,从而有效提高了对移动互联网中移动应用的监管能力与反应速度。
附图说明
为了更清楚地说明本说明书一个或多个实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书一个或多个实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本说明书一个或多个实施例的安卓应用的应用信息远程快速获取方法流程图;
图2为本说明书一个或多个实施例的寻找区域和计算区域地址流程图;
图3为本说明书一个或多个实施例的寻找结构体的流程图;
图4为本说明书一个或多个实施例的处理APK文件中对应的文件数据的流程图;
图5为本说明书一个或多个实施例的技术效果对比示意图;
图6为本说明书一个或多个实施例的安卓应用的应用信息远程快速获取装置结构示意图;
图7为本说明书一个或多个实施例的电子设备结构示意图。
具体实施方式
为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开进一步详细说明。
需要说明的是,除非另外定义,本说明书一个或多个实施例使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本说明书一个或多个实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。
如背景技术部分所述,现有的安卓应用的应用信息远程快速获取方案还难以满足业务需要。有鉴于此,本说明书一个或多个实施例提供了一种安卓应用的应用信息远程快速获取方案,具体的,首先调查Android应用信息在APK中所处文件,明确获取完整应用信息必需获取到的目标文件列表。然后根据APK文件的Zip压缩文件结构,对APK文件进行反向区域查找,依次得到End of Central Directory Record区域、Central Directory区域及各目标文件在Central Directory区域中的File Header文件信息结构体。进一步的,根据文件信息结构体记录的文件起止偏移地址,利用HTTP范围获取方式,直接下载目标文件内容;最后,根据不同目标文件自身结构特征,分析不同应用信息所处位置,获取其具体内容。
可见,本说明书一个或多个实施例的安卓应用的应用信息远程快速获取方案,依据Zip文件结构,依次寻找End of Central Directory Record区域、Central Directory区域、目标文件File Header结构,以快速得到目标文件在APK文件中的偏移地址,从而快速获取目标文件以供后续分析和信息提取。提出根据应用信息所在文件有目的的获取APK中必要文件的方法,能够显著提高信息获取速率,降低宽带、存储等资源占用率。
以下,通过具体的实施例来详细说明本说明书一个或多个实施例的技术方案。
参考图1,本说明书一个安卓应用的应用信息远程快速获取方法,包括以下步骤:
步骤S101、请求获取服务器中的APK文件,得到服务器响应后获取所述APK文件。
本步骤中,Android应用的安装文件即APK文件位于外部服务器上,一般需利用HTTP协议访问APP下载链接,向外部服务器请求获取APK文件。在得到的服务器响应中,可根据其头部“Content-Length”字段的值获取APK文件大小,以获取在区域查找过程中APK文件内容的最大偏移量,还可根据其头部“Access-Ranges”字段的值查看是否支持范围请求,若支持该字段值为“bytes”,即允许服务器只发送文件中以bytes为界定范围单位的一部分内容到客户端;在发送给服务器的请求中,可在其头部增加Range字段,例如:“Range:bytes=500-1000”用来指定获取文件500至1000bytes范围内的内容,从而获取必要文件的内容。
步骤S102、寻找所述APK文件中的End of Central Directory Record区域,根据所述End of Central Directory Record区域中记录的Central Directory区域的相关信息计算出所述Central Directory区域的地址。
在本说明书的一些实施例中,寻找区域和计算区域地址可以具体参考图2所示的流程,具体可以包括:
S201、初始化得到第一变量和第二变量,所述第一变量记录剩余未匹配区域大小,初始值为所述APK文件大小,从所述APK文件末尾开始匹配End of Central DirectoryRecord区域,所述第二变量标记Central Directory区域发现情况,初始值为false,表示未发现正确的Central Directory区域。
在本实施例中,记第一变量为data_pos,第二变量为flag,所述APK文件大小记为filelen。
S202、若所述第二变量值为false,且所述第一变量大于0,则不断向前匹配,每次最多获取APK文件中第一预设长度的内容,对所述第一变量和所述第一预设长度进行大小的判断。
在本实施例中,当flag值为false,且data_pos > 0时,表示还未发现正确的Central Directory区域,且此时还未对全部APK内容进行End of Central DirectoryRecord区域的匹配,第一预设长度记为len。
S203、若所述第一变量小于所述第一预设长度,则请求获取所述APK文件剩余的内容,更新所述第一变量的值为0,并判断Central Directory区域结束标识是否在所述APK文件剩余内容中。
在本实施例中,若data_pos<len,表示所剩APK文件大小未超过一次获取内容限制,所述 Central Directory区域结束标识为0x06054b50。
S204、如果在,则定位出所述Central Directory区域结束标识在获取的所述APK文件剩余内容中的偏移地址,根据所述偏移地址和所述APK文件大小得到所述End ofCentral Directory Record区域在所述APK文件中的起止地址,向服务器请求获取所述Endof Central Directory Record区域的内容。
本实施例中,定位出的偏移地址记为p,则End of Central Directory Record区域在APK文件中的起止地址为[p,file_len-1]。
S205、如果不在,则经所述第二变量和所述第一变量的判断后,未能发现CentralDirectory区域,返回错误信息。
S206、若第一变量大于或等于所述第一预设长度,则向前获取所述第一预设长度的内容,更新所述第一变量的值,并判断Central Directory区域结束标识是否在所述第一预设长度的内容中。
在本实施例中,data_pos≥len,表示剩余文件大小超出限制,向前获取len长度的内容data,得到的起止地址为[data_pos-len,data_pos-1],修改data_pos值为data_pos-len。
S207、如果在,则定位所述Central Directory区域结束标识在所述第一预设长度的内容中的偏移地址,根据所述第一预设长度的内容中的偏移地址和该段内容在所述APK文件中的起始偏移地址得到End of Central Directory Record区域在所述APK文件中的起始地址,向服务器请求获取所述End of Central Directory Record区域的内容。
在本实施例中,偏移地址p与该段内容在APK文件中的起始地址偏移data_offset共同构成End of Central Directory Record区域在APK文件中的起始地址,End ofCentral Directory Record区域在APK文件中的起止地址为[data_offset+p,file_len-1]。
S208、如果不在,首先检查所述Central Directory区域结束标识的高位第一字节是否存在于所述第一预设长度的内容的前三字节中。
S209、如果存在,则在继续向前截取第一预设长度的内容前,后移三字节,更新所述第一变量的值,返回S202。
在本步骤中,如果存在,则说明之前截取的数据中可能截取了部分标识,将data_pos更新为data_pos+3,以在下次获取完整的标识。
S210、如果不存在,则继续向前截取所述APK文件内容,更新所述第一变量的值,返回S202。
S211、在获取到的End of Central Directory Record区域内容中,查找偏移为12字节、占位为4字节的Central Directory区域大小的信息和偏移为16字节、占位为4字节的Central Directory区域起始位置在所述APK文件中的偏移信息。
在本实施例中,Central Directory区域大小的信息记为cd_size,CentralDirectory区域起始位置在APK文件中的偏移信息记为cd_offset。
S212、根据S211中获取的两个信息定位所述APK文件中可能的Central Directory区域,首先将获取到的Little-Endian格式的信息转换为正常次序,计算该区域的起始和结束位置的偏移地址,然后请求服务器,获取所述APK文件中该部分内容。
在本实施例中,所述该区域的起始和结束位置的偏移地址经过计算为[cd_offset,cd_offset+cd_size-1]。
S213、判断所述APK文件中该部分内容的前四个字节是否为Central Directory中第一个File Header结构的固定起始标识。
本实施例中,所述File Header结构的固定起始标识为0x02014b50。
S214、若是,则修改所述第二变量值为true,完成所述Central Directory区域的地址的计算。
S215、若不是,且第一变量大于0时,返回S202。
S216、若不是,且第一变量小于等于0时,则返回错误信息。
步骤S103、根据所述Central Directory区域的地址,在Central Directory区域的内容中,寻找包含所述APK文件应用信息的File Header结构体。
在本步骤中,包含所述APK文件应用信息的File Header结构体,包括:AndroidManifest.xml和resources.arsc文件的File Header结构体,以及META-INF文件夹下扩展名为RSA、EC、DSA、SF文件的File Header结构体。
在本说明书的一些实施例中,寻找结构体的过程具体可以参考图3所示的流程,具体可以包括:
S301、初始化变量未匹配区域在Central Directory区域的起始偏移pos,初始值为0。
S302、获取第二预设长度的Central Directory区域内容,当pos小于所述第二预设长度时,对未进行File Header结构体判断的内容的前四字节进行判断,检查是否为新的File Header结构的起始标识;
本实施例中,在获取到的第二预设长度(cd_size)的Central Directory区域内容中,当pos<cd_size时,对未进行File Header结构体判断的内容[pos,cd_size-1]的前四字节[pos,pos+3]进行判断,检查是否为新的File Header结构的起始标识0x02014b50。
S303、若不是,向后移动一字节,更新pos为pos+1,返回S302。
S304、若是,跳转至S305。
S305、获取所述File Header结构内容中偏移为28字节、占位为2字节的文件名称长度,偏移为30字节、占位为2字节的扩展字段长度,偏移为32字节、占位为2字节的文件注释长度,并将其Little-Endian格式转为正常次序从而获取各长度值,计算该File Header结构的大小。
在本实施例中,若文件名称长度为n,扩展字段长度为m、文件注释长度为k,则该File Header结构的大小fh_size =(46+n+m+k)B。
S306、获取所述File Header结构内容中偏移为46字节、占位为n字节的文件名信息,如果文件名为AndroidManifest.xml、resources.arsc、META-INF/*.RSA、META-INF/*.EC、META-INF/*.DSA、META-INF/*.SF,则以字典结构保留所述File Header结构中文件名、文件实体在所述APK文件中的偏移、压缩后文件大小、文件名称长度、扩展字段长度的信息。
S307、向后移动所述File Header结构体的长度,更新pos值,返回S302,直到找到所有包含所述APK文件应用信息的File Header结构体。
本实施例中,更新pos值为pos+fh_size。
步骤S104、根据所述File Header结构体,计算所述File Header结构体对应的文件数据在所述APK文件中的起止位置的偏移地址,根据所述偏移地址,向服务器请求获取所述APK文件中对应的文件数据。
本实施例中,对已保存的“AndroidManifest.xml”及“resources.arsc”的文件信息,计算其各自在APK文件中的起止位置的偏移地址[file_offset, file_offset+30+n+m+compressed_size-1],然后向外部服务器请求获取APK文件中这两个文件的内容,对已保存的“META-INF/*.RSA”、“META-INF/*.EC”、“META-INF/*.DSA”及“META-INF/*.SF”的文件信息,检查扩展名为RSA、EC、DSA的文件是否对应有相同主文件名且扩展名为SF的文件,若有对应SF文件,则计算该扩展名为RSA、EC或DSA的文件在APK文件中的起止位置的偏移地址[file_offset, file_offset+30+n+m+compressed_size-1],然后向外部服务器请求获取APK文件中该文件的内容。
步骤S105、处理所述APK文件中对应的文件数据,得到安卓应用的目标信息。
在本说明书的一些实施例中,处理所述APK文件中对应的文件数据的过程具体可以参考图4所示的流程,具体可以包括:
S401、反编译AndroidManifest.xml文件,然后将其解析为ElementTree结构。
在本步骤中,使用AXMLPrinter反编译AndroidManifest.xml文件。
S402、遍历所述ElementTree结构根节点元素的所有属性,找出含关键字的属性名,获取对应属性值,得到部分应用信息。
在本步骤中,对于ElementTree树型结构的根节点<manifest>,其“package”、“android:versionCode”及“android:versionName”属性声明了应用的包名、版本代码、版本号。
S403、对于根节点下的子节点,找到所有与应用权限授予相关的节点,然后遍历这些节点的属性,记录对应的属性值,得到授予应用的权限信息。
在本步骤中,使用findall()方法及标签名“uses-permission”找到所有与应用权限授予相关的节点。
S404、找到声明应用程序默认属性及所含组件的节点,遍历节点的属性,记录含关键字icon及label的元素属性所对应的的属性值,获取图标及应用名资源的索引。
在本步骤中,使用findall()方法及标签名“application”找到声明应用程序默认属性及所含组件的节点。
S405、从获得的图标及应用名资源索引中提取Package ID、Type ID、Entry ID,并根据所述Package ID、Type ID、Entry ID值在resources.arsc文件中依次定位到资源所属的Package信息块、所属的Type Spec类型规范数据块、所属类型资源项数据块中的配置信息、相应配置下该资源的ResTable_entry和Res_value数据块,然后根据所述Res_value数据块中含有的数据索引,在资源项值字符串资源池中获取相应的字符串偏移,获取到应用名字符串,和图片文件路径的字符串信息。
S406、根据所述图标文件路径字符串,在Central Directory区域中,查找该图片资源的File Header结构,根据File Header结构中的信息计算图标文件在所述APK文件中的起始和结束的偏移地址,向服务器请求获取所述APK文件中该图片的内容。
S407、利用asn1crypto.cms库对*.RSA、*.EC或*.DSA文件内容以PKCS#7格式进行解析,获取content结构下certificates证书链部分内容。
S408、获取certificates证书链结构中的0号证书内容,利用asn1crypto.x509库按照X.509版本三证书格式进行解析,获取开发者证书指纹信息。
可见,在本实施例中,通过引入HTTP范围获取功能,包含应用信息的目标文件的获取与应用信息的分析在一个流程中完成了,对于移动互联网监管中需对大量Android应用信息进行提取的情况,极大提高了对Android应用的监管能力和反应速度。在无需下载完整APK文件的情况下,直接确定含有应用信息的目标文件在APK文件中的偏移位置后请求该部分内容。针对单个APK文件,仅需下载包含应用信息的目标文件及部分过程文件,无需保存APK文件,仅需保存获取到的应用信息,大大减少了流量、存储的资源消耗。
在本说明书一个或多个实施例中,作为一个对比的示例,参考图5,现有技术常采用两种方法获取Android应用信息:方法一,下载APK文件并使用apktool工具进行反编译,分析反编译后文件获取Android应用信息;方法二,下载APK文件并使用androguard库中方法直接获取Android应用信息。通过对10个不同大小的Android应用样本进行三种方式的应用信息提取,对比应用信息提取时间及过程中数据量下载大小,对比结果如图5所示。由图5中结果可以看出:时间消耗方面,本实施例总用时最短,整体优于其他两种方法;流量资源消耗方面,本实施例在获取很小的数据量后即可完成应用信息获取,相比于其他两种方法需要获取完整的APK文件,本实施例具有节省网络及存储资源的优点。
需要说明的是,本说明书一个或多个实施例的方法可以由单个设备执行,例如一台计算机或服务器等。本实施例的方法也可以应用于分布式场景下,由多台设备相互配合来完成。在这种分布式场景的情况下,这多台设备中的一台设备可以只执行本说明书一个或多个实施例的方法中的某一个或多个步骤,这多台设备相互之间会进行交互以完成所述的方法。
需要说明的是,上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
基于同一发明构思,与上述任意实施例方法相对应的,本说明书一个或多个实施例还提供了一种安卓应用的应用信息远程快速获取装置。
参考图6,所述安卓应用的应用信息远程快速获取装置,包括:
请求模块,被配置为请求服务器中的APK文件,得到服务器响应后获取所述APK文件。
计算模块,被配置为寻找所述APK文件中的End of Central Directory Record区域,根据所述End of Central Directory Record区域中记录的Central Directory区域的相关信息计算出所述Central Directory区域的地址。
搜索模块,被配置为根据所述Central Directory区域的地址,在CentralDirectory区域的内容中,寻找包含所述APK文件应用信息的File Header结构体。
获取模块,被配置为根据所述File Header结构体,计算所述File Header结构体对应的文件数据在所述APK文件中的起止位置的偏移地址,根据所述偏移地址,向服务器请求获取所述APK文件中对应的文件数据。
处理模块,被配置为处理所述APK文件中对应的文件数据,得到安卓应用的目标信息。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个实施例时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
上述实施例的装置用于实现前述任一实施例中相应的安卓应用的应用信息远程快速获取方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
基于同一发明构思,与上述任意实施例方法相对应的,本说明书一个或多个实施例还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上任意一实施例所述的安卓应用的应用信息远程快速获取方法。
图7示出了本实施例所提供的一种更为具体的电子设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线 1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
上述实施例的电子设备用于实现前述任一实施例中相应的安卓应用的应用信息远程快速获取方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
基于同一发明构思,与上述任意实施例方法相对应的,本说明书一个或多个实施例还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行如上任一实施例所述的安卓应用的应用信息远程快速获取方法。
本实施例的计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
上述实施例的存储介质存储的计算机指令用于使所述计算机执行如上任一实施例所述的安卓应用的应用信息远程快速获取方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本公开的范围(包括权利要求)被限于这些例子;在本公开的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本说明书一个或多个实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。
尽管已经结合了本公开的具体实施例对本公开进行了描述,但是根据前面的描述,这些实施例的很多替换、修改和变型对本领域普通技术人员来说将是显而易见的。例如,其它存储器架构(例如,动态RAM(DRAM))可以使用所讨论的实施例。
本说明书一个或多个实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本公开的保护范围之内。
Claims (9)
1.一种安卓应用的应用信息远程快速获取方法,其特征在于,包括:
请求服务器中的APK文件,得到服务器响应后获取所述APK文件;
寻找所述APK文件中的End of Central Directory Record区域,根据所述End ofCentral Directory Record区域中记录的Central Directory区域的相关信息计算出所述Central Directory区域的地址;
根据所述Central Directory区域的地址,在Central Directory区域的内容中,寻找包含所述APK文件应用信息的File Header结构体;
根据所述File Header结构体,计算所述File Header结构体对应的文件数据在所述APK文件中的起止位置的偏移地址,根据所述偏移地址,向服务器请求获取所述APK文件中对应的文件数据;其中
对已获取的AndroidManifest.xml和resources.arsc的文件信息,计算其各自在所述APK文件中的起止位置的偏移地址,然后向服务器请求获取所述APK文件中这两个文件的内容;
对已获取的META-INF/*.RSA、META-INF/*.EC、META-INF/*.DSA和META-INF/*.SF的文件信息,检查扩展名为RSA、EC或DSA的文件是否对应有相同主文件名且扩展名为SF的文件,若有对应SF文件,则计算所述扩展名为RSA、EC或DSA的文件在所述APK文件中的起止位置的偏移地址,然后向服务器请求获取所述APK文件中该文件的内容;
处理所述APK文件中对应的文件数据,得到安卓应用的目标信息。
2.根据权利要求1所述的方法,其特征在于,所述请求服务器中的APK文件,得到服务器响应后获取所述APK文件,还包括:
根据服务器响应的头部Content-Length字段的值,获取所述APK文件大小的数据;
根据所述服务器响应的头部Access-Ranges字段的值判断是否支持范围请求,若支持,则允许所述服务器只发送所述APK文件中预设的界定范围单位的部分内容。
3.根据权利要求2所述的方法,其特征在于,所述寻找所述APK文件中的End ofCentral Directory Record区域,根据所述End of Central Directory Record区域中记录的Central Directory区域的相关信息计算出所述Central Directory区域的地址,包括:
S1、初始化得到第一变量和第二变量,所述第一变量记录剩余未匹配区域大小,初始值为所述APK文件大小,从所述APK文件末尾开始匹配End of Central Directory Record区域,所述第二变量标记Central Directory区域发现情况,初始值为false,表示未发现正确的Central Directory区域;
S2、若所述第二变量值为false,且所述第一变量大于0,则不断向前匹配,每次最多获取APK文件中第一预设长度的内容,对所述第一变量和所述第一预设长度进行大小的判断;
S3、若所述第一变量小于所述第一预设长度,则请求获取所述APK文件剩余的内容,更新所述第一变量的值为0,并判断Central Directory区域结束标识是否在所述APK文件剩余内容中;
S4、如果在,则定位出所述Central Directory区域结束标识在获取的所述APK文件剩余内容中的偏移地址,根据所述偏移地址和所述APK文件大小得到所述End of CentralDirectory Record区域在所述APK文件中的起止地址,向服务器请求获取所述End ofCentral Directory Record区域的内容;
S5、如果不在,则经所述第二变量和所述第一变量的判断后,未能发现CentralDirectory区域,返回错误信息;
S6、若第一变量大于或等于所述第一预设长度,则向前获取所述第一预设长度的内容,更新所述第一变量的值,并判断Central Directory区域结束标识是否在所述第一预设长度的内容中;
S7、如果在,则定位所述Central Directory区域结束标识在所述第一预设长度的内容中的偏移地址,根据所述第一预设长度的内容中的偏移地址和该段内容在所述APK文件中的起始偏移地址得到End of Central Directory Record区域在所述APK文件中的起始地址,向服务器请求获取所述End of Central Directory Record区域的内容;
S8、如果不在,首先检查所述Central Directory区域结束标识的高位第一字节是否存在于所述第一预设长度的内容的前三字节中;
S9、如果存在,则在继续向前截取第一预设长度的内容前,后移三字节,更新所述第一变量的值,返回S2;
S10、如果不存在,则继续向前截取所述APK文件内容,更新所述第一变量的值,返回S2;
S11、在获取到的End of Central Directory Record区域内容中,查找偏移为12字节、占位为4字节的Central Directory区域大小的信息和偏移为16字节、占位为4字节的Central Directory区域起始位置在所述APK文件中的偏移信息;
S12、根据S11中获取的两个信息定位所述APK文件中可能的Central Directory区域,首先将获取到的Little-Endian格式的信息转换为正常次序,计算该区域的起始和结束位置的偏移地址,然后请求服务器,获取所述APK文件中该部分内容;
S13、判断所述APK文件中该部分内容的前四个字节是否为Central Directory中第一个File Header结构的固定起始标识;
S14、若是,则修改所述第二变量值为true,完成所述Central Directory区域的地址的计算;
S15、若不是,且第一变量大于0时,返回S2;
S16、若不是,且第一变量小于等于0时,则返回错误信息。
4.根据权利要求1所述的方法,其特征在于,所述包含所述APK文件应用信息的FileHeader结构体,包括:AndroidManifest.xml和resources.arsc文件的File Header结构体,以及META-INF文件夹下扩展名为RSA、EC、DSA、SF文件的File Header结构体。
5.根据权利要求4所述的方法,其特征在于,所述根据所述Central Directory区域的地址,在Central Directory区域的内容中,寻找包含所述APK文件应用信息的File Header结构体,包括:
a、初始化变量未匹配区域在Central Directory区域的起始偏移pos,初始值为0;
b、获取第二预设长度的Central Directory区域内容,当pos小于所述第二预设长度时,对未进行File Header结构体判断的内容的前四字节进行判断,检查是否为新的FileHeader结构的起始标识;
c、若不是,向后移动一字节,更新pos为pos+1,返回b;
d、若是,跳转至e;
e、获取所述File Header结构内容中偏移为28字节、占位为2字节的文件名称长度,偏移为30字节、占位为2字节的扩展字段长度,偏移为32字节、占位为2字节的文件注释长度,并将其Little-Endian格式转为正常次序从而获取各长度值,计算该File Header结构的大小;
f、获取所述File Header结构内容中偏移为46字节、占位为n字节的文件名信息,如果文件名为AndroidManifest.xml、resources.arsc、META-INF/*.RSA、META-INF/*.EC、META-INF/*.DSA、META-INF/*.SF,则以字典结构保留所述File Header结构中文件名、文件实体在所述APK文件中的偏移、压缩后文件大小、文件名称长度、扩展字段长度的信息;
g、向后移动所述File Header结构体的长度,更新pos值,返回b,直到找到所有包含所述APK文件应用信息的File Header结构体。
6.根据权利要求1所述的方法,其特征在于,所述处理所述APK文件中对应的文件数据,得到安卓应用的目标信息,包括:
反编译AndroidManifest.xml文件,然后将其解析为ElementTree结构;
遍历所述ElementTree结构根节点元素的所有属性,找出含关键字的属性名,获取对应属性值,得到部分应用信息;
对于根节点下的子节点,找到所有与应用权限授予相关的节点,然后遍历这些节点的属性,记录对应的属性值,得到授予应用的权限信息;
找到声明应用程序默认属性及所含组件的节点,遍历节点的属性,记录含关键字icon及label的元素属性所对应的属性值,获取图标及应用名资源的索引;
从获得的图标及应用名资源索引中提取Package ID、Type ID、Entry ID,并根据所述Package ID、Type ID、Entry ID值在resources.arsc文件中依次定位到资源所属的Package信息块、所属的Type Spec类型规范数据块、所属类型资源项数据块中的配置信息、相应配置下该资源的ResTable_entry和Res_value数据块,然后根据所述Res_value数据块中含有的数据索引,在资源项值字符串资源池中获取相应的字符串偏移,获取到应用名字符串,和图标文件路径的字符串信息;
根据所述图标文件路径的字符串信息,在Central Directory区域中,查找图片资源的File Header结构,根据File Header结构中的信息计算图标文件在所述APK文件中的起始和结束的偏移地址,向服务器请求获取所述APK文件中该图片的内容;
利用asn1crypto.cms库对*.RSA、*.EC或*.DSA文件内容以PKCS#7格式进行解析,获取content结构下certificates证书链部分内容;
获取certificates证书链结构中的0号证书内容,利用asn1crypto.x509库按照X.509版本三证书格式进行解析,获取开发者证书指纹信息。
7.一种安卓应用的应用信息远程快速获取装置,其特征在于,包括:
请求模块,被配置为请求服务器中的APK文件,得到服务器响应后获取所述APK文件;
计算模块,被配置为寻找所述APK文件中的End of Central Directory Record区域,根据所述End of Central Directory Record区域中记录的Central Directory区域的相关信息计算出所述Central Directory区域的地址;
搜索模块,被配置为根据所述Central Directory区域的地址,在Central Directory区域的内容中,寻找包含所述APK文件应用信息的File Header结构体;
获取模块,被配置为根据所述File Header结构体,计算所述File Header结构体对应的文件数据在所述APK文件中的起止位置的偏移地址,根据所述偏移地址,向服务器请求获取所述APK文件中对应的文件数据;其中
对已获取的AndroidManifest.xml和resources.arsc的文件信息,计算其各自在所述APK文件中的起止位置的偏移地址,然后向服务器请求获取所述APK文件中这两个文件的内容;
对已获取的META-INF/*.RSA、META-INF/*.EC、META-INF/*.DSA和META-INF/*.SF的文件信息,检查扩展名为RSA、EC或DSA的文件是否对应有相同主文件名且扩展名为SF的文件,若有对应SF文件,则计算所述扩展名为RSA、EC或DSA的文件在所述APK文件中的起止位置的偏移地址,然后向服务器请求获取所述APK文件中该文件的内容;
处理模块,被配置为处理所述APK文件中对应的文件数据,得到安卓应用的目标信息。
8.一种电子设备,包括存储器、处理器及存储在所述存储器上并可由所述处理器执行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现根据权利要求1至6中任意一项所述的方法。
9.一种非暂态计算机可读存储介质,其特征在于,所述存储介质上存储有计算机指令,所述计算机指令在被计算机执行时,使所述计算机实现根据权利要求1至6中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011556513.2A CN112286706B (zh) | 2020-12-25 | 2020-12-25 | 安卓应用的应用信息远程快速获取方法及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011556513.2A CN112286706B (zh) | 2020-12-25 | 2020-12-25 | 安卓应用的应用信息远程快速获取方法及相关设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112286706A CN112286706A (zh) | 2021-01-29 |
CN112286706B true CN112286706B (zh) | 2021-05-18 |
Family
ID=74426219
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011556513.2A Active CN112286706B (zh) | 2020-12-25 | 2020-12-25 | 安卓应用的应用信息远程快速获取方法及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112286706B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP4293442A1 (en) * | 2021-03-11 | 2023-12-20 | Siemens Aktiengesellschaft | Data acquisition method and apparatus, calculation device, and storage medium |
CN113704819B (zh) * | 2021-08-11 | 2024-02-02 | 中国银联股份有限公司 | 一种应用日志的打码输出方法、装置及计算机可读存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106357817A (zh) * | 2016-11-02 | 2017-01-25 | 广东浪潮大数据研究有限公司 | 一种应用程序的安装方法及服务端和客户端 |
CN106407462A (zh) * | 2016-10-10 | 2017-02-15 | 北京恒华伟业科技股份有限公司 | 一种文件处理方法及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10289860B2 (en) * | 2014-04-15 | 2019-05-14 | Namusoft Co., Ltd. | Method and apparatus for access control of application program for secure storage area |
-
2020
- 2020-12-25 CN CN202011556513.2A patent/CN112286706B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106407462A (zh) * | 2016-10-10 | 2017-02-15 | 北京恒华伟业科技股份有限公司 | 一种文件处理方法及系统 |
CN106357817A (zh) * | 2016-11-02 | 2017-01-25 | 广东浪潮大数据研究有限公司 | 一种应用程序的安装方法及服务端和客户端 |
Non-Patent Citations (1)
Title |
---|
Android运行时恶意行为检测模型研究;董航等;《北京邮电大学学报》;20140630;第37卷(第3期);第58-61页 * |
Also Published As
Publication number | Publication date |
---|---|
CN112286706A (zh) | 2021-01-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10936645B2 (en) | Method and apparatus for generating to-be-played multimedia content | |
JP6734946B2 (ja) | 情報を生成するための方法及び装置 | |
CN109558525B (zh) | 一种测试数据集的生成方法、装置、设备和存储介质 | |
CN112286706B (zh) | 安卓应用的应用信息远程快速获取方法及相关设备 | |
CN107783766B (zh) | 对应用程序的文件进行清理的方法和装置 | |
CN110764748B (zh) | 代码调用方法、装置、终端及存储介质 | |
CN108491715B (zh) | 终端指纹库的生成方法、装置和服务器 | |
CN111124480B (zh) | 应用程序包的生成方法、装置、电子设备及存储介质 | |
CN111241040A (zh) | 信息获取方法、装置、电子设备及计算机存储介质 | |
CN106156050B (zh) | 一种数据处理方法及装置 | |
CN110569218A (zh) | 一种ext文件系统离线修改方法、装置及存储介质 | |
CN108959294B (zh) | 一种访问搜索引擎的方法和装置 | |
CN111399849A (zh) | 一种应用程序安装包的确定方法及系统 | |
CN111124541A (zh) | 一种配置文件的生成方法、装置、设备及介质 | |
CN108804625B (zh) | 一种lsm树的优化方法、装置及计算机设备 | |
CN110868643B (zh) | 一种视频下载进度的确定方法和装置 | |
CN113821486B (zh) | pod库之间依赖关系的确定方法及其装置、电子设备 | |
CN111736848B (zh) | 包冲突定位方法、装置、电子设备及可读存储介质 | |
CN115390847A (zh) | 日志处理方法及装置、计算机可读存储介质、终端 | |
CN112671671B (zh) | 基于第三方库的第三方流量识别方法、装置及设备 | |
CN113849125A (zh) | 一种cdn服务器磁盘读取的方法、装置及系统 | |
CN111597198A (zh) | 一种对于异构资源接入的物联网数据查询方法及相关设备 | |
CN111159196A (zh) | 基于分片的区块链数据存储、获取方法及装置 | |
CN111078711A (zh) | 基于数据索引的区块链数据存储、获取方法及装置 | |
CN108932263B (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 |