Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用签名哈希保护Android应用程序_Java_Android - Fatal编程技术网

Java 使用签名哈希保护Android应用程序

Java 使用签名哈希保护Android应用程序,java,android,Java,Android,使用下面的代码,我有2个用于调试和发布签名的哈希。应该只允许带有my Hash的应用访问服务器 我试图在我的手机和服务器上安装一个破解版本。在日志中,我发现哪个破解版本的哈希值与我的发布签名相同。我分析了破解版本的代码,破解者甚至没有改变一个计算服务器最终URL的函数 这是否意味着他们将我的签名用于已删除广告的破解版应用程序?据我所知,破解者应该使用他们自己的签名来签署破解的应用程序,但这不是真的吗?他们肯定无法访问我的密钥库。我在一篇文章中发现了这种保护应用程序的方法,但这似乎不是一种好方法

使用下面的代码,我有2个用于调试和发布签名的哈希。应该只允许带有my Hash的应用访问服务器

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

这是否意味着他们将我的签名用于已删除广告的破解版应用程序?据我所知,破解者应该使用他们自己的签名来签署破解的应用程序,但这不是真的吗?他们肯定无法访问我的密钥库。我在一篇文章中发现了这种保护应用程序的方法,但这似乎不是一种好方法

如何识别破解版本?

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;
}

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

我的应用程序在请求视频流URL时向服务器发送哈希,如果请求中的哈希不正确,服务器将返回错误。所以,若cracker删除了这些检查,服务器将返回错误。我的应用程序只有服务器提供的内容。没有本地内容。@Anton当破解程序删除这些检查时,他们将用代码替换这些检查,这些代码将向服务器发送您期望的哈希值,因此您的服务器将不会更明智。我发现破解程序使用了APKSignatureKiller