我正在开发一个android应用程序,并计划发布它(付费应用程序)。我听说盗版安卓应用程序很容易(比iphone容易得多)。我想知道,根据你的经验或你所知道的,如何提高我的应用程序的安全性?我知道我永远无法100%保护它,但我想让人们更难盗版或非法分发它你有什么想法、经验和评论可以分享吗?
我为Android发布了一个免费的反恶意软件应用程序,确保没有人入侵它对它的成功至关重要。安卓市场上应用程序面临的最大威胁包括泄露的源代码、复制/分发的付费应用程序以及重新设置密钥。我解释了下面的每一个以及解决它们的方法。
首先,本文描述了如何通过拆包编译的代码并查看源代码来对Android应用程序进行逆向工程。您将无法阻止此情况发生在您的应用程序上。时期如果有遗嘱的人得到你的apk副本(在根手机上很容易获得),他们总是可以查看你的源代码。好消息是,您可以混淆代码的重要部分,从而使反向工程变得更加困难。Proguard是安卓系统提供的一个工具,可以让你在打包过程中混淆代码(使其更难阅读)。但是,为了防止您的重要代码被读取,您需要将所有易受攻击的方法或变量移动到不是Activity
、Service
或BroadcastReceiver
的文件中。有关全部事实,请阅读文档。
为了防止您的应用程序被非法复制和分发,Google Play提供了一些许可选项。不幸的是,LVL也不是完全安全的。关于如何破解它(Google Play之前)的详细HOW-TO可以在这里找到。
最后,上面链接的论文,以及许多学术文章和在线博客描述了一旦源代码(甚至是混淆的源代码)被泄露,一旦可以添加一些自己的恶意代码,退出应用程序,并在安卓市场上发布。这里的好消息是,除非你的android许可证密钥密码很容易猜测,或者如果你把它泄露给其他人,否则攻击者将无法发布具有相同许可证密钥的应用程序。这不仅可以保护您免受指责,而且还会使恶意应用程序无法通过原始应用程序(如SharedPreferences
)访问可用数据。
总而言之,真正保护您的应用程序免受盗版的最佳方法是正确配置和使用Proguard、Google Play许可证,并使用非常安全的许可证密钥为您的最终apk签名。
如果应用程序被盗版,您可以添加篡改检查和模糊处理,以提醒用户/禁用功能/向服务器报告。我使用DexGuard进行强化模糊处理。
篡改检查
- 安装程序应用程序-使用软件包管理器确保安装的应用程序是play/aamazon应用程序商店
- Emulator检查-检查系统属性,查看应用程序在模拟器上运行的迹象,这些迹象在开发之外可能表明攻击/篡改
- 可调试检查-使用包管理器检查可调试标志,该标志在产品中应关闭,因此可能指示攻击/篡改
- 签名证书检查-使用软件包管理器验证应用程序是否使用您的开发人员证书签名(如果有人打开并重新打包/退出应用程序,则此证书将被破坏)
更新:自从回答这个问题以来,我写了一篇关于篡改检测的更详细的文章。
看看Google Play的授权框架。
http://developer.android.com/guide/market/licensing/index.html
这是你最好的选择。
Google Play Licensing是一项基于网络的服务,允许应用程序查询受信任的Google Play授权服务器以确定应用程序是否被许可给当前设备用户。这个授权服务基于Google Play的功能授权服务器,以确定给定用户是否被授权使用给定的应用程序。Google Play认为,如果用户用户是应用程序的记录购买者。