android 程序判断签名文件后缀,如何判断 Android 应用的 Apk 签名是否一致?<知乎>...

观点1:

可以比对apk签名的fingerprint。

假定安装了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码)是不是一样就行了。

观点2:

毕设做的是Android应用重打包检测,首先就需要批量检测Android应用之间签名是否一致。所以在这里介绍一下在终端中如何写脚本或者直接输入命令批量检测应用签名是否一致。 Android应用的发布形式apk中包含的签名加密方法除了RSA还有DSA,所以不能只从apk中提取常见的META-INF/CERT.RSA,第一步应该是检查apk中具体的签名文件是什么。

FILE="yourapp.apk"

cert_XSA=`jar tf $FILE | grep SA`

此时得到的cert_XSA可能是META-INF/*.RSA或者META-INF/*.DSA。

接下来从apk中提取具体的签名文件。

jar xf $FILE $cert_XSA

此时会在当前目录得到cert_XSA文件。

然后对于得到的签名文件,提取其中签名的MD5值

keytool -printcert -file $cert_XSA | grep MD5 > "$FILE.certMD5"

这时候yourapp.certMD5这个文件中就保存了yourapp.apkk中的签名MD5值。

最后比较两个app的签名可以用diff

FILE1="yourapp1.apk"

FILE2="yourapp2.apk"

# ...

# ... 经过上述步骤得到$FILE1.certMD5和$FILE2.certMD5

# ...

certMD5_diff=`diff $FILE1.certMD5 $FILE2.certMD5`

if [ "$certMD5_diff" = "" ]; then

echo "$FILE1.certMD5 == $FILE2.certMD5"

fi

若输出yourapp1.apk.certMD5 == yourapp2.apk.certMD5那么这两个应用的签名就一致。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值