敏感应用调用场景的检测方法、系统及存储介质与流程

文档序号:30840445发布日期:2022-07-23 00:17阅读:103来源:国知局
敏感应用调用场景的检测方法、系统及存储介质与流程

1.本技术涉及智能终端用户数据隐私保护技术领域,具体而言,涉及一种敏感应用调用场景的检测方法、系统及存储介质。


背景技术:

2.为保护用户隐私,当应用程序在智能终端操作平台上访问用户隐私数据或者进行敏感操作时,以android平台为例,必须要进行以下几个步骤:1.在androidmanifest.xml中声明相应的具体权限;2.在访问敏感数据/进行敏感操作之前,请求用户授权对应的权限;3.调用系统敏感api,访问敏感数据/进行敏感操作。
3.在用户数据隐私保护趋严的前提下,应用程序需要明确自己的代码在哪些地方声明了哪些权限,调用了哪些系统敏感api,以此来规避合规风险。
4.针对敏感权限和方法的检测,当前各检测机构主要的检测方式有以下几步:1.通过hook手段代理系统的敏感方法,在代理的方法里打印日志;2.通过自动化工具或者其他手段运行目标app,当目标app调用敏感方法时,会输出对应日志;3.根据输出的日志来确定哪些场景有调用敏感方法;4.解压缩app或三方库并查看其内部的androidmanifest.xml,确定哪些场景声明了敏感权限。通过上述步骤,应用程序就可以得到目标应用app使用的敏感权限和方法,然后根据检查报告对一些业务逻辑进行合规排查。
5.当前主流的hook敏感方法并输出日志的检测方式在检测过程中存在一些弊端,主要体现为:1.在检测敏感方法时,需要真正调用到敏感方法才能被检测出。如果业务逻辑过于复杂,就有可能覆盖不到具体调用的场景;2.大量三方库对敏感方法的调用时机无法把控,极易造成合规风险;3.每个三方库都需要手动查看androidmanifest.xml才能确定其声明了哪些敏感权限;为了解决上述弊端,急需一种用于敏感应用调用场景的检测方法,以满足现有的技术需求。


技术实现要素:

