大家好,又见面了,我是你们的朋友全栈君。
1.签名的意义 为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本的一致性。 2.签名对你的App的影响。 你不可能只做一个APP,你可能有一个宏伟的战略工程,想要在生活,服务,游戏,系统各个领域都想插足的话,你不可能只做一个APP,谷歌建议你把你所有的APP都使用同一个签名证书。 使用你自己的同一个签名证书,就没有人能够覆盖你的应用程序,即使包名相同,所以影响有: 1) App升级。 使用相同签名的升级软件可以正常覆盖老版本的软件,否则系统比较发现新版本的签名证书和老版本的签名证书不一致,不会允许新版本安装成功的。 2) App模块化。android系统允许具有相同签名的App运行在同一个进程中,如果运行在同一个进程中,则他们相当于同一个App,但是你可以单独对他们升级更新,这是一种App级别的模块化思路。 3) 允许代码和数据共享。android中提供了一个基于签名的Permission标签。通过允许的设置,我们可以实现对不同App之间的访问和共享,如下:
|
其中
protectionLevel
标签有
4
种值:
normal(
缺省
值
),dangerous, signature,signatureOrSystem
。简单来说,
normal
是低风险的,所有的
App
不能访问和共享
此
App
。
dangerous
是高风险的,所有的
App
都能访问和共享此
App
。
signature
是指具有相同签名的
App
可以访问和共享此
App
。
signatureOrSystem
是指系统
image
中
App
和具有相同签名的
App
可以访问和共享此
App
,谷歌建议不要使用这个选项,因为签名就足
够了,一般这个许可会被用在在一个
image
中需要共享一些特定的功能的情况下。
最后,请一定要记得保管好你的签名证书的两个密码,两个密码都不要告诉任何人,也不要把你的密钥库拷贝给别人,包括我!
3.签名。 1)签名文件认知:
我们已经知道的是:Android对每一个Apk文件都会进行签名,在Apk文件安装时,系统会对其签名信息进行比对,判断程序的完整性,从而决定该Apk文件是否可以安装,在一定程度上达到安全的目的。
给定一个Apk文件,解压,可以看到一个META-INFO文件夹,在该文件夹下有三个文件:分别为MANIFEST.MF、CERT.SF和CERT.RSA。这三个文件分别表征以下含义:
(1)MANIFEST.MF:这是摘要文件。程序遍历Apk包中的所有文件(entry),对非文件夹非签名文件的文件,逐个用SHA1(安全哈希算法)生成摘要信息,再用Base64进行编码。如果你改变了apk包中的文件,那么在apk安装校验时,改变后的文件摘要信息与MANIFEST.MF的检验信息不同,于是程序就不能成功安装。
说明:如果攻击者修改了程序的内容,有重新生成了新的摘要,那么就可以通过验证,所以这是一个非常简单的验证。
(2)CERT.SF:这是对摘要的签名文件。对前一步生成的MANIFEST.MF,使用SHA1-RSA算法,用开发者的私钥进行签名。在安装时只能使用公钥才能解密它。解密之后,将它与未加密的摘要信息(即,MANIFEST.MF文件)进行对比,如果相符,则表明内容没有被异常修改。
说明:在这一步,即使开发者修改了程序内容,并生成了新的摘要文件,但是攻击者没有开发者的私钥,所以不能生成正确的签名文件(CERT.SF)。系统在对程序进行验证的时候,用开发者公钥对不正确的签名文件进行解密,得到的结果和摘要文件(MANIFEST.MF)对应不起来,所以不能通过检验,不能成功安装文件。
(3)CERT.RSA文件中保存了公钥、所采用的加密算法等信息。
说明:系统对签名文件进行解密,所需要的公钥就是从这个文件里取出来的。
结论:从上面的总结可以看出,META-INFO里面的说那个文件环环相扣,从而保证Android程序的安全性。(只是防止开发者的程序不被攻击者修改,如果开发者的公私钥对对攻击者得到或者开发者开发出攻击程序,Android系统都无法检测出来。)
2)二次签名: 由于某些限制,会有这样的需求:拿不到apk源码的情况下要对其中的一些资源进行修改,在Android签名的限制下,直接解压修改会导致签名不一致,这样的apk文件在手机上是无法被安装的,这样就只能对apk进行重新签名来生成新的apk包。从另外一个角度上来说,这也是从系统的级别来保证安全:一个被特定私钥签名的apk是无法被篡改且无法抵赖的。 要对apk进行重新签名,首先要生成自己的公私钥对,然后删除apk中原有的签名信息再对apk进行重新签名。通过解压可知,apk的签名信息全都存在于META-INF中,删除这个文件,原apk就变成了一个未签名的apk。 3)如何签名 根据不同环境或命令或工具进行签名,详细内容baidu/sogou~ 4.验证签名。 判断一个APK是否是盗版: 1)软件自身判定:判断当前应用签名和最初是否一致 2)第三方判定:如豌豆荚等应用如何判定其他软件是否是官方出品?将商店里的App与官网上的App签名做对比。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/135447.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...