用于Android授权的AESObfuscator

用于Android授权的AESObfuscator,android,android-lvl,Android,Android Lvl,我在android授权的ServerManagedPolicy中使用AESObfuscator。到目前为止,我创建的设备ID如下: String deviceId = Secure.getString( getContentResolver(), Secure.ANDROID_ID ); 在互联网上的所有例子中,它都是这样做的,但有时会说它不是很安全,但没有其他方式被描述。我读到安卓ID可以很容易地更改,甚至可以为空,所以我真的希望有另一种方法来获得唯一的ID。 对于购买了我的应用程序的人,授

我在android授权的ServerManagedPolicy中使用AESObfuscator。到目前为止,我创建的设备ID如下:

String deviceId = Secure.getString( getContentResolver(), Secure.ANDROID_ID );
在互联网上的所有例子中,它都是这样做的,但有时会说它不是很安全,但没有其他方式被描述。我读到安卓ID可以很容易地更改,甚至可以为空,所以我真的希望有另一种方法来获得唯一的ID。 对于购买了我的应用程序的人,授权失败不止一次,我很确定这与此有关,否则这只会是谷歌的问题,我真的很怀疑


那我该怎么做呢?只需创建一个随机散列并将其添加到设备ID中(当然要将其存储在某处?)

您所说的“安全”是什么意思?这只是混淆您的首选项,使其更难在根设备上编辑的问题。如果重置设备(删除所有数据),或者有人在根设备上编辑,ANDROID_ID可能会更改。第一种情况实际上不是问题,第二种情况下,您将无法解密(消除混淆)存储的首选项,因此您只需将其视为错误。如果它真的为空,您应该考虑某种类型的回退值

这里的要点不是要有一个唯一的ID,而是要使用一些特定于设备的数据来混淆首选项,这样您就不能将它们复制到另一个设备上。您可以使用IMEI、WiFi适配器MAC地址或任何其他特定设备的哈希,但您必须处理特定属性不可用的情况(例如,仅WiFi的平板电脑没有IMEI等)


使用错误报告库(如ACRA或BugSense)跟踪实际错误并了解许可失败背后的真正原因。有时这是谷歌基础设施的错,所以你也应该尝试处理这个问题(缓存许可状态等)

很抱歉在6年后问这个问题,但是AESObfuscator的真正意义是什么?我的想法对吗,salt、deviceId和sharedprefs文件都可以通过根设备和dex2jar/反编译获得?这一切的目的是为了让黑客慢下来,而不是完全阻止他们吗?