6.为了解决上述问题,本技术的目的是提供一种用于敏感应用调用场景的检测方法,用于解决不依赖应用运行时检测,静态检测出所有敏感方法的调用,以及自动检测出三方库声明的敏感权限和调用的敏感方法,无需了解其业务逻辑。
7.为了实现上述技术目的,本技术提供了一种敏感应用调用场景的检测方法,包括以下步骤:
8.构建class文件提取工具,class文件提取工具用于通过执行compilejavawithjavac任务,获取class文件;
9.采集compilejavawithjavac任务,通过class文件提取工具,获取class文件;
10.解析class文件,记录class文件调用的敏感方法以及分析class文件是否有调用依赖库声明的敏感权限;
11.根据敏感权限和敏感方法,确定调用敏感方法的调用场景。
12.优选地,在采集compilejavawithjavac任务的过程中,通过采集compilejavawithjavac任务的输入和输出,获取源代码、三方库代码以及class文件,其中,源代码和三方库代码用于被编译成class文件;
13.获取源代码和三方库代码分别对应的xml文件并进行解析,获取敏感权限。
14.优选地,在采集compilejavawithjavac任务的输入和输出的过程中,通过在compilejavawithjavac任务的前后分别插入两个新的task,插入在前边的task的第一输入用于表示compilejavawithjavac任务的输入,插入在后边的task的第二输入用于表示compilejavawithjavac任务的输出。
15.优选地,在采集compilejavawithjavac任务的输入和输出的过程中,输入包括:java文件、jar文件、aar文件、r文件、json输出文件;输出为class文件。
16.优选地,在获取敏感权限的过程中,基于源代码和三方库代码对应的位置,获取xml文件,其中,xml文件用于表示androidmanifest.xml文件;
17.通过解析xml文件,获取xml文件对应的内部声明的敏感权限,其中,通过匹配敏感权限对应的配置的xml文件,判断解析过程的准确性。
18.优选地,在获取xml文件的过程中,通过java文件和aar文件对应的位置,获取xml文件。
19.优选地,在解析class文件的过程中,通过解析工具,提取class文件的class类的方法调用,获取敏感方法,并在敏感方法的调用处进行字节码插桩,输出相应日志,其中,相应日志用于获取调用场景,字节码插桩用于在app运行检测时,不通过hook系统方法,获取敏感方法的调用记录;和/或,使用javaassist工具解析class文件。
20.优选地,在获取class文件的过程中,通过gradle transform获取class文件;
21.解析class文件,记录class文件调用的敏感方法以及分析class文件是否有调用依赖库声明的敏感权限;
22.根据敏感权限和敏感方法,确定调用敏感方法的调用场景。
23.本发明还公开了一种检测系统,检测系统用于实现敏感应用调用场景的检测方法,检测系统包括:
24.class文件获取模块,用于构建class文件提取工具,class文件提取工具用于通过执行compilejavawithjavac任务,获取class文件;
25.任务提取模块,用于采集compilejavawithjavac任务,通过class文件提取工具,获取class文件;
26.解析模块,用于解析class文件,记录class文件调用的敏感方法以及分析class文件是否有调用依赖库声明的敏感权限;
27.检测模块,用于根据敏感权限和敏感方法,确定调用敏感方法的调用场景。
28.本发明公开了一种存储介质,存储介质上存储有计算机程序,计算机程序被处理器执行时能够实现上述敏感应用调用场景的检测方法的步骤。
29.本技术公开了以下技术效果:
30.无需依赖应用运行时检测,在应用apk构建时,即可完成检测;无需关注本应用和三方库的业务逻辑,不会造成漏检现象;自动检测出三方库声明的敏感权限,减少人力排查成本。
附图说明
31.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
32.图1是本技术一实施例的检测方法流程图。
33.图2是本技术所述的android应用的构建流程示意图;
34.图3是本技术所述的技术流程示意图。
具体实施方式
35.下为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本技术实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本技术的实施例的详细描述并非旨在限制要求保护的本技术的范围,而是仅仅表示本技术的选定实施例。基于本技术的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本技术保护的范围。
36.图1是本技术一实施例的检测方法流程图。
37.如图1所示,本技术提供了一种敏感应用调用场景的检测方法,包括以下步骤:
38.构建class文件提取工具,class文件提取工具用于通过执行compilejavawithjavac任务,获取class文件;
39.采集compilejavawithjavac任务,通过class文件提取工具,获取class文件;
40.解析class文件,记录class文件调用的敏感方法以及分析class文件是否有调用依赖库声明的敏感权限;
41.根据敏感权限和敏感方法,确定调用敏感方法的调用场景。
42.进一步优选地,在采集compilejavawithjavac任务的过程中,通过采集compilejavawithjavac任务的输入和输出,获取源代码、三方库代码以及class文件,其中,源代码和三方库代码用于被编译成class文件;
43.获取源代码和三方库代码分别对应的xml文件并进行解析,获取敏感权限。
44.进一步优选地,在采集compilejavawithjavac任务的输入和输出的过程中,通过在compilejavawithjavac任务的前后分别插入两个新的task,插入在前边的task的第一输入用于表示compilejavawithjavac任务的输入,插入在后边的task的第二输入用于表示compilejavawithjavac任务的输出。
45.进一步优选地,在采集compilejavawithjavac任务的输入和输出的过程中,输入包括:java文件、jar文件、aar文件、r文件、json输出文件;输出为class文件。
46.优选地,在获取敏感权限的过程中,基于源代码和三方库代码对应的位置,获取xml文件,其中,xml文件用于表示androidmanifest.xml文件;
47.通过解析xml文件,获取xml文件对应的内部声明的敏感权限,其中,通过匹配敏感权限对应的配置的xml文件,判断解析过程的准确性。
48.进一步优选地,在获取xml文件的过程中,通过java文件和aar文件对应的位置,获取xml文件。
49.进一步优选地,在解析class文件的过程中,通过解析工具,提取class文件的class类的方法调用,获取敏感方法,并在敏感方法的调用处进行字节码插桩,输出相应日志,其中,相应日志用于获取调用场景,字节码插桩用于在app运行检测时,不通过hook系统方法,获取敏感方法的调用记录;和/或,使用javaassist工具解析class文件。
50.进一步优选地,在获取class文件的过程中,通过gradle transform获取class文件;
51.解析class文件,记录class文件调用的敏感方法以及分析class文件是否有调用依赖库声明的敏感权限;
52.根据敏感权限和敏感方法,确定调用敏感方法的调用场景。
53.图2是本技术所述的android应用的构建流程示意图;图3是本技术所述的技术流程示意图。
54.请同时参考图2和图3,进一步地,用于实现敏感应用调用场景的检测方法的检测系统包括:
55.class文件获取模块,用于构建class文件提取工具,class文件提取工具用于通过执行compilejavawithjavac任务,获取class文件;
56.任务提取模块,用于采集compilejavawithjavac任务,通过class文件提取工具,获取class文件;
57.解析模块,用于解析class文件,记录class文件调用的敏感方法以及分析class文件是否有调用依赖库声明的敏感权限;
58.检测模块,用于根据敏感权限和敏感方法,确定调用敏感方法的调用场景。
59.针对现有的主流检测方式的不足,本技术不依赖运行时检测,无需关注应用或者三方库的业务逻辑,在构建应用apk时即可检测出所有调用系统敏感方法的场景。在检测声明的敏感权限时,能自动检测出所有三方库各自声明的敏感权限,无需再手动解压缩三方库去检测。
60.本技术能够不依赖应用运行时检测的关键在于:在构建应用apk时,构建工具会执行compilejavawithjavac任务,在执行上述任务之后,会得到所有的class文件,通过解析所有class文件并分析是否有调用敏感权限,本技术就可以确定具体有哪些场景在调用敏感方法。同理,在构建时,本技术也能找到所有依赖库的androidmanifest.xml,依次解析此文件即可知道依赖库声明的敏感权限。
61.请继续参考图2,在一实施例中,android应用的构建流程如图2所示,由图可以看出应用项目中的所有源代码和引用的三方库代码在构建时都会被编译。
62.本技术提到的androidmanifest.xml:android项目的应用清单,每个应用项目必须在项目源设置的根目录中加入androidmanifest.xml文件(且必须使用此名称)。清单文件会向android构建工具、android操作系统描述应用的基本信息,其中包括应用为访问系统或其他应用的受保护部分所需的权限。
63.请继续参考图3,在编译过程中,通过compilejavawithjavac的输入和输出,本技术能获取到编译之前的源代码/三方库代码和编译之后的class文件,然后做以下操作:
64.1.通过源代码/三方库代码所在的位置,找到androidmanifest.xml,解析此文件,记录其声明的敏感权限;
65.2.解析获取到的class文件,记录其调用的敏感方法,并在调用位置利用字节码插桩方式输出日志;(在构建应用apk时,构建工具会执行compilejavawithjavac任务,在执行上述任务之后,会得到所有的class文件)
66.3.根据匹配记录生成对应的检测报告。
67.1)获取compilejavawithjavac任务的输入和输出
68.本技术主要通过以下方式来获取compilejavawithjavac任务的输入和输出:在android应用编译构建的所有task里找到compilejavawithjavac任务,利用task的dependson强依赖方式,在上述任务前后分别插入两个新的task,那么插入在前边的task的输入即为compilejavawithjavac任务的输入,插入在后边的task的输入即为compilejavawithjavac任务的输出。
69.compilejavawithjavac任务的输入和输出主要有以下几点:
70.输入:
71.1.项目中的java文件;
72.2.项目中依赖的三方库:jar/aar文件;
73.3.项目自动生成的r文件;
74.4.上一个任务的json输出文件。
75.输出:
76.1.编译生成的class文件。
77.2)检测敏感权限
78.在检测敏感权限时,首先要找到androidmanifest.xml,只有项目源代码和aar格式的的三方库才对应有此文件。所以针对compilejavawithjavac任务的输入,本技术只需要分析项目中的java文件和依赖的aar三方库文件即可。主要步骤如下:
79.1.根据java文件和aar文件的路径找到对应的androidmanifest.xml文件的路径;
80.2.解析androidmanifest.xml,根据配置匹配对应的敏感权限,如果命中,进行相应记录。
81.如果是java文件,那么对应的输入类似为:/项目路径/app/src/main/java/com/test/test.java;
82.可以找到与之对应的androidmanifest.xml:/项目路径/app/src/main/androidmanifest.xml。
83.如果是aar文件,那么对应的输入类似为:/gradle安装目录/caches/transforms-1/files-1.1/support-fragment-27.1.1.aar/b06dbb34e74a754e073c7400f08d827f/jars/classes.jar;可以找到与之对应的androidmanifest.xml:/gradle安装目录/caches/transforms-1/files-1.1/support-fragment-27.1.1.aar/b06dbb34e74a754e073c7400f08d827f/androidmanifest.xml。
84.在检测时,本技术只需要解析xml文件,然后拿到其内部声明的所有权限,和配置进行匹配并记录即可。
85.3)检测敏感方法
86.compilejavawithjavac任务的输出目录如下所示:/项目路径/app/build/intermediates/classes/debug。目录里包含了所有的class文件,包含本技术自己的业务源代码和依赖的三方库代码。
87.在检测敏感方法时,主要步骤如下:
88.1.使用javaassist等工具,依次解析compilejavawithjavac任务输出的class文件;
89.2.获取class类中的方法调用,查看是否命中配置的敏感方法,如果命中,进行相应记录;
90.3.并在敏感方法的调用处进行字节码插桩,输出相应日志。
91.其中字节码插桩的目的是:如果还有需要在app运行时检测,无需hook系统方法,即可拿到敏感方法的调用记录。
92.基于上述原理,本技术只需要在应用构建之前配置好需要检测的敏感权限/方法,然后进行项目编译构建,构建结束后即可拿到检测报告。
93.本技术中通过compilejavawithjavac任务的输出来获取所有的class文件并进行检测。在获取所有class文件时,本技术也可以利用gradletransform来获取所有的class文件。transform是android官方提供给开发者在项目构建阶段(.class-》.dex转换期间)用来修改.class文件的一套标准api,通过此api,本技术也可以在构建时拿到所有的class文件。
94.本技术还提供一种智能终端设备,终端设备包括存储器、处理器,存储器上存储有应用程序,应用程序被处理器执行时实现上述任一实施例的检测方法的步骤。
95.本技术还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述任一实施例的方法的步骤。
96.在本技术提供的移动终端和计算机可读存储介质的实施例中,包含了上述用于敏感应用调用场景的检测方法各实施例的全部技术特征,说明书拓展和解释内容与上述方法的各实施例基本相同,在此不做再赘述。
97.本技术实施例还提供一种计算机程序产品,计算机程序产品包括计算机程序代码,当计算机程序代码在计算机上运行时,使得计算机执行如上各种可能的实施方式中的方法。
98.本技术实施例还提供一种芯片,包括存储器和处理器,存储器用于存储计算机程序,处理器用于从存储器中调用并运行计算机程序,使得安装有芯片的设备执行如上各种可能的实施方式中的方法。
99.上述本技术实施例序号仅仅为了描述,不代表实施例的优劣。
100.在本技术中,对于相同或相似的术语概念、技术方案和/或应用场景描述,一般只在第一次出现时进行详细描述,后面再重复出现时,为了简洁,一般未再重复阐述,在理解本技术技术方案等内容时,对于在后未详细描述的相同或相似的术语概念、技术方案和/或应用场景描述等,可以参考其之前的相关详细描述。
101.在本技术中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
102.本技术技术方案的各技术特征可以进行任意的组合,为使描述简洁,未对上述实
施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本技术记载的范围。
103.需要说明的是,在本文中,采用了诸如s10、s20等步骤代号,其目的是为了更清楚简要地表述相应内容,不构成顺序上的实质性限制,本领域技术人员在具体实施时,可能会先执行s20后执行s10等,但这些均应在本技术的保护范围之内。
104.应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释,此外,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
105.最后应说明的是:以上所述实施例,仅为本技术的具体实施方式,用以说明本技术的技术方案,而非对其限制,本技术的保护范围并不局限于此,尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本技术揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本技术实施例技术方案的精神和范围。都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应所述以权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1