我正在开发一个android应用程序,并计划发布它(付费应用程序)。我听说盗版Android应用程序非常容易(比iPhone更容易)。我想知道你的经验,或者你知道什么,如何提高我的应用程序的安全性?我知道我永远无法100%获得它,但我想让人们更难以盗用它或非法分发它 任何想法,经验,评论,你可以分享?如何保护我的应用程序免受盗版
回答
我为Android发布了一款免费的反恶意软件应用程序,并确保没有人入侵它,这对它的成功至关重要。 Android Market上的应用程序最大的威胁包括泄漏的源代码,复制/分发的付费应用程序和重新密钥。我将在下面解释每种方法并解决它们。
首先,this paper描述了如何反编译Android应用程序,方法是解压缩编译代码并查看源代码。您将无法阻止这种情况发生在您的应用中。期。有意愿的人可以随时查看你的源代码,如果他们得到你的apk的副本(很容易在一个根深蒂固的手机上获得)。好消息是,您可以混淆代码中的重要部分,这使得逆向工程变得更加困难。 Proguard是Android提供的一种工具,可让您在打包过程中对代码进行混淆处理(更难以阅读)。但是,为了防止重要的代码被读取,您需要将所有易受攻击的方法或变量移动到不是Activity
,Service
或BroadcastReceiver
的文件。有关完整的事实,请阅读文档。
为了保护您的应用程序非法复制和分发,Google Play提供了一些licensing options。不幸的是,LVL并不完全安全。有关如何破解它(Google Play前)的详细操作方法,请访问here。
最后,上面链接的文章以及众多的学术文章和在线博客描述了一旦源代码(甚至是混淆的源代码)泄漏,一旦只能添加一些自己的恶意代码,就会退出该应用程序,并在Android Market上发布。这里的好消息是,除非您的android许可证密钥密码很容易被猜出,或者如果您将其泄露给其他人,攻击者将无法使用相同的许可证密钥发布应用程序。这不仅可以保护您免受责难,还会使恶意应用程序无法访问您的原始应用程序中可用的数据(如SharedPreferences
)。
总而言之,要真正从盗版保护应用程序的最佳方式是正确配置和使用Proguard的,谷歌播放执照,并签署你一个非常安全的许可证密钥最终的apk。
哇..伟大的信息和非常详细的答案。我喜欢它被一篇论文证明的事实。我会按照你的建议。我仍然鼓励人们分享他们的经验 – Snake 2012-03-26 15:49:32
我想指出,你不需要根植设备来获得APK副本。 'ADB pull com.example.coolappdude'。另外,Proguard是一个Java字节码混淆器。制造商ProGuard有一个非自由程序DexGuard,它是一个Dalvik字节码混淆器。可能考虑一个或另一个取决于你的偏执级别。 – CatShoes 2013-02-07 19:48:46
Dan Galpin在I/O 2011上做了一次精彩的演讲,探讨如何让LVL更安全:http://www.youtube.com/watch?v=TnSNCXR9fbY – keyboardr 2013-03-01 02:57:32
看看谷歌播放许可框架。
http://developer.android.com/guide/market/licensing/index.html
这是你最好的选择。
谷歌Play许可是基于网络的服务,可以让一个 应用程序查询一个值得信赖的谷歌Play授权服务器,以确定 的应用是否被许可为当前设备用户。许可服务基于Google Play服务器的能力来确定给定用户是否被许可使用给定应用程序的 。如果用户是该应用程序的记录购买者,则Google Play会认为该用户是被许可的。
我听说谷歌授权(通过应用程序签名)确实毫无价值。有自动工具,下载的应用程序,删除许可证,并签署一个新的用户点击一下(我在一个论坛上阅读它)..我将明确使用许可证,但我需要另一层防线.. – Snake 2012-03-26 00:35:26
应用程序签名机制已弃用。新的许可证制度是基于网络的,并且非常稳固。 – 2012-03-26 00:39:58
如果应用程序被盗版,您可以添加篡改检查与混淆结合以提醒用户/禁用功能/向服务器报告。我使用DexGuard进行硬化混淆处理。
篡改检查
- 安装的应用程序 - 使用软件包管理器确保安装程序是播放/亚马逊的应用程序商店
- 模拟器检查 - 检查蛛丝马迹系统属性的应用程序正在对模拟器运行的开发之外可能表明攻击/篡改
- 调试的检查 - 使用软件包管理器检查调试的标志,这应该是关闭的产品,以便能够表明攻击/篡改
- 签名证书检查 - 使用软件包管理器校验应用程序与开发人员证书签名(如果有人拆包和重新包装/辞职的应用程序,这将被打破)
更新:因为回答这个问题,我已经写上篡改检测更detailed article。
- 1. 保护我的Android(英特尔XDK)应用免受盗版
- 2. 如何保护我的API服务免受api-keys盗版
- 3. 如何保护我的应用程序,打击盗版
- 4. Android Market如何保护我的应用程序免受分发?
- 5. 保护软件免受海盗侵害
- 6. 保护网站免遭盗版
- 7. 如何保护日志免受应用程序崩溃?
- 8. 在开发过程中保护源代码免受盗窃
- 9. 如何保护我的.NET程序集免受反编译?
- 10. 如何保护以盗版方式销售的网络应用程序?
- 11. 如何为Android免费应用程序提供版权保护
- 12. 有没有办法保护自己免受Mercurial身份盗用?
- 13. 如何保护Android应用程序免遭盗窃和应用程序本身的修改?
- 14. 受密码保护的应用程序
- 15. 保护知识产权免受海外承包商盗窃
- 16. 保护Android应用程序免受网络嗅探
- 17. 保护我的应用程序免受外部API更改的方法
- 18. 如何保护密钥免受其他应用程序的侵害?
- 19. 如何使用iXGuard保护iOS应用程序免受攻击者攻击
- 20. 保护Android手机免遭盗窃
- 21. 盗链保护
- 22. 盗链保护
- 23. 阻止盗版应用程序的人
- 24. 如何在不使用数据库的情况下保护C#中的Windows应用程序免受盗版侵害?
- 25. 如何保护PHP免受背负?
- 26. 如何保护WebRTC免受MitM攻击?
- 27. 我们如何保护我们的WordPress免受黑客侵害?
- 28. 我如何保护我的应用程序,并保护我的Sqlite数据库在应用程序
- 29. 保护window.opener免受更改
- 30. 如何保护我免受AWS Lambda滥用?
你将不得不使用一堆技术,你仍然无法完全阻止它。在开始时使用'google play licensing'和'code obfuscation'。我会建议检查流行的盗版网站,并要求点击托管商将文件下载,但我不确定他们是如何处理这些问题的。它会很快回到其他任何地方,这几乎是绝望的。 – stefan 2012-03-26 00:42:31
我会建议使用C++构建应用程序的核心部分,并使用android NDK,您将使用网络来验证有效的买家。 – 2013-06-18 10:23:38