37

我正在开发一个 android 应用程序,我打算发布它(付费应用程序)。我听说盗版 Android 应用程序非常容易(比 iphone 容易得多)。我想根据您的经验或您所知道的,如何提高我的应用程序的安全性?我知道我永远无法确保它 100% 安全,但我想让人们更难盗版或非法分发它 您可以分享任何想法、经验和评论吗?

4

3 回答 3

70

我为 Android 发布了一个免费的反恶意软件应用程序,确保没有人入侵它对于它的成功至关重要。Android Market 上应用程序面临的最大威胁包括源代码泄露、复制/分发的付费应用程序以及重新输入密钥。我在下面解释每一个以及解决它们的方法。

首先,本文介绍了如何通过将编译后的代码解包并查看源代码来对 Android 应用程序进行逆向工程。您将无法阻止这种情况发生在您的应用中。时期。如果有意愿的人获得了您的 apk 副本(可在有根手机上轻松获得),他们可以随时查看您的源代码。好消息是您可以混淆代码的重要部分,从而使逆向工程变得更加困难。Proguard是 Android 提供的一个工具,可让您在打包过程中混淆(使代码更难阅读)。但是,为了防止您的重要代码被读取,您需要将所有易受攻击的方法或变量移动到不是ActivityServiceBroadcastReceiver. 有关完整的事实,请阅读文档。

为了防止非法复制和分发您的应用程序,Google Play 提供了一些许可选项。不幸的是,LVL 也不是完全安全的。此处提供了有关如何破解它的详细 HOW-TO(Google Play 之前)。

最后,上面链接的论文以及大量的学术文章和在线博客描述了一旦源代码(甚至是混淆的源代码)被泄露,一次只能添加一些自己的恶意代码,退出应用程序,以及在 Android Market 上发布。好消息是,除非您的 android 许可证密钥密码很容易被猜到,或者如果您将其提供给其他人,否则攻击者将无法发布具有相同许可证密钥的应用程序。这不仅可以保护您免受指责,而且还可以使恶意应用程序无法访问通过您的原始应用程序(例如SharedPreferences)可用的数据。

总而言之,真正保护您的应用程序免受盗版的最佳方法是正确配置和使用ProguardGoogle Play 许可证,并使用非常安全的许可证密钥为您的最终 apk 签名。

于 2012-03-26T01:49:56.850 回答
9

如果应用程序被盗版,您可以添加篡改检查和混淆以提醒用户/禁用功能/向服务器报告。我使用DexGuard进行强化混淆。

篡改检查

  • 安装程序应用程序 - 使用包管理器确保安装应用程序是 play/amazon 应用程序商店
  • 模拟器检查 - 检查系统属性是否有迹象表明应用程序正在模拟器上运行,这在开发人员之外可能表明攻击/篡改
  • 可调试检查 - 使用包管理器检查可调试标志,这应该在产品中关闭,因此可能表示攻击/篡改
  • 签名证书检查 - 使用包管理器验证应用程序是否使用您的开发人员证书签名(如果有人解包并重新打包/重新签名应用程序,这将被破坏)

更新:自从回答了这个问题后,我写了一篇关于篡改检测的更详细的文章。

于 2014-03-19T08:28:09.647 回答
7

查看 Google Play 许可框架。

http://developer.android.com/guide/market/licensing/index.html

这是您最好的选择。

Google Play Licensing 是一项基于网络的服务,允许应用程序查询受信任的 Google Play 许可服务器,以确定应用程序是否已授权给当前设备用户。许可服务基于 Google Play 许可服务器确定给定用户是否被许可使用给定应用程序的能力。如果用户是应用程序的记录购买者,Google Play 会认为该用户已获得许可。

于 2012-03-26T00:06:31.193 回答