java - 确保恶意 apk 没有与我的服务器通信

标签 java php android security

我试图确保有人无法重新编译我混淆的应用程序,然后将恶意数据发送到我的服务器。我正在对我的应用程序的 versionCode 和 packageName 进行 SSLed PHP_POST。这些 POSTED 变量都通过非对称加密和签名验证进行了加密,每次版本升级都会更改签名验证。我考虑过使用校验和,但 Google 不正式支持这些方法,而且研究表明它们不是防错的,这意味着它们可能会干扰合法用户。

最重要的是,当检测到 100% 不合法的内容时,通过 IP/Mac 地址/IMEI/序列号/Android_ID/等进行现场禁止。

我知道没有什么是 100% 安全的,好的安全和坏的安全之间的区别是破坏安全所需的时间/金钱/努力的值(value)高于受安全保护的项目。考虑到这一点,是否有任何其他方法可以用来保护我的应用程序或我应该实现以增加当前安全性的任何想法?

附带说明一下,反编译/重新编译经过混淆的 apk(jar) 有多容易?一旦完成一次会不会更容易? (也就是说,我更改 key 多少次都没有关系,因为应用程序已经受到威胁,反编译器可以简单地查看我上次 key 所在的同一位置)

最佳答案

首先,不要做自己的加密。如果您正确(!)执行 SSL,这可能足以保护传输中的数据免遭篡改等。您需要做的是以某种方式验证您的应用程序,这通常很棘手,因为您需要将凭据保留在应用程序中。有不同的解决方法,但目前的标准(和 Google 认可的方法)是使用 Google Play 服务获取 token 并在您的服务器应用程序中验证它。详情在这里:http://android-developers.blogspot.jp/2013/01/verifying-back-end-calls-from-android.html

这并不完美,但可能比您能想到的大多数非标准解决方案都要好。

反编译通常很容易,混淆也没有太大变化,因为很容易找到调用系统 API 的地方(获取 MAC 地址、哈希、加密等)

关于java - 确保恶意 apk 没有与我的服务器通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14929274/

相关文章:

java - 如何读取查询参数键和值

java.lang.NullPointerException PrintWriter

php - Joomla 3.x Protostar - 如何使自定义位置水平而不是垂直堆叠

php - 使用 HybridAuth 的 Facebook 登录显示错误您无法直接访问此页面

android - 与自定义行为一起使用时滑动刷新布局问题

android - 圆圈中的按钮

java - 使用 SAX 解析器解析大型 XML 文件时,该类变得臃肿且不可读 - 如何解决这个问题?

java - 以编程方式设置 Logback Appender 路径

php - 从数据库中获取同一页面中的结果

Android:触发searchview时状态栏颜色变化