一种确定应用程序是否被重打包的方法及设备技术

技术编号:24708411 阅读:33 留言:0更新日期:2020-07-01 00:01
本发明专利技术实施例提供一种确定应用程序是否被重打包的方法及设备,该方法包括:客户端的一个应用程序启动后,加载安全动态库,并通过执行安全动态库的校验函数读取APK签名块中预设位置的数据信息;其中,预设位置为ID‑value结构体中非签名校验子块;判断数据信息是否与预设魔数一致,若一致,则应用程序未被重打包,应用程序继续执行;若不一致或为空,则应用程序被重打包,关闭应用程序。本发明专利技术实施例提供的确定应用程序是否被重打包的方法及设备,可以抵御攻击者通过Hook工具修改获取签名信息结果绕过防重打包,并可发现攻击者通过任一apk文件的修改而进行的重打包,从而提高了重打包防御的安全性。

【技术实现步骤摘要】
一种确定应用程序是否被重打包的方法及设备
本专利技术涉及信息安全
,具体涉及一种确定应用程序是否被重打包的方法及设备。
技术介绍
随着移动互联网的迅猛发展和智能移动设备的快速普及,移动应用程序如雨后春笋层出不穷,由此引发的移动安全问题也日益凸显,形成了庞大的移动端攻击产业链,其中以插入恶意代码、插入非法广告、窃取用户隐私、吸资扣费耗费流量等恶意行为为目的的重打包问题便是产业链中的重要一环。重打包是攻击者为了实现注入代码、修改应用逻辑、插入广告等恶意行为,对APP进行篡改的一种手段,重打包的步骤一般为:解包(反编译)-->插入/篡改代码-->生成新包-->重签名-->运行。现有的防重打包方法主要有以下两种:第一种是在应用安装包apk文件中添加检测代码,获取当前用户运行应用程序的签名信息并校验该信息是否为合法签名信息。由于应用程序在打包过程中会使用签名证书的私钥对应用摘要信息进行加密,放入签名文件中,因此若该应用程序为重打包程序,则可检测出签名信息不合法。第二种是在应用程序的dex文件末尾添加数字水印信息,然后加载安全动态库,在安全动态库中执行数字水印信息的校验逻辑,若在dex文件末尾读取到的数字水印信息与添加的不一致,则说明当前应用为重打包。Hook,又名钩子,在应用程序运行过程中,当运行至目标代码时,将其原本要执行的指令替换为攻击者的指令。针对第一种方法,因为对攻击者来说签名信息是公开的,攻击者可以通过Hook工具修改校验函数,将其获取到的签名信息改为合法签名信息,或直接注释掉调用校验函数的代码,若是so文件在加载时直接执行校验函数,则直接删除依赖的so文件,即可绕过校验。针对第二种方法,攻击者同样可以通过Hook校验方法,返回合法结果,或者注释掉调用安全动态库的Java代码,即可绕过校验。同时,在dex文件末尾添加水印信息,仅可实现dex文件的防篡改,无法保护资源文件和配置文件,而很多攻击手段可以通过修改或替换资源文件和配置文件来实现。
技术实现思路
为解决或至少部分解决现有技术中的问题,本专利技术实施例提供一种确定应用程序是否被重打包的方法及设备。第一方面,本专利技术实施例提供一种确定应用程序是否被重打包的方法,所述方法应用于客户端,包括:所述客户端的一个应用程序启动后,加载安全动态库,并通过执行所述安全动态库的校验函数读取APK签名块中预设位置的数据信息;其中,所述预设位置为ID-value结构体所在区块中的非签名校验子块;判断所述数据信息是否与预设魔数一致,若一致,则所述应用程序未被重打包,继续执行所述应用程序;若不一致或为空,则所述应用程序被重打包,关闭所述应用程序。进一步地,在Android系统中,所述非签名校验子块的ID值不为0x7109871a;其中,Android系统对apk文件的签名校验过程中仅校验所述区块中ID值为0x7109871a对应的value值,对所述区块中的其他ID-value值不进行任何处理。进一步地,在所述加载安全动态库之后,所述方法还包括:判断所述校验函数是否被hook;若是,则关闭所述应用程序,若否,则再执行所述通过执行所述安全动态库的校验函数读取APK签名块中预设位置的数据信息。进一步地,所述判断所述校验函数是否被hook,包括:通过反射检测Hook工具的作用方法列表中是否包含所述校验函数的校验函数名,若结果为包含,则确认所述校验函数被hook。进一步地,在所述通过反射检测Hook工具的作用方法列表中是否包含所述校验函数的校验函数名之后,若结果为未包含,则进一步通过校验所述校验函数的第一句指令是否被替换为跳转指令,来判断所述校验函数是否被hook;若所述第一句指令被替换为跳转指令,则确认所述校验函数被hook,否则,确认所述校验函数未被hook。进一步地,在所述加载安全动态库之后,所述方法还包括:调用所述安全动态库的加签函数生成签名字段,向服务端发起请求,并在所述请求中携带所述签名字段,以供所述服务端对所述签名字段进行校验,若所述签名字段为空或不正确,则获知所述安全动态库被删除或被替换,从而执行预设动作并返回预设信息;接收所述预设信息,关闭所述应用程序。进一步地,所述预设动作包括阻断所述应用程序的通信进程,所述预设信息包括预设错误消息。第二方面,本专利技术实施例提供一种确定应用程序是否被重打包的设备,该设备包括客户端,所述客户端包括初始化模块和魔数校验模块,其中:所述初始化模块用于启动应用程序并加载安全动态库;所述魔数校验模块用于:通过执行所述安全动态库的校验函数读取APK签名块中预设位置的数据信息;其中,所述预设位置为ID-value结构体所在区块中的非签名校验子块;判断所述数据信息是否与预设魔数一致,若一致,则所述应用程序未被重打包,继续执行所述应用程序;若不一致或为空,则所述应用程序被重打包,关闭所述应用程序。第三方面,本专利技术实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如第一方面或所提供的方法的步骤。第四方面,本专利技术实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面所提供的方法的步骤。本专利技术实施例提供的确定应用程序是否被重打包的方法及设备,通过比较APK签名块的ID-value结构体中非签名校验子块的数据信息是否与预设魔数相一致或是否为空来判断应用程序是否被重打包,可以抵御攻击者通过Hook工具修改获取签名信息结果绕过防重打包,并可发现攻击者通过任一apk文件的修改而进行的重打包,从而提高了重打包防御的安全性。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本专利技术一实施例提供的确定应用程序是否被重打包的方法流程图;图2是本专利技术另一实施例提供的确定应用程序是否被重打包的方法流程图;图3是本专利技术一实施例提供的确定应用程序是否被重打包的设备的结构示意图;图4是本专利技术另一实施例提供的确定应用程序是否被重打包的设备的结构示意图;图5是本专利技术一实施例提供的电子设备的实体结构示意图。具体实施方式为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。图1是本专利技术一实施例提供的确定应用程序是否被重打包的方法流程图。所述方法应用于客户端,如图1所示,所述方法包括:步骤101、所述客户端的一个应用程序启动本文档来自技高网
...

