java - 使用签名哈希保护 Android 应用

标签 java android

使用下面的代码,我有 2 个用于调试和发布签名的哈希值。只有具有我的哈希值的应用程序才应被允许访问服务器。

我尝试在我的手机和服务器上安装破解版。在日志中我发现哪个破解版本与我的发布签名具有相同的哈希值。我分析了破解版的代码,破解者甚至没有更改服务器计算最终URL的功能。

这是否意味着他们使用了我的签名来删除广告的破解版应用程序?据我了解,破解者应该使用自己的签名来签署破解的应用程序,但这不是真的吗?他们肯定无权访问我的 keystore 。我在一篇文章中找到了这种保护应用程序的方法,但似乎这不是一个好方法。

如何识别破解版本?

public static String getSignature(Context context) {
    String apkSignature = null;
    try {
        PackageInfo packageInfo = context.getPackageManager().getPackageInfo(
            context.getPackageName(),
            PackageManager.GET_SIGNATURES
        );
        for (Signature signature : packageInfo.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            apkSignature = Base64.encodeToString(md.digest(), Base64.DEFAULT);
            Log.e("DEBUG", "SIGNATURE: " + apkSignature);
        }
    } catch (Exception e) {}
    return apkSignature;
}

最佳答案

你不能。无论您进行什么检查,当您的应用程序被破解时,这些检查都将被删除并替换为始终返回“正确”结果的代码。

关于java - 使用签名哈希保护 Android 应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59817456/

相关文章:

java - 在考虑 Galaxy 设备的边缘情况时,如何获得正确的设备内部和外部空间量?

android - DialogFragment 忽略 OnBackPressedDispatcher

android - Firebase FCM token 作为 Android 的安全 token

Android,如何选择保存文件位置?

java - 如何在布局中将 TextView 与背景对齐 - Android

Java String 对象 .Equals 未按预期工作

java - Javers 不报告对象层次结构中的引用更改

Android - ListView 禁用项目部分标题中的按下效果

java - hibernate : unable to map mapping document as they are already available in

java - RUNNABLE 线程在 native 方法中可能不消耗 CPU?