Android 根据apk签名检索一些信息

Android 根据apk签名检索一些信息,android,licensing,Android,Licensing,我正在尝试为基于服务器的应用程序实现版本失效系统。使用以下型号: 在一些向服务器提交的请求中,客户端会添加一个关键字,如果该密码不在白名单中,服务器会以错误响应,应用程序会显示一条消息,警告需要进行市场更新(通常是因为它是黑客版本,或者是用于合法版本的密码,但由于破解版本使用相同的代码而被列入黑名单)。 为了生成该密码,我希望在运行时恢复一个密钥,用于标识已编译的版本(这样,如果重新编译apk,它将无法工作) 最初,我考虑使用如下代码检索的apk签名: public static int get

我正在尝试为基于服务器的应用程序实现版本失效系统。使用以下型号:

在一些向服务器提交的请求中,客户端会添加一个关键字,如果该密码不在白名单中,服务器会以错误响应,应用程序会显示一条消息,警告需要进行市场更新(通常是因为它是黑客版本,或者是用于合法版本的密码,但由于破解版本使用相同的代码而被列入黑名单)。 为了生成该密码,我希望在运行时恢复一个密钥,用于标识已编译的版本(这样,如果重新编译apk,它将无法工作)

最初,我考虑使用如下代码检索的apk签名:

public static int getSignature() {
    try {
        Signature sigs[] = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES).signatures;
        return sigs[0].hashCode();
    } catch (NameNotFoundException ignore) {
    }
    return 0;
}
但是它是相当愚蠢的,因为黑客可以检索我的apk的签名(将其安装在设备中并使用上面的代码运行程序(使用my.apk.package name而不是getPackageName())

然后修改getSignature()方法以返回伪造的代码,而不是真实的签名

因此,我的问题是,如果存在某种信息(依赖于签名或类似信息),但不容易从应用程序外部访问,那么如果代码使用另一个签名重新编译,那么值会发生变化,并且不容易猜测


谢谢

如果你的应用是付费应用,你可能想看看:


这可能是一个很长的阅读和一些工作,但嘿,这是安全的代价。

如果你的应用是付费的,你可能想看看:


这可能是一个很长的阅读和一些工作,但嘿,这是安全性的代价。

我认为你运气不好,因为你的.apk中的任何内容几乎都可以被所有人阅读,特别是在根设备上


你一定要考虑混淆你的应用程序,例如使用PROGARGER。

< P>我认为你运气不好,因为你的.APK中的任何东西都可以被几乎每个人阅读,特别是在有根的设备上。

你一定要考虑你的应用程序的混淆,例如使用PROGARAD.