android_签名/重新签名/签名是否一致



  apk包中签名相关的文件在META_INF目录下:CERT.SF,生成每个文件相对的密钥;MANIFEST.MF,数字签名信息;xxx.SF,这是JAR文件的签名文件,占位符xxx标识了签名者;xxx.DSA,对输出文件的签名和公钥.
  为文件重新签名,zip打开原有文件包,删除META-INF文件夹,得到未签名的apk.之后重新签名即可.
  $java -jar signapk.jar platform.x509.pem platform.pk8 unsigned.apk Signed.apk
  platform.pk8和platform.x509.pem两个文件在/build/target/product/security目录;  signapk.jar在\out\host\linux-x86\framework\目录;
  签名过程:1.生成MANIFEST.MF文件,即遍历unsigned.apk包中的所有文件(entry),对非文件夹非签名文件的文件,逐个生成SHA1的数字签名信息,再用Base64进行编码; 2.生成CERT.SF文件,即对前一步生成的Manifest,使用SHA1-RSA算法,用私钥进行签名. 3.生成CERT.RSA文件,和公钥相关.
  判断两个签名是否一致,META-INF/CERT.RSA文件;比较签名的MD5码或SHA1码;  $keytool -printcert -file META-INF/CERT.RSA;
  mMessageDigest.isEqual(*); //判断两个签名是否一致的方法.  //java.security包下,public abstract class MessageDigest extends MessageDigestSpi{ *** }
  android.app包下,final class ApplicationPackageManager extends PackageManager{ *** } //mPM对象由构造时传入; //PackageManger.java是一个抽象类;
    class ContextImpl extends Context{ *** } //内部初始化,new ApplicationPackageManager(this, pm);由ActivityThread.getPackageManager();//静态方法. //内部ServiceManager.getService("package");
  两个应用的ShareUserId相同,则共享对方的data目录下的文件,包括SharePreference/file/lib等文件,而不是所有的资源文件;注意,要共享资源文件(图片/layout/string等),不需要ShareUserId相同,普通方法就能拿到;
  INSTALL_FAILED_UPDATE_INCOMPATIBLE:由于卸载没有完全,可以使用设置中卸载相应应用,或者adb uninstall com.android.***
  INSTALL_FAILED_SHARED_USER_INCOMPATIBLE:主要是由于使用了android.uid.shared导致的问题(如果sharedUid存在,也有此问题).方法1,在源码环境中使mm编译apk;方法2,重新签名;
  静默安装三种方式:root手机,调用Pm.java;系统应用,system/app,申请INSTALL_PACKAGES权限;第三方应用android:sharedUserId="android.uid.system";




假定安装了JDK,如果想查HelloWorld.apk所使用的签名的fingerprint,可以这样做:
1. 查找apk里的rsa文件
(Windows)
> jar tf HelloWorld.apk |findstr RSA
(Linux)
$ jar tf HelloWorld.apk |grep RSA
META-INF/CERT.RSA
2. 从apk中解压rsa文件
jar xf HelloWorld.apk META-INF/CERT.RSA
3. 获取签名的fingerprints
keytool -printcert -file META-INF/CERT.RSA
...
Certificate fingerprints:
MD5: BC:6D:BD:6E:49:69:2A:57:A8:B8:28:89:04:3B:93:A8
SHA1: 0D:DF:76:F4:85:96:DF:17:C2:68:1D:3D:FF:9B:0F:D2:A1:CF:14:60
Signature algorithm name: SHA1withRSA
Version: 3
...
4. 清理工作,删除rsa文件
(Windows)
rmdir /S /Q META-INF
(Linux)
rm -rf META-INF
如果你想知道两个apk是不是用的同一个签名,那比一下它们签名的MD5码(或SHA1码)是不是一样就行了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值