一种应用程序的检测方法及装置与流程

文档序号:31497120发布日期:2022-09-14 07:35阅读:52来源:国知局
1.本技术涉及计算机软件测试技术及云技术,尤其涉及一种应用程序的检测方法及装置。
背景技术
::2.污点分析是一种跟踪并分析污点信息在程序中流动的技术。在漏洞分析中,使用污点分析技术将所感兴趣的数据(通常来自程序的外部输入)标记为污点数据,然后通过跟踪和污点数据相关的信息的流向,可以知道它们是否会影响某些关键的程序操作,进而挖掘程序漏洞。3.相关污点分析技术通常是通过跟踪安全相关的数据流、关注与网络通信相关的数据流,发现应用程序的数据流的相关漏洞,而相关静态分析工具中仅仅专注于应用程序的相关漏洞,对于包含隐藏行为的应用程序却无能为力。因此,对于用户来说,这些应用程序存在较大的安全隐患。4.因此,相关技术中缺乏提升应用程序的安全性的有效方案。技术实现要素:5.本技术实施例提供一种应用程序的检测方法、装置、电子设备及计算机可读存储介质,能够准确检测应用程序中的隐藏功能以保证应用程序使用过程中的安全性。6.本技术实施例的技术方案是这样实现的:7.本技术实施例提供一种应用程序的检测方法,包括:8.对应用程序的源代码进行输入验证检测,得到所述应用程序的用户输入和比较内容;对所述比较内容进行上下文内容识别处理,得到所述比较内容的类型;对所述用户输入进行上下文条件识别处理,得到所述用户输入的代码分派行为;基于所述比较内容的类型和所述用户输入的代码分派行为,确定所述应用程序中的隐藏功能。9.本技术实施例提供一种应用程序的检测装置,包括:10.输入验证检测模块,用于对应用程序的源代码进行输入验证检测,得到所述应用程序的用户输入和比较内容;上下文内容识别模块,用于对所述比较内容进行上下文内容识别处理,得到所述比较内容的类型;上下文内容恢复模块,用于对所述用户输入进行上下文条件识别处理,得到所述用户输入的代码分派行为;行为发现及验证模块,用于基于所述比较内容的类型和所述用户输入的代码分派行为,确定所述应用程序中的隐藏功能。11.在上述方案中,所述比较内容的类型包括硬编码字符串、机密字符串;所述行为发现及验证模块,还用于当所述比较内容包含指定字符串的子集、所述用户输入等于所述比较内容包括的值、且每个所述比较内容包括的值对应所述应用程序的不同执行结果时,确定所述比较内容的类型为机密字符串;当所述用户输入等于所述比较内容包括的值、所述比较内容包括的值的来源为一个、且所述应用程序的执行结果均相同时,确定所述比较内容的类型为硬编码字符串。12.在上述方案中,所述用户输入的代码分派行为包括:所述用户输入的逻辑条件的数目、所述逻辑条件产生的分支数目;所述上下文内容恢复模块,还用于确定所述用户输入的上下文中的逻辑条件以及所述逻辑条件的数目;针对每条所述逻辑条件对所述用户输入进行验证,以确定所述逻辑条件产生的分支数目。13.在上述方案中,所述行为发现及验证模块,还用于根据所述用户输入的逻辑条件的数目和所述逻辑条件的分支数目的数量关系,确定与所述代码分派行为对应的分派方式;基于所述分派方式和所述比较内容的类型,对所述用户输入进行验证,确定所述应用程序中的隐藏功能。14.在上述方案中,所述分派方式包括:一对二分派、多对二分派和多对多分派度;所述行为发现及验证模块,还用于当所述分派方式为一对二分派、且所述比较内容的类型为硬编码字符串时,确定所述应用程序中的隐藏功能为秘密访问密钥;当所述分派方式为多对二分派、所述比较内容包括的值的来源为多个、且所述比较内容包括的值的类型中至少之一为硬编码字符串时,确定所述应用程序中的隐藏功能为主密码;当所述分派方式为多对多分派、所述比较内容包括的值的来源为多个、且所述比较内容包括的值的类型中至少之一为指定字符串时,确定所述应用程序中的隐藏功能为秘密命令。15.在上述方案中,所述输入验证检测模块,还用于对所述应用程序中的比较内容进行接口识别处理,得到所述比较内容使用的函数所包括的接口信息;根据所述接口信息,确定所述比较内容包括的值的来源;其中,所述比较内容包括的值的来源包括以下至少之一:文件操作、数据库操作、共享模块、网络请求、广播。16.在上述方案中,所述输入验证检测模块,还用于基于应用程序的源代码,创建应用程序的控制流图;遍历所述控制流图,以确定所述应用程序的源代码中使用的函数;根据所述函数与所述用户输入的对应关系,确定所述应用程序的源代码中的用户输入;根据所述函数与所述比较内容的对应关系,确定所述应用程序的源代码中的比较内容。17.在上述方案中,所述行为发现及验证模块,还用于对所述应用程序的源代码进行向后切片处理,得到所述用户输入的上下文中的逻辑条件;针对每一条逻辑条件对所述用户输入进行验证处理,以得到验证结果;当所述验证结果表征通过所述用户输入与任一所述逻辑条件不匹配时,确定所述应用程序存在隐藏功能。18.在上述方案中,所述行为发现及验证模块,还用于获取所述应用程序中待追踪的目标信息,确定所述目标信息对应的切片规则;根据所述切片规则,对所述应用程序的源代码进行向后切片处理,得到所述目标信息对应的用户输入的上下文中的逻辑条件。19.本技术实施例提供一种电子设备,包括:20.存储器,用于存储可执行指令;21.处理器,用于执行所述存储器中存储的可执行指令时,实现本技术实施例提供的应用程序的检测方法。22.本技术实施例提供一种计算机可读存储介质,存储有可执行指令,用于被处理器执行时,实现本技术实施例提供的应用程序的检测方法。23.本技术实施例具有以下有益效果:24.通过对比较内容进行上下文内容识别处理,确定比较内容的类型;通过对用户输入进行上下文条件识别处理,确定用户输入的代码分派行为;通过引用用户输入的上下文,提高了对用户输入验证的准确性。结合确定的比较内容的类型和用户输入的代码分派行为,挖掘出应用程序中的隐藏功能,从而在使用应用程序的过程中保证了安全性。附图说明25.图1是本技术实施例提供的应用程序的检测系统100的一个架构示意图;26.图2是本技术实施例提供的终端400-1的结构示意图;27.图3a是本技术实施例提供的应用程序的检测方法的流程示意图;28.图3b是本技术实施例提供的应用程序的检测方法的流程示意图;29.图3c是本技术实施例提供的应用程序的检测方法的流程示意图;30.图4是本技术实施例提供的应用程序的检测方法的系统结构示意图;31.图5是本技术实施例提供的应用程序的检测方法的整体流程示意图;32.图6是本技术实施例提供的应用程序的检测方法中的隐藏行为验证的策略的流程示意图。具体实施方式33.为了使本技术的目的、技术方案和优点更加清楚,下面将结合附图对本技术作进一步地详细描述,所描述的实施例不应视为对本技术的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本技术保护的范围。34.在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。35.在以下的描述中,所涉及的术语“第一\第二\第三”仅仅是是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本技术实施例能够以除了在这里图示或描述的以外的顺序实施。36.除非另有定义,本文所使用的所有的技术和科学术语与属于本技术的
技术领域
:的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本技术实施例的目的,不是旨在限制本技术。37.对本技术实施例进行进一步详细说明之前,对本技术实施例中涉及的名词和术语进行说明,本技术实施例中涉及的名词和术语适用于如下的解释。38.1)用户输入:本地用户在应用程序中人工输入的数据,例如用户输入的字符串。39.2)比较内容:应用程序的源代码中,与用户输入进行逻辑处理的比较数据,例如,判断条件中与用户输入进行比较的字符串。40.3)代码分派行为:在一种方法中验证用户输入时的两种属性,包括(i)在一种方法的判断条件内,用户输入被验证了多少次;(ii)如果满足验证,可以采取多少个条件分支。41.4)硬编码字符串:被硬编码的字符串,硬编码是将字符串直接嵌入到应用程序的源代码中的软件开发实践,只能通过编辑源代码和重新编译可执行文件来修改。42.5)机密字符串:是一类特殊的对象,即代码中不可被改变的字符串。43.6)上下文:指的是执行应用程序的运行环境,运行环境包括配置的环境信息,例如,设置的各种变量或参数的值。44.7)污点分析:是一种跟踪并分析污点信息在程序中流动的技术。在漏洞分析中,使用污点分析技术将所感兴趣的数据(通常来自应用程序的外部输入)标记为污点数据,然后通过跟踪和污点数据相关的信息的流向,可以知道它们是否会影响某些关键的程序操作,进而挖掘程序漏洞。即,将应用程序是否存在某种漏洞的问题转化为污点信息是否会被sink点(信息泄露的位置,即污点汇聚点)上的操作所使用的问题。45.8)代码,就是程序员用开发工具所支持的语言写出来的源文件,是一组由字符、符号或信号码元以离散形式表示信息的明确的规则体系。在现代程序语言中,源代码可以是以书籍或者磁带的形式出现,但最为常用的格式是文本文件。46.9)方法,是java创建一个有名字的子程序的方法,在一个类中,程序的作用体现在方法中。对于简单数据类型来说,java实现的是值传递,方法接收参数的值,但不能改变这些参数的值。如果要改变参数的值,则用引用数据类型,因为引用数据类型传递给方法的是数据在内存中的地址,方法中对数据的操作可以改变数据的值。47.10)控制流图(cfg,controlflowgraph)也叫控制流程图,是一个应用程序的抽象表现,是用在编译器中的一个抽象数据结构,由编译器在内部维护,代表了一个应用程序执行过程中会遍历到的所有路径。它用图的形式表示一个过程内所有基本块执行的可能流向,也能反映一个过程的实时执行过程。48.11)秘密访问密钥(sk,secretaccesskey),通过秘密访问密钥对请求数据进行签名验证,用于确保请求的机密性、完整性和请求者身份的正确性。49.12)主密码,设置主密码后,每次会话只需输入一次主密码,即能够查看保存的账号和密码,即不用每次查看都需要重新输入账号和秘密。50.13)秘密命令,用于修改文件或文件夹隐藏属性。51.14)共享模块,通过准备“发布”共享编写的模块,“发布”就是指一个文件的集合,这些文件联合在一起允许构建、打包、发布的模块。52.相关技术中通常是通过跟踪安全相关的数据流、关注与网络通信相关的数据流,发现应用程序的数据流的相关漏洞。而市面上经常出现的应用程序中,除了用户需要的有用的功能之外,还包含很多未公开显示给用户的隐藏行为。这些隐藏行为可能在用户不知情的情况下,通过发送指定按键后直接进入管理页面篡改数据。因此,这些隐藏行为对于用户来说是很大的安全隐患。而相关静态分析工具中仅仅专注于应用程序的相关漏洞,不关注逻辑问题,且未考虑应用程序的上下文情况,导致逻辑无法验证,不能发现应用程序中的隐藏功能,导致应用程序的安全性能较弱。53.针对上述技术问题,本技术实施例提供一种应用程序的检测方法、装置、电子设备和计算机可读存储介质,能够准确检测应用程序中的隐藏功能以保证应用程序使用过程中的安全性,下面说明本技术实施例提供的应用程序的检测方法的示例性应用,本技术实施例提供的应用程序的检测方法可以由各种电子设备实施,例如可以实施为智能手机、平板电脑、笔记本电脑、台式机电脑等各种类型的终端,也可以实施为服务器。下面,将说明电子设备实施为终端时示例性应用。54.下面,说明终端实施本技术实施例提供的应用程序的检测方法的一个示例性的应用系统架构。参见图1,图1是本技术实施例提供的应用程序的检测系统100的一个架构示意图,其中,应用程序的检测系统100包括:服务器200、网络300和终端(示例性地示出了终端400-1和终端400-2)。终端通过网络300连接服务器200,网络300可以是广域网或者局域网,又或者是二者的组合。55.在一些实施例中,终端400-1中设有应用程序,将应用程序的源代码发送至服务器200,服务器200对应用程序的源代码进行输入验证检测,得到应用程序的用户输入和比较内容;对比较内容进行上下文内容识别处理,得到比较内容的类型;对用户输入进行上下文条件识别处理,得到用户输入的代码分派行为;基于比较内容的类型和用户输入的代码分派行为,确定应用程序中的隐藏功能,将该应用程序的隐藏功能返回至终端400-1,终端400-1通过多种展示方式展示该应用程序的隐藏功能,以供用户知晓该应用程序存在的安全隐患。56.在一些实施例中,终端400-1可以集成实施本技术实施例提供的应用程序的检测方法的功能,即由终端400-1单独实施本技术实施例提供的应用程序的检测方法。终端400-1中设有应用程序,获取应用程序的源代码,对应用程序的源代码进行输入验证检测,得到应用程序的用户输入和比较内容;对比较内容进行上下文内容识别处理,得到比较内容的类型;对用户输入进行上下文条件识别处理,得到用户输入的代码分派行为;基于比较内容的类型和用户输入的代码分派行为,确定应用程序中的隐藏功能,通过多种展示方式展示该应用程序的隐藏功能,以供用户知晓该应用程序存在的安全隐患。57.在一些实施例中,服务器200可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn、以及大数据和人工智能平台等基础云计算服务的云服务器。终端400-1、终端400-2以及服务器200可以通过有线或无线通信方式进行直接或间接地连接,本技术实施例中不做限制。58.接下来,说明本技术实施例提供的用于实施应用程序的检测方法的电子设备的结构,如前所述,本技术实施例提供的电子设备可以是图1中的终端400-1。参见图2,图2是本技术实施例提供的终端400-1的结构示意图,图2所示的终端400包括:至少一个处理器410、存储器450、至少一个网络接口420和用户接口430。终端400中的各个组件通过总线系统440耦合在一起。可理解,总线系统440用于实现这些组件之间的连接通信。总线系统440除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图2中将各种总线都标为总线系统440。59.处理器410可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(dsp,digitalsignalprocessor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。60.用户接口430包括使得能够呈现媒体内容的一个或多个输出装置431,包括一个或多个扬声器和/或一个或多个视觉显示屏。用户接口430还包括一个或多个输入装置432,包括有助于用户输入的用户接口部件,比如键盘、鼠标、麦克风、触屏显示屏、摄像头、其他输入按钮和控件。61.存储器450可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器450可选地包括在物理位置上远离处理器410的一个或多个存储设备。62.存储器450包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(rom,readonlymemory),易失性存储器可以是随机存取存储器(ram,randomaccessmemory)。本技术实施例描述的存储器450旨在包括任意适合类型的存储器。63.在一些实施例中,存储器450能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。64.操作系统451,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;65.网络通信模块452,用于经由一个或多个(有线或无线)网络接口420到达其他计算设备,示例性的网络接口420包括:蓝牙、无线相容性认证(wifi)、和通用串行总线(usb,universalserialbus)等;66.呈现模块453,用于经由一个或多个与用户接口430相关联的输出装置431(例如,显示屏、扬声器等)使得能够呈现信息(例如,用于操作外围设备和显示内容和信息的用户接口);67.输入处理模块454,用于对一个或多个来自一个或多个输入装置432之一的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。68.在一些实施例中,本技术实施例提供的应用程序的检测装置可以采用软件方式实现,图2示出了存储在存储器450中的应用程序的检测装置455,其可以是程序和插件等形式的软件,包括以下软件模块:输入验证检测模块4551、上下文内容识别模块4552、上下文内容恢复模块4553和行为发现及验证模块4554,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。将在下文中说明各个模块的功能。69.本技术实施例提供的应用程序的检测方法可以由图1中的终端400-1或服务器200单独执行,也可以由图1中的终端400-1和服务器200协同执行。70.下面,以由图1中的终端400-1单独执行本技术实施例提供的应用程序的检测方法为例说明。参见图3a,图3a是本技术实施例提供的应用程序的检测方法的流程示意图,将结合图3a示出的步骤进行说明。71.在步骤101中,对应用程序的源代码进行输入验证检测,得到应用程序的用户输入和比较内容。72.在一些实施例中,基于应用程序的源代码创建应用程序的控制流图,遍历控制流图,确定应用程序中使用的函数;根据函数与用户输入的对应关系,确定应用程序的源代码中的用户输入;根据函数与比较内容的对应关系,确定应用程序的源代码中的比较内容。73.在一些示例中,基于应用程序的源代码创建应用程序的控制流图可以通过以下方式实现:将应用程序的源代码中的每条应用程序的语句设定为一个节点,按语句执行顺序,两相邻语句之间设置有向边;有向边为应用程序的执行路径,有向边的方向表示语句执行的先后顺序,以得到有向控制流图。遍历有向控制流图中的所有路径,确定出应用程序中使用的函数。终端中存储有函数、用户输入、比较内容的对应关系,例如,函数edittext.gettext().tostring()是获取用户输入的字符串的函数,在函数if(a《60,“不及格”,if(a》80,“良好”))中,60、80为比较内容。所描述的字符串不应视为对本技术的限制,用户输入还可以是数据库输入、配置文件等。74.在步骤102中,对比较内容进行上下文内容识别处理,得到比较内容的类型。75.在一些实施例中,比较内容的类型包括硬编码字符串、机密字符串;对比较内容进行上下文内容识别处理,得到比较内容的类型,可以通过以下方式实现:当比较内容包含指定字符串的子集、用户输入等于比较内容包括的值、且每个比较内容包括的值对应应用程序的不同执行结果时,确定比较内容的类型为机密字符串。当用户输入等于比较内容包括的值、比较内容包括的值的来源为一个、且应用程序的执行结果均相同时,确定比较内容的类型为硬编码字符串。76.在一些示例中,假设比较内容包括abc、cd,识别出abc、de为指定字符串,当用户输入的值空间中包含指定字符串的子集,例如用户的值空间中包含abc,即,用户能够输入abc,当用户输入abc等于比较内容abc时,应用程序会执行秘密命令,因此,比较内容的类型为机密字符串。77.在另一些示例中,假设比较内容包括的值的来源为一个(例如均来自数据库操作获取本地主机名gethostname()),当用户输入任何本地主机名时,用户输入等于比较内容的值,应用程序的执行结果仅有一个,因此,比较内容的类型为硬编码字符串。78.在本技术实施例中,通过对比较内容进行上下文内容识别处理,确定比较内容的类型,以便后续基于比较内容的类型检测应用程序的隐藏功能,提高检测的准确性。79.在步骤103中,对用户输入进行上下文条件识别处理,得到用户输入的代码分派行为。80.在一些实施例中,用户输入的代码分派行为包括:用户输入的逻辑条件的数目、逻辑条件产生的分支数目;参见图3b,图3b是本技术实施例提供的应用程序的检测方法的一个流程示意图,示出了图3a中的步骤103,还可以通过执行步骤1031和步骤1032来实现。将结合各步骤进行说明。81.在步骤1031中,确定用户输入的上下文中的逻辑条件以及逻辑条件的数目。82.在一些示例中,判断用户输入的上下文中有多少逻辑条件,以及确定在一种方法的判断条件(即逻辑条件)内,用户输入被验证了多少次(即,多少个比较)。举例来说,函数if(a《60,“不及格”,if(a《80,“良好”,if(a》90,“优秀”))),可知判断条件为a《60、a《80、a》90,即用户输入a被验证了三次,逻辑条件的数目为3,即多个比较。83.在步骤1032中,针对每条逻辑条件对用户输入进行验证,以确定逻辑条件产生的分支数目。84.在一些示例中,根据逻辑条件对用户输入进行验证,生成对应的字符串,以确保应用程序每个逻辑都能过,由此,确定每个满足验证的逻辑条件可以采取多少个分支(即,多少个动作)。举例来说,函数if(a《60,“不及格”,if(a《80,“良好”,if(a》90,“优秀”)))。可知,逻辑条件的分支为不及格、良好及优秀,即分支数目为3个,即多个动作。85.在本技术实施例中,通过对用户输入进行上下文条件识别处理确定用户输入的代码分派行为,以便后续基于用户输入的代码分派行为检测应用程序的隐藏功能,提高检测的准确性。86.在步骤104中,基于比较内容的类型和用户输入的代码分派行为,确定应用程序中的隐藏功能。87.在一些实施例中,根据用户输入的逻辑条件的数目和逻辑条件的分支数目的数量关系,确定与代码分派行为对应的分派方式;基于分派方式和比较内容的类型,对用户输入进行验证,确定应用程序中的隐藏功能。举例来说,假设用户输入的逻辑条件的数目为3(多个比较)和逻辑条件的分支数目为3(多个动作),确定分派方式为多对多分派。88.在一些实施例中,分派方式包括:一对二分派、多对二分派和多对多分派;参见图3c,图3c是本技术实施例提供的应用程序的检测方法的一个流程示意图,示出了3a中的步骤104之后,还可以执行步骤1041至步骤1043实现,将结合各步骤进行说明。89.在步骤1041中,当分派方式为一对二分派、且比较内容的类型为硬编码字符串时,确定应用程序中的隐藏功能为秘密访问密钥。90.作为示例,假设函数if(a==abc){true;}else{false;},可知,判断条件为a==0,即1个比较,分支为true、false,即两个动作。因此为一对二分派,若abc为硬编码字符串时,可以确定应用程序中的隐藏功能为秘密访问密钥。91.在步骤1042中,当分派方式为多对二分派、比较内容包括的值的来源为多个、且比较内容包括的值的类型中至少之一为硬编码字符串时,确定应用程序中的隐藏功能为主密码。92.作为示例,由于比较内容包括的值的来源为多个,即比较内容包括的值为多个不同的值,且比较内容包括的值的类型中至少之一为硬编码字符串,可知,当用户输入等于多个不同值中的任何值,程序将执行相同的操作。也就是说,每个不同的值都可以覆盖其他值,即应用程序可以使用硬编码字符串覆盖其他值源,以将应用程序驱动到相同状态(相同的应用程序的执行结果),可以确定应用程序中的隐藏功能为主密码。93.在步骤1043中,当分派方式为多对多分派、比较内容包括的值的来源为多个、且比较内容包括的值的类型中至少之一为指定字符串时,确定应用程序中的隐藏功能为秘密命令。94.作为示例,当用户使用终端运行的应用程序时,在应用程序中输入某个指定按键(指定字符串,例如hel),应用程序的后台可以直接进入管理页面篡改数据,可以确定应用程序中的隐藏功能为秘密命令。95.在本技术实施例中,结合确定的比较内容的类型和用户输入的代码分派行为,对用户输入进行验证,以挖掘出应用程序中的隐藏功能,提升对应用程序检测的覆盖面。96.在一些实施例中,对应用程序中的比较内容进行接口识别处理,得到比较内容使用的函数所包括的接口信息;根据接口信息,确定比较内容包括的值的来源;其中,比较内容包括的值的来源包括以下至少之一:文件操作、数据库操作、共享模块、网络请求、广播。97.在一些示例中,终端中存储了函数所包括的接口信息与比较内容的来源的对应关系,举例来说,当识别出函数所包括的接口信息为objitem.name="studentdb",可知比较内容的来源为数据库操作。98.需要说明的是,比较内容包括的值的来源为文件操作,表征比较内容包括的值是通过对文件进行操作得到的。比较内容包括的值的来源为数据库操作,表征比较内容包括的值是通过对数据库进行操作得到的。比较内容包括的值的来源为网络请求,表征比较内容包括的值是通过向服务器发起网络请求得到的。比较内容包括的值的来源为广播,表征比较内容包括的值是通过广播得到的值。比较内容包括的值的来源为共享模块,表征比较内容包括的值是通过共享模块得到的值。99.在本技术实施例中,通过对应用程序中的比较内容进行接口识别处理,确定比较内容的来源,以便后续基于比较内容的来源检测应用程序的隐藏功能,提高检测的准确性。100.在一些实施例中,对应用程序的源代码进行向后切片处理,得到用户输入的上下文中的逻辑条件;针对每一条逻辑条件对用户输入进行验证处理,以得到验证结果;当验证结果表征通过用户输入与任一逻辑条件不匹配时,确定应用程序存在隐藏功能。101.在一些示例中,对应用程序的源代码进行向后切片处理,得到用户输入的上下文中的逻辑条件,通过切片规则选取感兴趣的用户输入的上下文的逻辑条件:对应用程序的源代码进行向后切片处理,得到用户输入的上下文中的逻辑条件,可以通过以下方式实现:获取应用程序中待追踪的目标信息,确定目标信息对应的切片规则;根据切片规则,对应用程序的源代码进行向后切片处理,得到目标信息对应的用户输入的上下文中的逻辑条件。102.举例来说,获取用户感兴趣的用户输入以作为待追踪的目标信息,确定与目标信息对应的切片规则,按照与目标信息对应的切片规则,对应用程序的源代码进行向后切片,得到与目标信息对应的用户输入的上下文中的逻辑条件,假设逻辑条件包括a《abc,a《80,a》90,而用户输入a只能输入数字假设为70,当通过a《abc对用户输入70进行验证处理,得到验证结果表征通过用户输入70与该逻辑条件a《abc不匹配时,确定应用程序存在隐藏功能。103.需要说明的是,根据切点(感兴趣点n)在切片s中的位置分为后向程序切片与前向程序切片。向后切片是为了寻找与程序p中那些对某个兴趣点的变量有影响的语句和控制谓词,即应当在程序p中兴趣点的前面。向后切片处理可以通过编程语言go中的切片(slice)来实现。104.在本技术实施例中,基于感兴趣点的切片规则,对应用程序进行切片,提升切片效率,节约处理资源。105.下面,将说明本技术实施例在一个实际的应用场景中的示例性应用。以检测安卓应用程序包(apk,androidapplicationpackage)为例,将安卓应用程序包作为终端(终端用于实施本技术实施例提供的应用程序的检测方法)的输入,终端通过对安卓应用程序包进行输入验证检测,得到应用程序的用户输入和比较内容;分别对比较内容、用户输入进行上下文内容识别处理和上下文条件识别处理,得到比较内容的来源以及用户输入的代码分派行为;基于比较内容的来源和用户输入的代码分派行为,确定出应用程序中的隐藏功能,智能化地检测应用程序的隐藏功能,终端将隐藏功能输出以供用户参考,更全面地让用户感知应用程序的安全性能。106.参见图4,图4是本技术实施例提供的应用程序的检测方法的系统结构示意图。其中,应用程序的检测方法的系统结构包括四个模块:输入验证检测模块、上下文内容识别模块、上下文内容恢复模块和行为发现及验证模块。下面将结合图4详细说明本技术实施例提供的应用程序的检测方法的系统结构的各模块。107.输入验证检测模块:用于对应用程序进行污点分析和进行关键系统应用程序接口(api,applicationprogramminginterface)识别。对应用程序进行污点分析以识别出用户输入和比较内容,通过静态污点分析来表示和监控其传播。关键系统api识别,以识别出比较内容的来源:文件操作,数据库操作,共享模块,还有网络请求、广播等涉及字符串处理的函数,例如安卓系统中的edittext.gettext,edittext.geteditabletext和editable.tostring等函数。需要说明的是,输入验证检测模块目前仅关注本地用户的人工输入行为。108.上下文内容识别模块:用于对应用程序进行静态向后切片,得到比较内容的生成逻辑,以判断出比较内容的生成逻辑是否为硬编码。以及根据逻辑判断是否需要修改当前的输入值等。举例来说,例如圣诞节彩蛋,通过判断系统日期是否为12月25号,当判断为是时将界面全部修改为圣诞节样式,因此,当将界面全部修改圣诞节样式时,需要修改系统日期为12月25号。109.上下内容恢复模块:1)用于判断用户输入的值的上下文有多少逻辑条件,即确定在一种方法的判断条件(即逻辑条件)内,用户输入被验证了多少次(即,多少个比较)。2)依次输入用户输入,根据逻辑条件的每个分支,生成对应的字符串,确保应用程序每个逻辑都能过,即确定每个满足验证的逻辑条件可以采取多少个分支(即,多少个动作)。110.行为发现及验证模块:1)主要针对以上输入值的上下文中的逻辑条件,判断应用程序的行为是否为以下三种类型:a)秘密访问密钥;b)主密码;c)隐藏的命令接口(即秘密命令)。举例来说,一个屏幕锁应用程序,可以使用访问键重置任意用户的密码来解锁屏幕并进入系统,或者,可以通过输入硬编码的图形验证码,达到暴露破解的目的。2)除去用户可访问的行为,将应用程序的隐藏行为(秘密访问密钥、主密码、隐藏的命令接口(即秘密命令))进行展示,由安全人员进行辅助判断。111.参见图5,图5是本技术实施例提供的应用程序的检测方法的整体流程示意图。下面将结合图5详细说明本技术实施例提供的应用程序的检测方法的整体流程。112.在步骤501中,终端对输入的apk进行输入验证检测。终端对输入的apk进行输入验证检测,可以通过静态污点分析的开源软件实现,例如,污点分析工具flowdroid。以识别出用户输入、比较内容和比较内容的来源。113.在步骤502中,终端对比较内容进行上下文内容识别处理。在输入验证检测之后,终端有两个分支,一个是处理应用程序中的字符串(即比较内容),并且对该字符串进行上下文内容识别,判断出字符串的逻辑条件,根据字符串的逻辑条件分析出为该字符串为硬编码字符串(当字符串的逻辑条件是固定的且不依赖其他值时,则为硬编码字符串)。114.在步骤503中,终端对用户输入进行上下文条件识别处理。第二个分支是针对用户输入进行上下文条件识别处理,确定用户输入的逻辑条件中存在多少分支(即分支数目),然后针对每个分支,判断需要输入的逻辑条件有多少个(逻辑条件的数目)。115.在步骤504中,终端确定应用程序中的隐藏行为。这里主要的处理是通过比较内容(包括比较内容的来源和类型)和用户输入(包括用户输入和用户输入的代码分派行为)的比较,判断应用程序中存在的秘密访问密钥、主密码和秘密命令等。116.在一些实施例中,图6是本技术实施例提供的应用程序的检测方法中的隐藏行为验证的策略的流程示意图。117.步骤601:终端判断逻辑条件是否来源于用户输入。若是,则执行步骤602;若否,则执行步骤603。终端对输入的应用程序apk进行判断,判断apk中的逻辑条件是否通过用户输入就能实现,例如逻辑条件包括a《abc,a《80,a》90,而用户输入a只能输入数字假设为70,则判断用户输入不能实现apk中的逻辑条件,即终端判断逻辑条件不是来源于用户输入。118.步骤602:终端判断是否为存在一个条件。若是,则执行步骤607,确定分派方式为一对二分派,然后执行步骤607;若否,则执行步骤605。119.步骤603:终端确定逻辑条件需要额外的请求实现。120.步骤604:终端确定隐藏行为是秘密访问密钥。121.步骤605:终端判断是否为存在多个条件。122.步骤606:终端判断是否为存在两个动作。若是,则确定分派方式为多对二分派,然后执行步骤607;若否,则确定分派方式为多对多,然后执行步骤607。123.需要说明的是,用户输入的代码分派可以具有两个属性:(i)在一种方法的判断条件(即逻辑条件)内,用户输入被验证了多少次(逻辑条件的数目,即多少个比较);(ii)如果满足验证,可以采取多少个条件分支(分支数目,即多少个动作)。终端将这两个属性进行结合,以确定代码执行流程方面验证用户输入的分派方式。124.由于每个满足的逻辑条件只能产生两个分支(对或错),因此将这两个分支记为两个动作。通过计算输入被比较的次数,以及比较可以产生的动作,可以确定出分派方式有三种:(i)一个比较和两个动作(即一对二分派);(ii)多个比较和两个动作(即多对二分派);(iii)多个比较和多个动作(即多对多分派)。即,分派方式可以分类为:一对二分派(此代码分派指示用户输入仅在方法内的判断块中有效一次。因此,如果满足用户输入验证的条件,则仅采取一个期望的分支)、多对二分派(该代码补丁意味着用户输入在判断块中被多次验证。但是,如果满足这些验证中的任何一个,则将仅采取一个期望的分支。在这种情况下,用户输入和数组元素之间的每个比较都是一个条件。因此,它具有“许多”条件。但是,无论满足哪个条件,都将采取一个期望的调度)、多对多分派(如果存在多个比较和多个操作,则意味着使用不同的比较目标多次验证了用户输入,并且可以根据比较生成多个结果。这种分派的代表示例是切换案例块,其中每个动作都分配给一个唯一的案例)。125.步骤607:终端基于分派方式确定隐藏行为(即隐藏功能)。126.在一些实施例中,从一对二分派中发现应用程序的隐藏行为。从一对二分派中发现应用程序的隐藏行为可以通过以下方式实现:当用户输入的代码分派行为是一对二分派、且比较内容是应用程序内部的硬编码字符串时,确定存在秘密访问密钥的隐藏行为。127.需要说明的是,使用这种类型的代码分派,由于用户输入只能在应用程序的方法中进行一次验证,并且比较的内容也不为用户所知,并且与此同时,只有两个结果操作,可以确定用户输入是用作解锁行为的键,即应用程序包括秘密访问密钥的隐藏行为。硬编码字符串的判断可以通过以下方式实现:如果比较内容全部来自同一来源,在一个方法内,当用户输入等于比较内容的任何值时,应用程序将始终移至相同状态,可以确定该比较内容为硬编码字符串。换句话说,这些比较的内容项一起形成列表,并且将用户输入与列表中的每个项进行比较以检查等效性,每个等效项都导致相同的程序行为。128.在一些实施例中,从多对二分派中发现应用程序的隐藏行为。从多对二分片中发现应用程序的隐藏行为可以通过以下方式实现:当用户输入的代码分派行为为多对二分派、比较内容包括的值来自多个不同的来源、且比较内容包括的值之一是硬编码字符串,确定应用程序存在主密码的隐藏行为。129.需要说明的是,在此代码分派中,用一种方法对用户输入进行多次验证,并且对不同验证的满意都会导致相同的程序行为。同时,对于具有相同用户输入的所有逻辑条件的验证,比较内容可能来自一个或多个来源。当比较内容包括的值为多个来源(这种类型的比较说明了一种方法,在这种方法中,如果用户输入等于多个比较内容中的任何值,则程序将执行相同的操作。换句话说,每个比较值都可以覆盖其他值)、且这些值之一是硬编码字符串(应用程序可以使用硬编码字符串覆盖其他值源,以将应用程序驱动到相同状态)。来自不同来源的比较内容表明比较内容的值以不同的方式生成,并且比较内容的值不相同。因此,当比较内容包括的值来自多个来源、且存在可以覆盖其他输入源的硬编码字符串,则可以确定应用程序中存在主密码的隐藏行为。130.在一些实施例中,从多对多分派中发现秘密命令。当分派方式为多对多分派、比较内容包括的值的来源为多个、且比较内容包括的值的类型中至少之一为指定字符串时,确定应用程序中的隐藏功能为秘密命令。131.需要说明的是,在多对多分派中,使用来自不同来源或相同来源的不同比较值(比较内容包括的值)来验证同一用户输入。当比较内容包括的值被解析为机密字符串(即指定字符串)时,此类上下文表明,在一种方法内用户输入可以从一组指定字符串中获取一个值,并且每个字符串都可以触发不同的程序动作。换句话说,用户输入的值空间包含指定字符串的子集,这些字符串的值对于普通用户而言是未知的,并且这些字符串中的每一个都可以使应用程序进入不同的状态,因此,可以确定这些指定字符串为秘密命令。132.在一些实施例中,终端还可以通过判断是否需要额外修改的方式判断应用程序的隐藏行为。即,当用户输入需要额外修改才能满足用户输入的上下文的所有逻辑条件时,终端可以确定应用程序存在隐藏的逻辑行为,例如:用户只能输入数字(用户输入只包括数字),但逻辑条件中存在字符串判断,由此判断应用程序存在隐藏的逻辑行为。133.在本技术实施例中,通过检查验证用户输入的方式来发现隐藏的功能,解决了相关技术中不能发现应用程序中隐藏行为的问题,来规避隐藏行为所带来的风险。134.下面继续说明本技术实施例提供的应用程序的检测装置455的实施为软件模块的示例性结构,在一些实施例中,如图2所示,存储在存储器450的应用程序的检测装置455中的软件模块可以包括:135.输入验证检测模块4551,用于对应用程序的源代码进行输入验证检测,得到所述应用程序的用户输入和比较内容;上下文内容识别模块4552,用于对所述比较内容进行上下文内容识别处理,得到所述比较内容的类型;上下文内容恢复模块4553,用于对所述用户输入进行上下文条件识别处理,得到所述用户输入的代码分派行为;行为发现及验证模块4554,用于基于所述比较内容的类型和所述用户输入的代码分派行为,确定所述应用程序中的隐藏功能。136.在一些实施例中,所述行为发现及验证模块4552,还用于当所述比较内容包含指定字符串的子集、所述用户输入等于所述比较内容包括的值、且每个比较内容包括的值对应所述应用程序的不同执行结果时,确定所述比较内容的类型为机密字符串;当所述用户输入等于所述比较内容包括的值、所述比较内容包括的值的来源为一个、且所述应用程序的执行结果均相同时,确定所述比较内容的类型为硬编码字符串。137.在一些实施例中,所述用户输入的代码分派行为包括:所述用户输入的逻辑条件的数目、所述逻辑条件产生的分支数目;所述上下文内容恢复模块4553,还用于确定所述用户输入的上下文中的逻辑条件以及所述逻辑条件的数目;针对每条所述逻辑条件对所述用户输入进行验证,以确定所述逻辑条件产生的分支数目。138.在一些实施例中,所述行为发现及验证模块4554,还用于根据所述用户输入的逻辑条件的数目和所述逻辑条件的分支数目的数量关系,确定与所述代码分派行为对应的分派方式;基于所述分派方式和所述比较内容的类型,对所述用户输入进行验证,确定所述应用程序中的隐藏功能。139.在一些实施例中,所述分派方式包括:一对二分派、多对二分派和多对多分派;所述行为发现及验证模块4554,还用于当所述分派方式为一对二分派、且所述比较内容的类型为硬编码字符串时,确定所述应用程序中的隐藏功能为秘密访问密钥;当所述分派方式为多对二分派、所述比较内容包括的值的来源为多个、且所述比较内容包括的值的类型中至少之一为硬编码字符串时,确定所述应用程序中的隐藏功能为主密码;当所述分派方式为多对多分派、所述比较内容包括的值的来源为多个、且所述比较内容包括的值的类型中至少之一为指定字符串时,确定所述应用程序中的隐藏功能为秘密命令。140.在一些实施例中,所述输入验证检测模块4551,还用于对所述应用程序中的比较内容进行接口识别处理,得到所述比较内容使用的函数所包括的接口信息;根据所述接口信息,确定所述比较内容包括的值的来源;其中,所述比较内容包括的值的来源包括以下至少之一:文件操作、数据库操作、共享模块、网络请求、广播。141.在一些实施例中,所述输入验证检测模块4551,还用于基于应用程序的源代码,创建应用程序的控制流图;遍历所述控制流图,以确定所述应用程序的源代码中使用的函数;根据所述函数与所述用户输入的对应关系,确定所述应用程序的源代码中的用户输入;根据所述函数与所述比较内容的对应关系,确定所述应用程序的源代码中的比较内容。142.在一些实施例中,所述行为发现及验证模块4554,还用于对所述应用程序的源代码进行向后切片处理,得到所述用户输入的上下文中的逻辑条件;针对每一条逻辑条件对所述用户输入进行验证处理,以得到验证结果;当所述验证结果表征通过所述用户输入与任一所述逻辑条件不匹配时,确定所述应用程序存在隐藏功能。143.在一些实施例中,所述行为发现及验证模块4554,还用于获取所述应用程序中待追踪的目标信息,确定所述目标信息对应的切片规则;根据所述切片规则,对所述应用程序的源代码进行向后切片处理,得到所述目标信息对应的用户输入的上下文中的逻辑条件。144.本技术实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本技术实施例上述的应用程序的检测方法。145.本技术实施例提供一种存储有可执行指令的计算机可读存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本技术实施例提供的应用程序的检测方法,例如,如图3a、3b、3c示出的应用程序的检测方法。146.在一些实施例中,计算机可读存储介质可以是fram、rom、prom、eprom、eeprom、闪存、磁表面存储器、光盘、或cd-rom等存储器;也可以是包括上述存储器之一或任意组合的各种设备。147.在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。148.作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(html,hypertextmarkuplanguage)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。149.作为示例,可执行指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。150.综上所述,通过本技术实施例通过引用用户输入的上下文,提高了对用户输入验证的准确性。结合确定的比较内容的类型和用户输入的代码分派行为,挖掘出应用程序中的隐藏功能,以提升对应用程序检测的覆盖面;在本技术实施例中,通过对应用程序中的比较内容进行接口识别处理,确定比较内容的来源,以便后续基于比较内容的来源检测应用程序的隐藏功能,提高检测的准确性;在本技术实施例中,通过检查验证用户输入的方式来发现隐藏的功能,解决了相关技术中不能发现应用程序中隐藏行为的问题,来规避隐藏行为所带来的风险。151.以上所述,仅为本技术的实施例而已,并非用于限定本技术的保护范围。凡在本技术的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本技术的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1