4
我想以编程方式在运行时检查APK的签名。我在我的开发工作站拥有一个密钥库,所以我可以知道(不知道如何)我用APK签署的公钥。自检APK的签名
一旦我知道公钥后会有什么公钥,我想要放入源代码并检查当前运行的应用程序是否与密钥匹配。
可能吗?如果是这样,我如何从Eclipse生成的密钥库中获取公钥?
谢谢。
我想以编程方式在运行时检查APK的签名。我在我的开发工作站拥有一个密钥库,所以我可以知道(不知道如何)我用APK签署的公钥。自检APK的签名
一旦我知道公钥后会有什么公钥,我想要放入源代码并检查当前运行的应用程序是否与密钥匹配。
可能吗?如果是这样,我如何从Eclipse生成的密钥库中获取公钥?
谢谢。
你可以试试这个,它应该工作
Signature[] sigs = getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures;
for (Signature sig : sigs)
{
// log the sig here
}
我想我有同样的情况就像你有。 这是我的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;
考虑[Android许可证检查服务](http://developer.android.com/guide/market/licensing/index.html)。 – 2012-03-30 19:43:38
对不起,此**必须**可脱机工作,适用于应用的预览版本。我有一个关于此的相关问题 – 2012-03-30 19:46:04
从安全角度来看,自我检查没什么意义,因为攻击者可以修改代码以便接受任何事情。 – 2012-03-30 20:01:17