安卓应用程序隐私权限安全检测方法、装置、设备及介质与流程

文档序号:32840684发布日期:2023-01-06 20:42阅读:45来源:国知局
安卓应用程序隐私权限安全检测方法、装置、设备及介质与流程

1.本发明实施例涉及应用程序开发技术领域,尤其涉及一种安卓应用程序隐私权限安全检测方法、装置、设备及介质。


背景技术:

2.移动互联网应用程序(app)的种类和数量呈爆发式增长,app安全和用户信息安全态势愈加严峻。在app产研阶段,由于不了解相关隐私合规风险点,可能设计或开发了存在不合规问题的功能或流程,且在app应用发布前没有有效的手段进行检测排查。另外,app中会引入各种第三方sdk,但存在部分第三方sdk外部程序的安全审查过程缺乏,安全意识薄弱,且排查第三方sdk权限情况需通过开发者人工对编译产物进行排查,会耗费开发者较多的时间,这导致app引入这些sdk功能后存在未知的风险漏洞。
3.目前市面上采用一些静态检测手段和动态检测手段,其中常规的静态检测手段包括:加固厂商通过静态解包对apk进行解包,能得到权限调用类,但是无法定位到具体的sdk,对于开发测试来说还需要进一步排查,而且对sdk无法有效进行管理,比较散乱,文档需要用户手动补充,存在遗漏合并等问题,另外检测规则也无法自定义,只能通过第三方厂商定义的规则来进行测试与检测;asm插桩,维护检测列表需要代码写入,无法快速进行配置,而且门槛较高,需要开发对打包流程有一定的了解。


技术实现要素:

