永发信息网

如何判断 Android 应用的 Apk 签名是否一致

答案:2  悬赏:40  手机版
解决时间 2021-01-31 11:44
  • 提问者网友:我的未来我做主
  • 2021-01-30 14:55
如何判断 Android 应用的 Apk 签名是否一致
最佳答案
  • 五星知识达人网友:蕴藏春秋
  • 2021-01-30 15:36
毕设做的是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楼网友:老鼠爱大米
  • 2021-01-30 15:45
在程序中获取apk的签名时,通过signature方法进行获取,如下: packageinfo = manager.getpackageinfo(pkgname,packagemanager.get_signatures); signatures = packageinfo.signatures; for (signature signature : signatures) { builder.append(signature.tocharsstring()); } signature = builder.tostring(); 所以一般的程序就是在代码中通过判断signature的值,来判断apk是否被重新打包过。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