如何验证APK是否未被篡改?

时间:2015-09-15 06:09:27

标签: android apk

vanilla Android rom(AOSP)不包含Google Apps。如果我从其他来源下载Google Apps,我该如何验证它是否未被篡改?

1 个答案:

答案 0 :(得分:3)

每个apk都使用发布密钥签名。如果apk被解编译并重新编译,则必须使用不同的发布密钥对新apk进行签名(因为每个发布密钥都需要一个只有开发人员/公司知道的密码)。因此,您可以通过检查密钥的sha1来验证apk的真实性。希望它有所帮助

编辑: 您必须使用Web服务来验证应用程序的有效性(就像facebook所做的那样)

  1. 您必须在发布密钥上执行此操作才能获得应用的密钥哈希,例如 keytool -exportcert -alias androiddebugkey -keystore“C:\ Documents and Settings \ Administrator.android \ debug.keystore”| “C:\ OpenSSL \ bin \ openssl”sha1 -binary |“C:\ OpenSSL \ bin \ openssl”base64
  2. 获取的密钥哈希必须保存在您的服务器上,并且必须使用Web服务获取。
  3. 使用以下代码以编程方式获取密钥哈希。验证两个值是否相同。

    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "com.play.fabin",  //Replace your package name here
                PackageManager.GET_SIGNATURES);
    
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA1");
            md.update(signature.toByteArray());
            Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
            System.out.println("key hash = " + Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    
  4. 希望它可以帮助你..