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