2012-03-30 82 views
4

我想以编程方式在运行时检查APK的签名。我在我的开发工作站拥有一个密钥库,所以我可以知道(不知道如何)我用APK签署的公钥。自检APK的签名

一旦我知道公钥后会有什么公钥,我想要放入源代码并检查当前运行的应用程序是否与密钥匹配。

可能吗?如果是这样,我如何从Eclipse生成的密钥库中获取公钥?

谢谢。

+0

考虑[Android许可证检查服务](http://developer.android.com/guide/market/licensing/index.html)。 – 2012-03-30 19:43:38

+1

对不起,此**必须**可脱机工作,适用于应用的预览版本。我有一个关于此的相关问题 – 2012-03-30 19:46:04

+1

从安全角度来看,自我检查没什么意义,因为攻击者可以修改代码以便接受任何事情。 – 2012-03-30 20:01:17

回答

4

你可以试试这个,它应该工作

Signature[] sigs = getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures; 
    for (Signature sig : sigs) 
    { 
     // log the sig here 
    } 
0

我想我有同样的情况就像你有。 这是我的original solution

您可以尝试一下。

Signature sig = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures[0]; 
Signature releaseSig = context.getPackageManager().getPackageAchiveInfo("/mnt/sdcard/myReleaseApk.apk", PackageManager.GET_SIGNATURES).signatures[0]; 
return sig.hashCode() == releaseSig.hashCode;