一种应用安全性的检测方法及装置
技术领域
本公开涉及终端技术领域,尤其涉及一种应用安全性的检测方法及装置。
背景技术
目前,随着终端技术的发展,多种应用被开发。例如,工程设计应用、文献检索应用、人事管理应用和财务管理应用等,对于一般用户而言,在日常生活中经常会用到各项娱乐类的应用来调剂生活。
另外,很多应用配置有相应的插件,所述插件是一种遵循一定规范的应用程序接口编写的程序,主要用于扩展应用的功能,其中,插件通常通过调用可执行文件实现相应功能。
发明人在本申请的研究过程中发现,应用在调用插件时,有时会被劫持。其中,被劫持指的是黑客篡改可执行文件,导致可执行文件的业务逻辑改变,进而黑客会获取该应用的用户信息,造成用户信息泄露,损害用户利益。但是,目前无法检测出应用是否存在被劫持的风险。
发明内容
本发明实施例提供了一种应用安全性的检测方法及装置,以一定程度上解决传统技术无法检测应用是否存在被劫持的风险的问题。
为了解决上述技术问题,本发明实施例公开了如下技术方案:
根据本公开实施例的第一方面,提供一种应用安全性的检测方法,包括:
运行待检测的应用;
通过第一算法计算所述应用对应的可执行文件的第一标识,并在所述可执行文件中添加代码;
再次启动并运行所述应用,并通过所述第一算法计算添加代码后的可执行文件的第二标识;
对比所述第一标识与所述第二标识,若所述第一标识与所述第二标识不相等,则确定所述应用存在被劫持的风险。
优选的,还包括:
获取所述应用的代码,并通过所述应用的代码判断所述应用是否使用动态加载技术,若是,再执行所述运行待检测的应用的操作。
优选的,在所述运行待检测的应用之后,并在所述通过第一算法计算所述应用对应的可执行文件的第一标识之前,还包括:
检查所述应用对应的存储目录中是否存在所述可执行文件,若存在,再执行所述通过第一算法计算所述应用对应的可执行文件的第一标识的操作。
优选的,所述在所述可执行文件中添加代码,包括:
在所述可执行文件的前段、和/或中间部分、和/或末尾部分添加所述代码。
优选的,若运行所述应用的操作系统为Android操作系统,所述可执行文件为dex文件或odex文件。
根据本公开实施例的第二方面,提供一种应用安全性的检测装置,包括:
运行模块,用于运行待检测的应用;
第一计算模块,用于通过第一算法计算所述应用对应的可执行文件的第一标识,并在所述可执行文件中添加代码;
第二计算模块,用于再次启动并运行所述应用,并通过所述第一算法计算添加代码后的可执行文件的第二标识;
对比模块,用于对比所述第一标识与所述第二标识,若所述第一标识与所述第二标识不相等,则确定所述应用存在被劫持的风险。
优选的,所述应用安全性的检测装置还包括:
判断模块,用于获取所述应用的代码,并通过所述应用的代码判断所述应用是否使用动态加载技术,若是,再触发所述运行模块执行所述运行待检测的应用的操作。
优选的,所述应用安全性的检测装置还包括:
检查模块,用于在所述运行待检测的应用之后,并在所述通过第一算法计算所述应用对应的可执行文件的第一标识之前,检查所述应用对应的存储目录中是否存在所述可执行文件,若存在,再触发所述第一计算模块执行所述通过第一算法计算所述应用对应的可执行文件的第一标识的操作。
优选的,所述第一计算模块在所述可执行文件的前段、和/或中间部分、和/或末尾部分添加所述代码。
优选的,若运行所述应用的操作系统为Android操作系统,所述可执行文件为dex文件或odex文件。
本申请具有如下有益效果:
本申请公开一种应用安全性的检测方法及装置,该方法中,首先运行待检测的应用,应用在运行过程中,会加载并释放出可执行文件;然后通过第一算法计算所述可执行文件的第一标识,并在获取所述第一标识后,在所述可执行文件中添加代码;再次启动并运行所述应用,并通过所述第一算法计算添加代码后的可执行文件的第二标识;最后对比所述第一标识与所述第二标识,判断所述第一标识与所述第二标识是否相等,若所述第一标识与所述第二标识不相等,则确定所述应用存在被劫持的风险,若所述第一标识与所述第二标识相等,则说明应用对可执行文件进行了校验保护,从而能够确定所述应用不存在被劫持的风险。
通过本申请公开的应用安全性的检测方法,能够检测应用的安全性,确定应用是否存在被劫持的风险,从而解决现有技术无法检测应用的安全性的问题。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
图1为本发明公开的一种应用安全性的检测方法的工作流程示意图;
图2为本发明公开的又一种应用安全性的检测方法的工作流程示意图;
图3为本发明公开的又一种应用安全性的检测方法的工作流程示意图;
图4为本发明公开的一种应用安全性的检测装置的结构示意图;
图5为本发明公开的一种应用安全性的检测装置的结构示意图。
具体实施方式
本申请实施例提供一种应用安全性的检测方法及装置,以一定程度上解决传统技术无法检测应用是否存在被劫持的风险的问题。
为了使本领域的技术人员更好地理解本发明实施例中的技术方案,并使本发明实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明实施例中技术方案作进一步详细的说明。
本申请一示例性实施例中,公开一种应用安全性的检测方法。参见图1所示的工作流程示意图,所述应用安全性的检测方法包括以下步骤:
步骤S11、运行待检测的应用。
其中,应用在运行的过程中,会加载并释放出可执行文件。
步骤S12、通过第一算法计算所述应用对应的可执行文件的第一标识,并在所述可执行文件中添加代码。
应用往往配置有相应的插件,用于扩展应用的功能,其中,该插件通过调用可执行文件实现该功能,而应用在运行的过程中,会加载并释放出该可执行文件,该可执行文件可称为所述应用对应的可执行文件。
另外,在计算第一标识时所采用的第一算法,可为多种类型的算法,例如,可采用MD5(Message Digest Algorithm 5,消息摘要算法第五版)算法等,本申请对此不做限定。
步骤S13、再次启动并运行所述应用,并通过所述第一算法计算添加代码后的可执行文件的第二标识。
在所述可执行文件中添加代码后,需要退出所述待检测的应用,然后再重新启动并运行所述应用。另外,在所述可执行文件中添加代码,会改变所述可执行文件的业务逻辑,这种情况下,通过所述第一算法,计算添加代码后的可执行文件的第二标识。
步骤S14、对比所述第一标识与所述第二标识,若所述第一标识与所述第二标识不相等,则确定所述应用存在被劫持的风险。
另外,若所述第一标识与所述第二标识相等,则表明可执行文件在添加代码前和添加代码后的标识都是相等的,也就是说,应用对可执行文件进行了校验保护,从而能够确定所述应用不存在被劫持的风险,所述应用的安全性较高。
本申请的步骤S11至步骤S14公开一种应用安全性的检测方法,该方法中,首先运行待检测的应用,应用在运行过程中,会加载并释放出可执行文件;然后通过第一算法计算所述可执行文件的第一标识,并在获取所述第一标识后,在所述可执行文件中添加代码;再次启动并运行所述应用,并通过所述第一算法计算添加代码后的可执行文件的第二标识;最后对比所述第一标识与所述第二标识,若所述第一标识与所述第二标识不相等,则确定所述应用存在被劫持的风险,若所述第一标识与所述第二标识相等,则说明应用对可执行文件进行了校验保护,从而能够确定所述应用不存在被劫持的风险。
通过本申请公开的应用安全性的检测方法,能够检测应用的安全性,确定应用是否存在被劫持的风险,解决现有技术无法检测应用的安全性的问题。
进一步的,在本申请的第二实施例中,公开一种应用安全性检测方法,参见图2所示的工作流程示意图,该方法包括以下步骤:
步骤S21、获取所述应用的代码,并通过所述应用的代码判断所述应用是否使用动态加载技术,若是,执行步骤S22的操作,若否,执行步骤S26的操作。
其中,通常利用工具对所述应用进行解包,和/或采用反编译代码的方式,获取所述应用的代码。例如,可以采用aapt(Android Asset Packaging Tool,安卓打包工具)等解包工具对应用进行解包。
在通过所述代码判断所述应用是否使用动态加载技术时,通常对获取到的所述应用的代码进行扫描,检查所述应用的代码中是否包含动态加载相关的函数,以及该函数被调用的情况,若所述应用的代码中存在动态加载相关的函数,且该函数被调用,则说明所述应用使用了动态加载技术。
其中,所述动态加载相关的函数包括多种,例如,可以包含但不限于DexClassloader函数。
步骤S22、运行待检测的应用。
步骤S23、通过第一算法计算所述应用对应的可执行文件的第一标识,并在所述可执行文件中添加代码。
步骤S24、再次启动并运行所述应用,并通过所述第一算法计算添加代码后的可执行文件的第二标识。
步骤S25、对比所述第一标识与所述第二标识,若所述第一标识与所述第二标识不相等,则确定所述应用存在被劫持的风险。
在上述方法中,步骤S22至步骤S25的实施过程与步骤S11至步骤S14的实施过程相同,具体实施过程可相互参照,此处不再赘述。
步骤S26、结束本次应用安全性的检测。
在第二实施例中,增加如下步骤:获取所述应用的代码,并通过所述应用的代码判断所述应用是否使用动态加载技术,若是,再执行所述运行待检测的应用的操作。
若应用需要通过插件扩展自身功能,则该应用需要具备动态加载功能,因此,在运行所述应用之前,可通过应用的代码判断应用是否使用动态加载技术。若根据应用的代码,确定应用使用动态加载技术,则说明该应用能够调用插件,则继续执行对该应用进行安全性的检测。
若根据应用的代码,确定应用未使用动态加载技术,则说明该应用不能调用插件,这种情况下,不存在可执行文件被篡改的可能性,因此,不再根据本申请公开的方法对应用的安全性进行检测。
进一步的,在本申请的第三实施例中,公开一种应用安全性检测方法,参见图3所示的工作流程示意图,该方法包括以下步骤:
步骤S31、运行待检测的应用。
其中,步骤S31的实施过程与步骤S11的实施过程相同,具体实施过程可相互参照,此处不再赘述。
步骤S32、检查所述应用对应的存储目录中是否存在所述应用对应的可执行文件,若是,执行步骤S33的操作,若否,执行步骤S36的操作。
应用在运行过程中,会加载并释放出可执行文件,这种情况下,在所述应用对应的存储目录中,会存在对应的可执行文件。其中,所述应用对应的存储目录包括安装在终端内的SD(Secure Digital Memory Card,安全数码卡)的目录,或终端的应用私有目录等。
步骤S33、若经过检查,确定存在所述应用对应的可执行文件,通过第一算法计算所述应用对应的可执行文件的第一标识,并在所述可执行文件中添加代码。
步骤S34、再次启动并运行所述应用,并通过所述第一算法计算添加代码后的可执行文件的第二标识。
步骤S35、对比所述第一标识与所述第二标识,若所述第一标识与所述第二标识不相等,则确定所述应用存在被劫持的风险。
在上述方法中,步骤S33至步骤S35的实施过程与步骤S12至步骤S14的实施过程相同,具体实施过程可相互参照,此处不再赘述。
步骤S36、结束本次应用安全性的检测。
在第三实施例中,在所述运行待检测的应用之后,并在所述通过第一算法计算所述应用对应的可执行文件的第一标识之前,本申请公开的应用安全性的检测方法添加如下步骤:
检查所述应用对应的存储目录中是否存在所述可执行文件,若存在,再执行所述通过第一算法计算所述应用对应的可执行文件的第一标识的操作。
若经过检查,确定应用对应的存储目录中存在可执行文件,则表明应用在运行过程中,会调用所述可执行文件,从而需要再执行所述通过第一算法计算所述应用对应的可执行文件的第一标识的操作,以便实现对应用安全性的检测。
另外,若经过检查,确定应用对应的存储目录中不存在可执行文件,则说明该应用不会调用可执行文件,这种情况下,不存在可执行文件被篡改的可能性,因此,结束本次操作,不再进行对应用安全性的检测。
进一步的,在第三实施例中,还可以在步骤S31之前,获取所述应用的代码,并通过所述代码判断所述应用是否使用动态加载技术,若是,再执行步骤S31的操作,若否,执行步骤S36的操作。
另外,在步骤S12中,公开在所述可执行文件中添加代码的操作。其中,在所述可执行文件中添加代码,包括:在所述可执行文件的前段、和/或中间部分、和/或末尾部分添加所述代码。
在所述可执行文件中添加代码,能够改变可执行文件的业务逻辑,以便后续计算改变业务逻辑之后的可执行文件的第二标识,并通过比对所述第二标识和第一标识,检测应用是否存在被劫持的风险。在实际应用中,可在所述可执行文件的前段、中间部分或末尾部分任选一个位置,添加所述代码。另外,为了提高应用安全性检测的可靠性,可在可执行文件的多个位置添加代码,例如,可在所述可执行文件的前段、中间部分和末尾部分均添加代码。
本申请公开的应用安全性检测方法能够应用于多种操作系统,以检测多种操作系统中安装的应用的安全性。其中,若运行所述应用的操作系统为Android操作系统,所述可执行文件为dex文件或odex文件。
其中,dex文件为Android操作系统中的一种可执行文件。另外,odex文件为Android操作系统加载完dex文件后生成的缓存文件。在根据本申请公开的方法检测应用的安全性时,可采用dex文件作为可执行文件,或者,采用odex文件为可执行文件。
相应的,本申请的第二实施例公开一种应用安全性的检测装置。参见图4所示的结构示意图,本申请公开的应用安全性的检测装置包括:运行模块100、第一计算模块200、第二计算模块300和对比模块400。
其中,所述运行模块100,用于运行待检测的应用;其中,应用在运行的过程中,会加载并释放出可执行文件。
所述第一计算模块200,用于通过第一算法计算所述应用对应的可执行文件的第一标识,并在所述可执行文件中添加代码;
所述第二计算模块300,用于再次启动并运行所述应用,并通过所述第一算法计算添加代码后的可执行文件的第二标识;
所述对比模块400,用于对比所述第一标识与所述第二标识,若所述第一标识与所述第二标识不相等,则确定所述应用存在被劫持的风险。
另外,若所述第一标识与所述第二标识相等,则表明可执行文件在添加代码前和添加代码后的标识都是相等的,也就是说,应用对可执行文件进行了校验保护,从而能够确定所述应用不存在被劫持的风险,所述应用的安全性较高。
其中,在计算第一标识和第二标识时采用的第一算法,可为多种类型的算法,例如,可采用MD5(Message Digest Algorithm 5,消息摘要算法第五版)算法等,本申请对此不做限定。
本申请的第二实施例公开一种应用安全性的检测装置,该装置中,由运行模块运行待检测的应用,其中,应用在运行过程中,会加载并释放出可执行文件;然后第一计算模块通过第一算法计算所述应用对应的可执行文件的第一标识,并在所述可执行文件中添加代码,再由第二计算模块再次启动并运行所述应用,并通过所述第一算法计算添加代码后的可执行文件的第二标识,对比模块对比所述第一标识与所述第二标识,若所述第一标识与所述第二标识不相等,则确定所述应用存在被劫持的风险,若所述第一标识与所述第二标识相等,则说明应用对可执行文件进行了校验保护,从而能够确定所述应用不存在被劫持的风险。
通过本申请公开的应用安全性的检测装置,能够检测应用的安全性,确定应用是否存在被劫持的风险,解决现有技术无法检测应用的安全性的问题。
进一步的,参见图5所示的结构示意图,本申请公开的所述应用安全性的检测装置还包括:
判断模块500,用于获取所述应用的代码,并通过所述应用的代码判断所述应用是否使用动态加载技术,若是,再触发所述运行模块100执行所述运行待检测的应用的操作。
其中,通常利用工具对所述应用进行解包,和/或采用反编译代码的方式,获取所述应用的代码。例如,可以采用aapt(Android Asset Packaging Tool,安卓打包工具)等解包工具对应用进行解包。
在通过所述代码判断所述应用是否使用动态加载技术时,通常对获取到的所述应用的代码进行扫描,检查所述应用的代码中是否包含动态加载相关的函数,以及该函数被调用的情况,若所述应用的代码中存在动态加载相关的函数,且该函数被调用,则说明所述应用使用了动态加载技术。
若根据应用的代码,确定应用使用动态加载技术,则说明该应用能够调用插件,则继续对应用的安全性进行检测。若根据应用的代码,确定应用未使用动态加载技术,则说明该应用不能调用插件,这种情况下,不存在可执行文件被篡改的可能性,因此,不再根据本申请公开的方法对应用的安全性进行检测。
进一步的,本申请公开的所述应用安全性的检测装置还包括:
检查模块600,用于在所述运行待检测的应用之后,并在所述通过第一算法计算所述应用对应的可执行文件的第一标识之前,检查所述应用对应的存储目录中是否存在所述可执行文件,若存在,再触发所述第一计算模块200执行所述通过第一算法计算所述应用对应的可执行文件的第一标识的操作。
进一步的,所述第一计算模块200在所述可执行文件的前段、和/或中间部分、和/或末尾部分添加所述代码。
进一步的,若运行所述应用的操作系统为Android操作系统,所述可执行文件为dex文件或odex文件。
本申请公开的应用安全性检测方法能够应用于多种操作系统,以检测多种操作系统中安装的应用的安全性。其中,若运行所述应用的操作系统为Android操作系统,所述可执行文件为dex文件或odex文件。
其中,dex文件为Android操作系统中的一种可执行文件。另外,odex文件为Android操作系统加载完dex文件后生成的缓存文件。在根据本申请公开的方法检测应用的安全性时,可采用dex文件作为可执行文件,或者,采用odex文件为可执行文件。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
本领域的技术人员可以清楚地了解到本发明实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明实施例中的技术方案可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如只读存储器(英文:read-only memory,缩写:ROM)、随机存取存储器(英文:random access memory,缩写:RAM)、磁碟、光盘等,包括若干指令用以使得处理器执行本发明实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其它实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。