【技术保护点】
1.一种确定应用程序是否被重打包的方法,其特征在于,所述方法应用于客户端,包括:/n所述客户端的一个应用程序启动后,加载安全动态库,并通过执行所述安全动态库的校验函数读取APK签名块中预设位置的数据信息;其中,所述预设位置为ID-value结构体所在区块中的非签名校验子块;/n判断所述数据信息是否与预设魔数一致,若一致,则所述应用程序未被重打包,继续执行所述应用程序;若不一致或为空,则所述应用程序被重打包,关闭所述应用程序。/n

【技术特征摘要】
1.一种确定应用程序是否被重打包的方法,其特征在于,所述方法应用于客户端,包括:
所述客户端的一个应用程序启动后,加载安全动态库,并通过执行所述安全动态库的校验函数读取APK签名块中预设位置的数据信息;其中,所述预设位置为ID-value结构体所在区块中的非签名校验子块;
判断所述数据信息是否与预设魔数一致,若一致,则所述应用程序未被重打包,继续执行所述应用程序;若不一致或为空,则所述应用程序被重打包,关闭所述应用程序。


2.根据权利要求1所述的确定应用程序是否被重打包的方法,其特征在于,在Android系统中,所述非签名校验子块的ID值不为0x7109871a;其中,Android系统对apk文件的签名校验过程中仅校验所述区块中ID值为0x7109871a对应的value值,对所述区块中的其他ID-value值不进行任何处理。


3.根据权利要求1所述的确定应用程序是否被重打包的方法,其特征在于,在所述加载安全动态库之后,所述方法还包括:判断所述校验函数是否被hook;若是,则关闭所述应用程序,若否,则再执行所述通过执行所述安全动态库的校验函数读取APK签名块中预设位置的数据信息。


4.根据权利要求3所述的确定应用程序是否被重打包的方法,其特征在于,所述判断所述校验函数是否被hook,包括:通过反射检测Hook工具的作用方法列表中是否包含所述校验函数的校验函数名,若结果为包含,则确认所述校验函数被hook。


5.根据权利要求4所述的确定应用程序是否被重打包的方法,其特征在于,在所述通过反射检测Hook工具的作用方法列表中是否包含所述校验函数的校验函数名之后,若结果为未包含,则进一步通过校验所述校验函数的第一句指令是否被替换为跳转指令,来判断所述校验函数是否被hook;若所...

【专利技术属性】
技术研发人员:宋言言
申请(专利权)人:贝壳技术有限公司
类型:发明
国别省市:天津;12

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1