【发布时间】:2019-06-02 20:25:49
【问题描述】:
我正在开发一个与服务器通信的 android 应用程序,我想在运行时验证我的应用程序自发布以来没有被修改(使用修改后的应用程序的用户应该无法登录到应用程序)。
由于修改后的应用程序签名与原始签名不同,我决定:
- 提取嵌入在 android 应用程序中的签名证书
- 将其与登录请求一起发送到服务器(在客户端(即 apk)中编码整个验证过程不起作用,因为有人可以修改 apk 以绕过它。)
- 验证一下
- 如果证书有效,则处理登录请求/否则返回错误
这是我上面数字 1 的代码:
Context context = this;
PackageManager pm = context.getPackageManager();
String packageName = context.getPackageName();
int flags = PackageManager.GET_SIGNATURES;
PackageInfo packageInfo = null;
try {
packageInfo = pm.getPackageInfo(packageName, flags);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
Signature[] signatures = packageInfo.signatures;
所以我的问题是:
- 是否有更好的方法来验证 apk?
- 如果这个方法没问题,
2.1 发送证书会不会占用很高的带宽?
2.2 如何验证证书?(我在服务器端有mykey.jks,我最初用于签署apk)
(这也是我关于stackoverflow的第一个问题,因此非常感谢指出我在提出问题时所犯的任何错误!。)
【问题讨论】:
-
要么你可以检查你的应用程序。是否从游戏商店下载。就是这样。
-
这也很好,但问题是,它完全依赖于客户端,因此可以相对容易地绕过它。但它也不会伤害到那个级别的检查。
标签: android security certificate client-server apk