4.本发明实施例提供一种安卓应用程序隐私权限安全检测方法、装置、设备及介质,以增强对第三方sdk的管控,降低隐私权限的检测门槛。
5.第一方面,本发明实施例提供了一种安卓应用程序隐私权限安全检测方法,该方法包括:
6.通过反编译技术对apk和第三方sdk进行解包,得到目标关键类型文件;
7.对所述目标关键类型文件进行扫描,以得到应用程序的静态权限申请列表以及敏感权限的调用位置。
8.可选的,所述目标关键类型文件包括:androidmanifest.xml配置文件和dex代码文件组。
9.可选的,所述对所述目标关键类型文件进行扫描,以得到应用程序的静态权限申请列表以及敏感权限的调用位置,包括:
10.对所述androidmanifest.xml配置文件进行扫描,得到所述应用程序的基础信息、版本信息和所述静态权限申请列表。
11.可选的,所述对所述目标关键类型文件进行扫描,以得到应用程序的静态权限申请列表以及敏感权限的调用位置,包括:
12.通过dex转jar技术对所述dex代码文件组进行处理,得到对应的jar包;
13.通过java asm框架获取所述jar包中jar方法每个类的组成结构;
14.对所述组成结构进行遍历,并通过方法名和类名,与预设敏感权限规则表进行配对,以得到所述调用位置。
15.可选的,所述方法还包括:
16.通过gradle编译流程将所述应用程序的资源文件打包为apk;
17.在所述gradle编译流程的transform流程中,使用自定义的gradle插件,根据预设敏感权限规则表检测源数据中的敏感method、敏感string和敏感field,并在所述敏感method、所述敏感string和所述敏感field的访问之前插入一段日志字节码;所述日志字节码衍生有一个上传包装类,用于获取当前代码调用栈。
18.可选的,所述通过gradle编译流程将所述应用程序的资源文件打包为apk,包括:
19.打包资源文件,生成r.java文件;
20.将aidl文件编译成java文件;
21.将所述r.java文件和所述java文件通过javac命令编译成class文件;
22.将所述class文件打包成dex文件;
23.通过apkbuilder工具将所述dex文件和所述资源文件打包成apk并进行签名。
24.可选的,所述上传包装类还用于获取自身的特征值,所述方法还包括:
25.根据所述特征值以及所述静态权限申请列表和所述调用位置将所述apk对所述第三方sdk进行匹配和标记。
26.第二方面,本发明实施例还提供了一种安卓应用程序隐私权限安全检测装置,该装置包括:
27.关键类型文件获取模块,用于通过反编译技术对apk和第三方sdk进行解包,得到目标关键类型文件;
28.敏感权限调用扫描模块,用于对所述目标关键类型文件进行扫描,以得到应用程序的静态权限申请列表以及敏感权限的调用位置。
29.第三方面,本发明实施例还提供了一种计算机设备,该计算机设备包括:
30.一个或多个处理器;
31.存储器,用于存储一个或多个程序;
32.当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明任意实施例所提供的安卓应用程序隐私权限安全检测方法。
33.第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本发明任意实施例所提供的安卓应用程序隐私权限安全检测方法。
34.本发明实施例提供了一种安卓应用程序隐私权限安全检测方法,首先通过反编译技术对apk和第三方sdk进行解包,得到目标关键类型文件,再对目标关键类型文件进行扫描,从而得到应用程序的静态权限申请列表以及敏感权限的调用位置。本发明实施例所提供的安卓应用程序隐私权限安全检测方法,通过上述的静态检测方法,使得对每个sdk的敏感权限以及应用场景分类更清晰,能精确到sdk不同版本的敏感api方法,同时可支持各种终端,无需特定的代码写入,从而增强了对第三方sdk的管控,大大降低了测试人员与开发人员对隐私权限的检测门槛。
附图说明
35.图1为本发明实施例一提供的安卓应用程序隐私权限安全检测方法的流程图;
36.图2为本发明实施例二提供的安卓应用程序隐私权限安全检测装置的结构示意图;
37.图3为本发明实施例三提供的计算机设备的结构示意图。
具体实施方式
38.下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
39.在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各步骤描述成顺序的处理,但是其中的许多步骤可以被并行地、并发地或者同时实施。此外,各步骤的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
40.实施例一
41.图1为本发明实施例一提供的安卓应用程序隐私权限安全检测方法的流程图。本实施例可适用于对各种应用程序中的隐私权限信息进行安全检测的情况,该方法可以由本发明实施例所提供的安卓应用程序隐私权限安全检测装置来执行,该装置可以由硬件和/或软件的方式来实现,一般可集成于计算机设备中。如图1所示,具体包括如下步骤:
42.s11、通过反编译技术对apk和第三方sdk进行解包,得到目标关键类型文件。
43.s12、对所述目标关键类型文件进行扫描,以得到应用程序的静态权限申请列表以及敏感权限的调用位置。
44.具体的,本实施例首先可以提供一种静态检测的方案,以检测得到第三方sdk(软件开发工具包,software development kit)和apk(安卓应用程序包,android application package)内部对隐私敏感权限的调用。具体可以通过反编译技术对apk和第三方sdk进行解包,得到目标关键类型文件,其中的目标关键类型文件可以包括:androidmanifest.xml配置文件和dex代码文件组。然后可以分别针对apk和第三方sdk,对解包得到的目标关键类型文件进行扫描,以得到应用程序的静态权限申请列表和敏感权限的调用位置,其中的调用位置可以包括具体调用类的文件路径与行数。
45.可选的,所述对所述目标关键类型文件进行扫描,以得到应用程序的静态权限申请列表以及敏感权限的调用位置,包括:对所述androidmanifest.xml配置文件进行扫描,得到所述应用程序的基础信息、版本信息和所述静态权限申请列表。
46.以及可选的,所述对所述目标关键类型文件进行扫描,以得到应用程序的静态权限申请列表以及敏感权限的调用位置,包括:通过dex转jar技术对所述dex代码文件组进行处理,得到对应的jar包;通过java asm框架获取所述jar包中jar方法每个类的组成结构;对所述组成结构进行遍历,并通过方法名和类名,与预设敏感权限规则表进行配对,以得到所述调用位置。
47.在上述技术方案的基础上,可选的,所述方法还包括:通过gradle编译流程将所述
应用程序的资源文件打包为apk;在所述gradle编译流程的transform流程中,使用自定义的gradle插件,根据预设敏感权限规则表检测源数据中的敏感method、敏感string和敏感field,并在所述敏感method、所述敏感string和所述敏感field的访问之前插入一段日志字节码;所述日志字节码衍生有一个上传包装类,用于获取当前代码调用栈。
48.具体的,本实施例还提供了一种动态检测的方案,动态检测可以对运行时的apk进行检测,可以对运行时的apk做敏感代码的调用栈展示,从而可以更直观的了解每个步骤涉及到的敏感方法调用。常规的动态检测手段包括:通过root机型对敏感api的hook,再进行日志打点,该方案需要刷机,从而需要一定的门槛,而且root不能覆盖所有机型与rom版本,故存在一些敏感api在高低版本调用方案不一样,永远无法触发非本机型rom版本之外的方法,而如apk要求在非root机型上运行,则apk需要因为检测打包出单独的版本,另外测试人员无法操作,只能送检到机构才能进行检测,时间周期较长;通过hook系统关键类设置进入代理,该方案hook存在一定难度与适配,需要找hook点,不同rom版本则需要进行适配,而且不是所有类都能进行hook,比如直接获取常量。
49.为了解决上述问题,本实施例所提供的动态检测方案可以在手机非root状态下借助gradle编译流程,巧妙的修改了原有字节码,并插入日志字节码,使得方案简单易用,对所有移动终端设备均可支持,从而大大降低了检测门槛,有效缩短了隐私检测的时间。具体的,可以通过gradle编译流程将应用程序的资源文件打包为apk,过程中会涉及到gradle的一个transform流程,该流程可以包括多个transform处理过程,首先可以是自定义的transforma处理,然后是系统的transformb处理等等,最后一个transformn可以负责生成dex文件。基于gradle transform原理自定义了gradle插件(plugin),并将其注册到transform编译流程中,再通过字节码操纵框架来实现class文件到dex文件过程的修改。具体可以根据收集的预设敏感权限规则表对源数据进行处理,根据对敏感api的类型分为三大类,并做类的检测。第一类为敏感method检测,对敏感method的访问之前插入一段日志字节码;第二类为敏感string检测,对敏感string的访问之前插入一段日志字节码;第二类为敏感field检测,对敏感field的访问之前插入一段日志字节码。在插入的日志字节码中衍生有一个上传包装类,该类可以准确获取到当前代码调用栈,从而可以在apk运行过程中实时检测到敏感权限调用栈并统计得到调用频次等等。
50.其中,可选的,所述通过gradle编译流程将所述应用程序的资源文件打包为apk,包括:打包资源文件,生成r.java文件;将aidl文件编译成java文件;将所述r.java文件和所述java文件通过javac命令编译成class文件;将所述class文件打包成dex文件;通过apkbuilder工具将所述dex文件和所述资源文件打包成apk并进行签名。上述transform流程即可以在将class文件打包成dex文件步骤中实现。
51.进一步可选的,所述上传包装类还用于获取自身的特征值,所述方法还包括:根据所述特征值以及所述静态权限申请列表和所述调用位置将所述apk对所述第三方sdk进行匹配和标记。其中,特征值即上传包装类的完整文件路径与方法,可以通过长连接对日志进行上传,再根据静态检测得到的结果以及该特征值来实现apk对第三方sdk的匹配和标记,从而进一步增强对第三方sdk的管控。
52.基于上述静态检测和动态检测的方案,还可以搭建隐私权限检测管控平台,以方便实现基础信息管理、sdk隐私管理、sdk版本管理、apk隐私管理、apk版本管理、apk动态检
测管理、场景服务管理以及隐私报告动态生成等等,进而可以通过nexus仓库与平台扫描实现sdk与apk的基础信息与隐私管理的强关联,还可以动态生成sdk清单文件和对应的敏感权限方法,以及实现不同版本的敏感权限变化对比等等。
53.本发明实施例所提供的技术方案,首先通过反编译技术对apk和第三方sdk进行解包,得到目标关键类型文件,再对目标关键类型文件进行扫描,从而得到应用程序的静态权限申请列表以及敏感权限的调用位置。通过上述的静态检测方法,使得对每个sdk的敏感权限以及应用场景分类更清晰,能精确到sdk不同版本的敏感api方法,同时可支持各种终端,无需特定的代码写入,从而增强了对第三方sdk的管控,大大降低了测试人员与开发人员对隐私权限的检测门槛。
54.实施例二
55.图2为本发明实施例二提供的安卓应用程序隐私权限安全检测装置的结构示意图,该装置可以由硬件和/或软件的方式来实现,一般可集成于计算机设备中,用于执行本发明任意实施例所提供的安卓应用程序隐私权限安全检测方法。如图2所示,该装置包括:
56.关键类型文件获取模块21,用于通过反编译技术对apk和第三方sdk进行解包,得到目标关键类型文件;
57.敏感权限调用扫描模块22,用于对所述目标关键类型文件进行扫描,以得到应用程序的静态权限申请列表以及敏感权限的调用位置。
58.本发明实施例所提供的技术方案,首先通过反编译技术对apk和第三方sdk进行解包,得到目标关键类型文件,再对目标关键类型文件进行扫描,从而得到应用程序的静态权限申请列表以及敏感权限的调用位置。通过上述的静态检测方法,使得对每个sdk的敏感权限以及应用场景分类更清晰,能精确到sdk不同版本的敏感api方法,同时可支持各种终端,无需特定的代码写入,从而增强了对第三方sdk的管控,大大降低了测试人员与开发人员对隐私权限的检测门槛。
59.在上述技术方案的基础上,可选的,所述目标关键类型文件包括:androidmanifest.xml配置文件和dex代码文件组。
60.在上述技术方案的基础上,可选的,敏感权限调用扫描模块22,包括:
61.配置文件扫描单元,用于对所述androidmanifest.xml配置文件进行扫描,得到所述应用程序的基础信息、版本信息和所述静态权限申请列表。
62.在上述技术方案的基础上,可选的,敏感权限调用扫描模块22,包括:
63.jar包获取单元,用于通过dex转jar技术对所述dex代码文件组进行处理,得到对应的jar包;
64.组成结构获取单元,用于通过java asm框架获取所述jar包中jar方法每个类的组成结构;
65.调用位置获取单元,用于对所述组成结构进行遍历,并通过方法名和类名,与预设敏感权限规则表进行配对,以得到所述调用位置。
66.在上述技术方案的基础上,可选的,该安卓应用程序隐私权限安全检测装置,还包括:
67.资源文件打包模块,用于通过gradle编译流程将所述应用程序的资源文件打包为apk;
68.调用栈获取模块,用于在所述gradle编译流程的transform流程中,使用自定义的gradle插件,根据预设敏感权限规则表检测源数据中的敏感method、敏感string和敏感field,并在所述敏感method、所述敏感string和所述敏感field的访问之前插入一段日志字节码;所述日志字节码衍生有一个上传包装类,用于获取当前代码调用栈。
69.在上述技术方案的基础上,可选的,资源文件打包模块具体用于:
70.打包资源文件,生成r.java文件;
71.将aidl文件编译成java文件;
72.将所述r.java文件和所述java文件通过javac命令编译成class文件;
73.将所述class文件打包成dex文件;
74.通过apkbuilder工具将所述dex文件和所述资源文件打包成apk并进行签名。
75.在上述技术方案的基础上,可选的,所述上传包装类还用于获取自身的特征值,该安卓应用程序隐私权限安全检测装置,还包括:
76.sdk匹配模块,用于根据所述特征值以及所述静态权限申请列表和所述调用位置将所述apk对所述第三方sdk进行匹配和标记。
77.本发明实施例所提供的安卓应用程序隐私权限安全检测装置可执行本发明任意实施例所提供的安卓应用程序隐私权限安全检测方法,具备执行方法相应的功能模块和有益效果。
78.值得注意的是,在上述安卓应用程序隐私权限安全检测装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
79.实施例三
80.图3为本发明实施例三提供的计算机设备的结构示意图,示出了适于用来实现本发明实施方式的示例性计算机设备的框图。图3显示的计算机设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。如图3所示,该计算机设备包括处理器31、存储器32、输入装置33及输出装置34;计算机设备中处理器31的数量可以是一个或多个,图3中以一个处理器31为例,计算机设备中的处理器31、存储器32、输入装置33及输出装置34可以通过总线或其他方式连接,图3中以通过总线连接为例。
81.存储器32作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的安卓应用程序隐私权限安全检测方法对应的程序指令/模块(例如,安卓应用程序隐私权限安全检测装置中的关键类型文件获取模块21及敏感权限调用扫描模块22)。处理器31通过运行存储在存储器32中的软件程序、指令以及模块,从而执行计算机设备的各种功能应用以及数据处理,即实现上述的安卓应用程序隐私权限安全检测方法。
82.存储器32可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据计算机设备的使用所创建的数据等。此外,存储器32可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器32可进一步包括相对于处理器31远程设置的存储器,这些远程存储器可以通过网络连接至计
算机设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
83.输入装置33可用于获取待处理的apk和第三方sdk,以及产生与计算机设备的用户设置和功能控制有关的键信号输入等。输出装置34可包括显示屏,可用于向用户展示检测结果等等。
84.实施例四
85.本发明实施例四还提供一种包含计算机可执行指令的存储介质,该计算机可执行指令在由计算机处理器执行时用于执行一种安卓应用程序隐私权限安全检测方法,该方法包括:
86.通过反编译技术对apk和第三方sdk进行解包,得到目标关键类型文件;
87.对所述目标关键类型文件进行扫描,以得到应用程序的静态权限申请列表以及敏感权限的调用位置。
88.存储介质可以是任何的各种类型的存储器设备或存储设备。术语“存储介质”旨在包括:安装介质,例如cd-rom、软盘或磁带装置;计算机系统存储器或随机存取存储器,诸如dram、ddr ram、sram、edo ram、兰巴斯(rambus)ram等;非易失性存储器,诸如闪存、磁介质(例如硬盘或光存储);寄存器或其它相似类型的存储器元件等。存储介质可以还包括其它类型的存储器或其组合。另外,存储介质可以位于程序在其中被执行的计算机系统中,或者可以位于不同的第二计算机系统中,第二计算机系统通过网络(诸如因特网)连接到计算机系统。第二计算机系统可以提供程序指令给计算机用于执行。术语“存储介质”可以包括可以驻留在不同位置中(例如在通过网络连接的不同计算机系统中)的两个或更多存储介质。存储介质可以存储可由一个或多个处理器执行的程序指令(例如具体实现为计算机程序)。
89.当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的安卓应用程序隐私权限安全检测方法中的相关操作。
90.计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
91.计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、电线、光缆、rf等等,或者上述的任意合适的组合。
92.通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、闪存(flash)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
93.注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,
本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1