我正在尝试确保某人无法重新编译我的混淆应用程序,然后将恶意数据发送到我的服务器。我正在做我的应用程序的versionCode和packageName的SSLed PHP_POST。这些POSTED变量都通过非对称加密和签名验证进行加密,签名验证将根据每个版本升级进行更改。我曾考虑使用校验和,但谷歌并未正式支持这些方法,研究表明它们并非防错,这意味着它们可能会破坏合法用户。
最重要的是,当检测到100%不合法的内容时,通过IP / Mac地址/ IMEI / Serial / Android_ID /等进行现场禁令。
我知道没有任何东西可以100%安全,良好的安全性和糟糕的安全性之间的区别在于,打破安全所需的时间/金钱/努力的价值高于受安全保护的项目。考虑到这一点,我是否可以使用任何其他方法来保护我的应用程序或我应该实现的任何想法以添加到当前的安全性?
另一方面,反编译/重新编译已被混淆的apk(jar)是多么容易,一旦完成它会更容易吗? (也就是说,我改变密钥的次数并不重要,因为应用程序已经被破坏,反编译器可以简单地查看我的最后一个密钥所在的位置)
答案 0 :(得分:2)
首先,首先,不要做自己的加密。如果你正确(!)做SSL可能足以保护传输中的数据免受篡改等。你需要做的是以某种方式验证你的应用程序,这通常很棘手,因为你需要在应用程序中保留凭据。有不同的方法,但目前标准(和谷歌认可的方式)是使用Google Play服务获取令牌并在您的服务器应用程序中验证它。详情请见http://android-developers.blogspot.jp/2013/01/verifying-back-end-calls-from-android.html
这并不完美,但可能比您提出的大多数非标准解决方案更好。
反编译通常很容易,并且混淆不会发生太大变化,因为找到调用系统API的地方(获取MAC地址,散列,加密等)是微不足道的。