著录项信息
专利名称 | 一种安装包的校验方法、客户端、服务器及系统 |
申请号 | CN201410379582.9 | 申请日期 | 2014-08-04 |
法律状态 | 暂无 | 申报国家 | 中国 |
公开/公告日 | 2016-02-10 | 公开/公告号 | CN105320535A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F21/12 | IPC分类号 | G;0;6;F;2;1;/;1;2;;;G;0;6;F;2;1;/;6;4查看分类表>
|
申请人 | 优视科技有限公司 | 申请人地址 | 浙江省杭州市滨江区长河街道网商路699号4号楼5楼508室
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 阿里巴巴(中国)有限公司 | 当前权利人 | 阿里巴巴(中国)有限公司 |
发明人 | 陈桌升;杨允乐;王传举 |
代理机构 | 北京展翼知识产权代理事务所(特殊普通合伙) | 代理人 | 屠长存 |
摘要
本发明提供一种安装包的校验方法、客户端、服务器及系统,其中方法包括:在C语言环境下获取第一APK的签名值;以及利用所述第一APK的签名值对用来请求网络数据的请求参数进行第一加密处理,得到加密字节流;将所述加密字节流发送至服务器,以供服务器利用预先配置的第二APK的签名值,解密所述加密字节流;其中,所述第二APK是原始APK;接收当服务器未解密出所述请求参数时返回的用于标识所述第一APK为被篡改的APK的信息。利用该方法,可以防止安装包的校验逻辑被反编译,提高安装包检验的可靠性。
一种安装包的校验方法、客户端、服务器及系统\n技术领域\n[0001] 本发明涉及移动通信的数据处理领域,更为具体地,涉及一种安装包的校验方法、客户端、服务器及系统。\n背景技术\n[0002] 随着Android平台的流行,很多优秀的Android安装包被不法分子篡改:或植入恶意病毒;或添加广告,然后通过二次打包再次进入渠道。\n[0003] 针对安装包防篡改,目前市场主要使用防篡改校验方案,校验过程用Java语言实现,其中,校验流程:在NDK(Native Development Kit,原生开发工具包)层中用Java语言获取APK签名值,检验APK(Android Package,安卓安装包)签名值与预先配置的APK签名值是否匹配;如匹配,则说明APK是正版未被篡改的;如不匹配,则说明APK被篡改。\n[0004] 然而由于Java是解释型语言,进行校验时以中间代码的形式运行在虚拟机环境中,这使得校验逻辑容易被反编译,将校验逻辑在‘*.smali’中被还原或删除掉,这样就达不到安装包校验的目的,降低了安装包检验的可靠性。\n发明内容\n[0005] 本发明的目的在于提出一种安装包的校验方法、装置及系统,可以防止安装包的校验逻辑被反编译,提高安装包检验的可靠性。\n[0006] 根据本发明的一个方面,提供了一种安装包的校验方法,其中,包括步骤:\n[0007] 在C语言环境下获取第一APK的签名值;以及利用所述第一APK的签名值对用来请求网络数据的请求参数进行第一加密处理,得到加密字节流;将所述加密字节流发送至服务器,以供服务器利用预先配置的第二APK的签名值,解密所述加密字节流;其中,所述第二APK是原始APK;接收当服务器未解密出所述请求参数时返回的用于标识所述第一APK为被篡改的APK的信息。\n[0008] 根据本发明的另一个方面,提供了一种安装包的校验方法,其中,包括步骤:\n[0009] 接收客户端发送的加密字节流;其中,所述加密字节流是利用客户端在C语言环境下获取的第一APK的签名值对用于请求网络数据的请求参数进行加密处理得到的;利用预先配置的第二APK的签名值,解密所述加密字节流;其中,所述第二APK是原始APK;若未解密出所述请求参数,则向客户端返回用于标识所述第一APK为被篡改的APK的信息。\n[0010] 根据本发明的另一个方面,提供了一种安装包的校验方法,其中,包括步骤:\n[0011] 客户端在C语言环境下获取第一APK的签名值;客户端利用所述第一APK的签名值对用于请求网络数据的请求参数进行第一加密处理,得到加密字节流;客户端将所述加密字节流发送至服务器;所述服务器利用预先配置的第二APK的签名值,解密所述加密字节流;其中,所述第二APK是原始APK;若未解密出所述请求参数,则向客户端返回用于标识所述第一APK为被篡改的APK的信息。\n[0012] 根据本发明的另一个方面,提供了一种客户端,其中,包括:\n[0013] 第一获取单元,用于在C语言环境下获取第一APK的签名值;\n[0014] 加密单元,用于利用所述第一APK的签名值对用来请求网络数据的请求参数进行第一加密处理,得到加密字节流;\n[0015] 第一发送单元,用于将所述加密字节流发送至服务器,以供服务器利用预先配置的第二APK的签名值,解密所述加密字节流;其中,所述第二APK是原始APK;\n[0016] 第一接收单元,用于接收当服务器未解密出所述请求参数时返回的用于标识所述第一APK为被篡改的APK的信息。\n[0017] 根据本发明的另一个方面,提供了一种服务器,其中,包括:\n[0018] 第二接收单元,用于接收客户端发送的加密字节流;其中,所述加密字节流是利用客户端在C语言环境下获取的第一APK的签名值对用于请求网络数据的请求参数进行加密处理得到的;\n[0019] 解密单元,用于利用预先配置的第二APK的签名值,解密所述加密字节流;其中,所述第二APK是原始APK;\n[0020] 第二发送单元,用于若未解密出所述请求参数,则向客户端返回用于标识所述第一APK为被篡改的APK的信息。\n[0021] 根据本发明的另一个方面,提供了一种安装包的校验系统,其中,包括:上述客户端和上述服务器。\n[0022] 利用本发明,客户端在C语言环境中获取APK的签名值以及利用该签名值加密APK的网络数据请求并将加密后的字节流发送至服务器校验,由于上述过程逻辑在C语言中进行编译后产生‘*.so文件’,通过反编译工具将很难破解‘*.so文件’里的逻辑,在破解技术难度上比使用Java语言实现的方案大大增加;在服务器侧,利用预先配置的原始APK的签名值去解密上述加密的字节流,若能成功解密出上述网络数据请求,则说明上述客户端上安装的是原始的APK,若不能解密出上述网络数据请求,则说明上述客户端上安装的是被篡改的APK,从而可以禁止安装有被篡改的APK的客户端的相关功能。因此,通过上述处理,可以防止APK的校验逻辑被反编译,提高安装包检验的可靠性。\n[0023] 为了实现上述目的,本发明的一个或多个方面包括后面将详细说明并在权利要求中特别指出的特征。下面的说明以及附图详细说明了本发明的某些示例性方面。然而,这些方面指示的仅仅是可使用本发明的原理的各种方式中的一些方式。此外,本发明旨在包括所有这些方面以及它们的等同物。\n附图说明\n[0024] 根据下述参照附图进行的详细描述,本发明的上述和其他目的、特征和优点将变得更加显而易见。在附图中:\n[0025] 图1示出了本发明提出的一种安装包的校验方法的一个流程图;\n[0026] 图2示出了本发明提出的一种安装包的校验方法的另一个流程图;\n[0027] 图3示出了本发明提出的一种安装包的校验方法的另一个流程图;\n[0028] 图4示出了本发明提出的一种安装包的校验方法的另一个流程图;\n[0029] 图5示出了本发明提出的一种客户端的一个结构示意图;\n[0030] 图6示出了本发明提出的一种客户端的另一个结构示意图;\n[0031] 图7示出了本发明提出的一种客户端的另一个结构示意图;\n[0032] 图8示出了本发明提出的一种服务器的结构示意图;\n[0033] 图9示出了本发明提出的一种安装包的校验系统的结构示意图。\n[0034] 在所有附图中相同的标号指示相似或相应的特征或功能。\n具体实施方式\n[0035] 下面描述本公开的各个方面。应该明白的是,本文的教导可以以多种多样形式具体体现,并且在本文中公开的任何具体结构、功能或两者仅仅是代表性的。基于本文的教导,本领域技术人员应该明白的是,本文所公开的一个方面可以独立于任何其它方面实现,并且这些方面中的两个或多个方面可以按照各种方式组合。例如,可以使用本文所阐述的任何数目的方面,实现装置或实践方法。另外,可以使用其它结构、功能、或除了本文所阐述的一个或多个方面之外或不是本文所阐述的一个或多个方面的结构和功能,实现这种装置或实践这种方法。此外,本文所描述的任何方面可以包括权利要求的至少一个元素。\n[0036] 下面将参照附图描述本发明的各个实施例。\n[0037] 本发明提出一种安装包的校验方法,其流程可参考图1;具体的,包括步骤:\n[0038] 步骤S101:在C语言环境下获取第一APK的签名值;\n[0039] 其中,第一APK指的是用户下载到客户端的APK;具体的,获取第一APK的签名值时,可以通过getPost函数调用getSign函数获得第一APK的签名值sign;\n[0040] 步骤S102:利用第一APK的签名值对用来请求网络数据的请求参数进行第一加密处理,得到加密字节流;\n[0041] 具体的,可以通过getPost函数调用encodeData函数利用第一APK的签名值作为加密密钥对网络请求参数进行第一加密处理,得到加密字节流。其中,第一加密处理采用的加密算法为可逆对称算法,如:DES算法、RC5算法,也可以采用M9加密算法。\n[0042] 然后进行步骤S103:将加密字节流发送至服务器,以供服务器利用预先配置的第二APK的签名值解密该加密字节流;\n[0043] 其中,第二APK是原始APK;在C语言环境下进行步骤S101及步骤S102,及将加密字节流发送给服务器,由于上述过程逻辑在C语言中进行编译后产生‘*.so文件’,通过反编译工具将很难破解‘*.so文件’里的逻辑,在破解技术难度上比使用Java语言实现的方案大大增加;\n[0044] 步骤S104:接收当服务器未解密出请求参数时返回的用于标识第一APK为被篡改的APK的信息。其中,当服务器解密出请求参数时返回的用于标识第一APK为原始APK的信息。\n[0045] 以上提到的函数getPost、getSign、encodeData,实现过程都位于Android NDK层,用C语言实现,属于系统原生代码,编译后会产生‘*.so文件’,用反编译工具无法反编译出此类文件。\n[0046] 利用本发明,客户端在C语言环境中获取APK的签名值以及利用该签名值加密APK的网络数据请求并将加密后的字节流发送至服务器校验,由于上述过程逻辑在C语言中进行编译后产生‘*.so文件’,通过反编译工具将很难破解‘*.so文件’里的逻辑,在破解技术难度上比使用Java语言实现的方案大大增加;在服务器侧,利用预先配置的原始APK的签名值去解密上述加密的字节流,若能成功解密出上述网络数据请求,则说明上述客户端上安装的原始的APK,若不能解密出上述网络数据请求,则说明上述客户端上安装的是被篡改的APK,从而可以禁止安装有被篡改的APK的客户端的相关功能;因此可以防止APK的校验逻辑被反编译,提高安装包检验的可靠性。\n[0047] 为了进一步防止APK的校验逻辑被反编译,提高安装包检测的可靠性,针对上述实施例,在步骤S102中,利用第一APK的签名值对用来请求网络数据的请求参数进行第一加密处理时,具体可以按以下步骤进行:1)按预定算法对该第一APK的签名值进行第二加密处理,得到加密后的第一APK的签名值;具体的,进行第二加密处理时,可通过getPost函数调用getKey函数根据预定算法来对APK的签名值进行加密处理;其中,预定算法可以是md5加密算法也可以是可产生固定长度字符串的算法;2)利用该加密后的第一APK的签名值对用来请求网络数据的请求参数进行第一加密处理。\n[0048] 对应的,经步骤S103将加密字节流发送给服务器后,服务器利用预先配置的按该预定算法加密后的第二APK的签名值解密该加密字节流。即是说,预先约定好在客户端加密和在服务器中解密的方式,这种方式只有客户端和服务器知道,同时由于是在C语言的环境下进行,因此这种方式不会被反编译而被获取,可以充分保证安全性。\n[0049] 在本发明的一个方面,可以先在客户端进行APK的初始检测,只有通过初始检测的,才进行上述实施例中步骤S102之后的安装包检测流程;初始检测的其中一个可选方法是检测APK签名值;具体的,初始检测在步骤S101之后进行,包括步骤:\n[0050] 客户端将第一APK的签名值与在客户端预先配置的第二APK的签名值进行比较,若相等,则客户端进行该S102步骤及之后的检测流程;若不相等,则返回用于标识该第一APK为被篡改的APK的信息。\n[0051] 初始检测的另一个可选方法是获取dex(Android平台上可执行文件的类型)文件的CRC(Cyclical Redundancy Check,循环冗余码校验)值,将获取的CRC值与预配置的CRC值比较;具体的,初始检测在步骤S101之后进行,包括步骤:\n[0052] 客户端获取第一APK的dex文件的CRC值;\n[0053] 客户端将该dex文件的CRC值与预配置的CRC值比较,其中,预配置的CRC值为原始APK的dex文件的CRC值;\n[0054] 当dex文件的CRC值与预配置的CRC值相等时,客户端进行上述S102步骤及之后的检测流程。若dex文件的CRC值与预配置的CRC值不相等,则返回用于标识该第一APK为被篡改的APK的信息。\n[0055] 初始检测的另一个可选方法是在检测APK签名值之后再检测dex文件的CRC值;具体的,初始检测在步骤S101之后进行,包括步骤:\n[0056] 客户端将第一APK的签名值与在客户端预先配置的第二APK的签名值进行比较,若相等,则客户端获取dex文件的CRC值;若不相等,则返回用于标识该第一APK为被篡改的APK的信息;\n[0057] 当该dex文件的CRC值与预配置的CRC值相等时,客户端进行该S102步骤及之后的检测流程;若不相等,则返回用于标识第一APK为被篡改的APK的信息。\n[0058] 只要APK被反编译,dex文件就会产生变化,CRC值也会改变。因此根据dex文件的CRC值,可以初步判断第一APK是否被篡改。\n[0059] 一个优选的实施例流程如图2所示,该方法基于客户端侧。在进行具体流程前,可先进行代码混淆:将第一APK的类名、包名混淆为Window系统和Linux系统两个系统命名系统严令禁止使用的文件名,如com1、Com1等,其中,混淆指的是对第一APK的类名、包名进行重新组织和处理,得到Window系统和Linux系统两个系统命名系统严令禁止使用的文件名;\n然后进行以下处理流程:\n[0060] 步骤S201:客户端在C语言环境下获取第一APK的签名值;\n[0061] 步骤S202:客户端判断第一APK的签名值与预先配置的第二APK的签名值是否相等;其中,第二APK为原始APK;若判断结果为否,则进行步骤S203;若判断结果为是,则进行步骤S204;\n[0062] 步骤S203:客户端返回用于标识第一APK为被篡改的APK的信息;\n[0063] 步骤S204:客户端获取第一APK的dex文件的CRC值;\n[0064] 步骤S205:客户端判断dex文件的CRC值与预配置的CRC值是否相等;其中,预配置的CRC值是用于参考的CRC值,即原始APK的dex文件的CRC值;当判断dex文件的CRC值与预配置的CRC值不相等时,进行步骤S203;当判断dex文件的CRC值与预配置的CRC值相等时,进行步骤S206;\n[0065] 步骤S206:客户端利用第一APK的签名值对用来请求网络数据的请求参数进行第一加密处理,得到加密字节流;具体的,客户端还可以按预定算法先对第一APK的签名值进行加密处理;然后再根据加密后的第一APK的签名值用来请求网络数据的请求参数进行第一加密处理。\n[0066] 步骤S207:客户端将加密字节流发送至服务器,以供服务器利用预先配置的第二APK的签名值解密该加密字节流;具体的,当步骤S206中,根据加密后的第一APK的签名值用来请求网络数据的请求参数进行第一加密处理时,服务器利用预先配置的按预定算法加密后的第二APK的签名值,解密该加密字节流。\n[0067] 步骤S208:客户端接收当服务器解密出请求参数时,由服务器返回的用于标识第一APK为原始APK的信息;以及当服务器未解密出请求参数时,由服务器返回的用于标识第一APK为被篡改的APK的信息。\n[0068] 本发明还提出了另一种安装包的校验方法,该方法基于服务器侧,其流程可参考图3所示,包括步骤:\n[0069] 步骤S301:服务器接收客户端发送的加密字节流;其中,该加密字节流是利用客户端在C语言环境下获取的第一APK的签名值对用于请求网络数据的请求参数进行加密处理得到的;\n[0070] 步骤S302:服务器利用预先配置的第二APK的签名值解密加密字节流;其中,该第二APK是原始APK;\n[0071] 步骤S303:服务器若解密出请求参数,则向客户端返回用于标识第一APK为原始APK的信息;若服务器未解密出请求参数,则向客户端返回用于标识第一APK为被篡改的APK的信息。\n[0072] 本发明还提出了另一种安装包的校验方法,其流程可参考图4所示,该方法基于客户端与服务器的交互,具体步骤包括:\n[0073] 步骤S401:客户端在C语言环境下获取第一APK的签名值;\n[0074] 步骤S402:客户端利用第一APK的签名值对用于请求网络数据的请求参数进行第一加密处理,得到加密字节流;\n[0075] 步骤S403:客户端发送上述加密字节流给服务器;\n[0076] 步骤S404:服务器利用预先配置的第二APK的签名值解密加密字节流;其中,该第二APK是原始APK;然后根据解密结果进行步骤S405或者步骤S406。\n[0077] 步骤S405:服务器若解密出该请求参数,则向客户端返回用于标识该第一APK为该原始APK的信息;\n[0078] 步骤S406:服务器若未解密出该请求参数,则向客户端返回用于标识该第一APK为被篡改的APK的信息。\n[0079] 本发明的另一方面,还提出了一种客户端801,其结构示意图可参考图5,客户端\n801包括:\n[0080] 第一获取单元601,用于在C语言环境下获取第一APK的签名值;\n[0081] 加密单元602,用于利用该第一APK的签名值对用来请求网络数据的请求参数进行第一加密处理,得到加密字节流;\n[0082] 第一发送单元603,用于将该加密字节流发送至服务器,以供服务器利用预先配置的第二APK的签名值,解密该加密字节流;其中,该第二APK是原始APK;\n[0083] 第一接收单元604,用于接收当服务器未解密出该请求参数时返回的用于标识该第一APK为被篡改的APK的信息。以及,接收当服务器解密出该请求参数时返回的用于标识该第一APK为该原始APK的信息。\n[0084] 上述客户端的另一方面,还可以被配置为根据APK签名值对APK进行初始检测,具体的,参见图6;客户端还包括:\n[0085] 第一比较单元605,用于将第一APK的签名值与预先配置的第二APK的签名值进行比较;\n[0086] 第一通知单元606,用于当该第一比较单元的比较结果为相等时,通知该加密单元对用于请求网络数据的请求参数进行第一加密处理;当该第一比较单元的比较结果为不相等时,返回用于标识该第一APK为被篡改的APK的信息;其中,该第二APK为原始APK。\n[0087] 上述客户端的另一方面,还可以被配置为根据CRC值对APK进行初始检测。具体的,参见图7,客户端还包括:\n[0088] 第二获取单元607,用于获取第一APK的dex文件的CRC值;\n[0089] 第二比较单元608,用于将该dex文件的CRC值与预配置的CRC值进行比较;\n[0090] 第二通知单元609,用于当第二比较单元的比较结果为相等时,通知该加密单元对用于请求网络数据的请求参数进行第一加密处理;当第二比较单元的比较结果为不相等时,返回用于标识该第一APK为被篡改的APK的信息;其中,预配置的CRC值为原始APK的dex文件的CRC值。\n[0091] 本发明的另一方面,还提出了一种服务器802,其结构示意图可参考图8,服务器\n802包括:\n[0092] 第二接收单元701,用于接收客户端发送的加密字节流;其中,该加密字节流是利用客户端在C语言环境下获取的第一APK的签名值对用于请求网络数据的请求参数进行加密处理得到的;\n[0093] 解密单元702,用于利用预先配置的第二APK的签名值解密该加密字节流;其中,该第二APK是原始APK;\n[0094] 第二发送单元703,用于若解密出该请求参数,则向客户端返回用于标识该第一APK为该原始APK的信息;若未解密出该请求参数,则向客户端返回用于标识该第一APK为被篡改的APK的信息。\n[0095] 本发明的另一方面,还提出了一种安装包的校验系统,其结构示意图可参考图9,该系统包括:图5所示的客户端801以及图8所示的服务器802。也可以是图6或图7的客户端以及图8的服务器。\n[0096] 利用本发明,客户端在C语言环境中获取APK的签名值以及利用该签名值加密APK的网络数据请求并将加密后的字节流发送至服务器校验,由于上述过程逻辑在C语言中进行编译后产生*.so文件,打包党通过反编译工具将很难破解*.so里的逻辑,在破解技术难度上比使用Java语言实现的方案大大增加;在服务器侧,利用预先配置的原始APK的签名值去解密上述加密的字节流,若能成功解密出上述网络数据请求,则说明上述客户端上安装的原始的APK,若不能解密出上述网络数据请求,则说明上述客户端上安装的是被篡改的APK,从而可以禁止安装有被篡改的APK的客户端的相关功能;因此可以防止APK的校验逻辑被反编译,提高安装包检验的可靠性。\n[0097] 此外,典型地,本发明所述的移动终端可为各种具有蓝牙功能的手持终端设备,例如具有蓝牙功能的手机、个人数字助理(PDA)。\n[0098] 此外,根据本发明的方法还可以被实现为由移动终端中的处理器(比如CPU)执行的计算机程序,并且存储在移动终端的存储器中。在该计算机程序被处理器执行时,执行本发明的方法中限定的上述功能。\n[0099] 此外,根据本发明的方法还可以实现为一种计算机程序产品,该计算机程序产品包括计算机可读介质,在该计算机可读介质上存储有用于执行本发明的方法中限定的上述功能的计算机程序。\n[0100] 此外,上述方法步骤以及系统单元也可以利用控制器以及用于存储使得控制器实现上述步骤或单元功能的计算机程序的计算机可读存储设备实现。\n[0101] 本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。为了清楚地说明硬件和软件的这种可互换性,已经就各种示意性组件、方块、模块、电路和步骤的功能对其进行了一般性的描述。这种功能是被实现为软件还是被实现为硬件取决于具体应用以及施加给整个系统的设计约束。本领域技术人员可以针对每种具体应用以各种方式来实现所述的功能,但是这种实现决定不应被解释为导致脱离本发明的范围。\n[0102] 尽管前面公开的内容示出了本发明的示例性实施例,但是应当注意,在不背离权利要求限定的本发明的范围的前提下,可以进行多种改变和修改。根据这里描述的发明实施例的方法权利要求的功能、步骤和/或动作不需以任何特定顺序执行。此外,尽管本发明的元素可以以个体形式描述或要求,但是也可以设想多个,除非明确限制为单数。\n[0103] 虽然如上参照图描述了根据本发明的各个实施例进行了描述,但是本领域技术人员应当理解,对上述本发明所提出的各个实施例,还可以在不脱离本发明内容的基础上做出各种改进。因此,本发明的保护范围应当由所附的权利要求书的内容确定。
法律信息
- 2020-08-28
专利权的转移
登记生效日: 2020.08.11
专利权人由广州爱九游信息技术有限公司变更为阿里巴巴(中国)有限公司
地址由510627 广东省广州市天河区黄埔大道西平云路163号广电平云广场B塔13楼自编02单元变更为310052 浙江省杭州市滨江区长河街道网商路699号4号楼5楼508室
- 2019-02-15
- 2016-10-05
专利申请权的转移
登记生效日: 2016.09.12
申请人由优视科技有限公司变更为广州爱九游信息技术有限公司
地址由100083 北京市海淀区成府路28号12层变更为510627 广东省广州市天河区黄埔大道西平云路163号广电平云广场B塔13楼自编02单元
- 2016-03-09
实质审查的生效
IPC(主分类): G06F 9/445
专利申请号: 201410379582.9
申请日: 2014.08.04
- 2016-02-10
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2013-03-20
|
2012-11-09
| | |
2
| |
2014-02-12
|
2012-07-27
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |