1, Andoid系统会在安装apk的时候,检查签名,签名不同,没有签名或者签名不通过的,不能进行安装或者覆盖,方法是:获取打包在apk里面的数字证书(里面有公钥),该证书是自签名证书,用证书公钥验证该证书的合法性(该证书有自己的私钥对该证书进行签名,而不是第三方权威机构的私钥),判断证书的有效期,然后利用该证书的公钥对包文件的签名进行验证。
2, 对于发布者来说,需要生成xxx.keystore文件,该证书文件打包了私钥和公钥等信息,访问该证书可以设置密码(为了保护该文件被非法调用,因为里面有私钥),然后利用该证书对apk包进行签名。处理的过程是:对apk包相关文件生成摘要,然后利用私钥进行签名,生成签名文件,最后和公钥一起打包在新的apk包中。
3,有没被篡改的可能性? 答案是触发证书的私钥也泄漏,否则基本不可能,原因是:如果有人直接拷贝了apk里面的公钥,然后和自己的包一起合并成新的apk包,但由于拿不到该公钥对应的私钥,因此合并的apk包里面的文件签名只能用自己的其他私钥,然后android在安装该文件的时候利用打包在apk的公钥进行验证,发现验证不过,因此无法安装。如果用自己的证书签名同样包的文件,对android系统来说,认为是一个新的app,因此无法直接覆盖之前的版本,而是当作新的app。
4,我们可以读取已经安装成功的apk包里面公钥key作为识别该app的唯一标识?为什么?理由是因为已经经过成功安装,说明里面的公钥信息是经过android系统验证的,其他人只能看,但不能修改,因此可以作为一个app的标识。