如何保护我的应用程序免受盗版

Sna*_*ake 36 security android piracy-prevention

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

Phi*_*hil 67

我发布了针对Android的免费反恶意软件应用程序,并确保没有人攻击它对其成功至关重要.Android Market上的应用程序最大的威胁包括泄露的源代码,复制/分发的付费应用程序以及重新键入.我解释下面的每一个和解决它们的方法.

首先,本文描述了如何通过解压缩已编译的代码和查看源代码来反向设计Android应用程序.您将无法阻止这种情况发生在您的应用中.期.有遗嘱的人可以随时查看您的源代码,如果他们获得了您的apk副本(在root手机上很容易获得).好消息是,您可以对代码中的重要部分进行模糊处理,从而使逆向工程变得更加困难.Proguard是Android提供的工具,可让您在打包过程中对代码进行模糊处理(更难以阅读).为了防止您的重要码被读取,但是,你需要将所有脆弱的方法或变量移动到一个文件,是不是Activity,ServiceBroadcastReceiver.有关完整事实,请阅读文档.

为了保护非法复制和分发您的应用程序,Google Play提供了一些许可选项.不幸的是,LVL也不是完全安全的.有关如何破解它(Google Play前)的详细信息,请点击此处.

最后,上面链接的论文,以及众多学术文章和在线博客描述了,一旦源代码(甚至混淆的源代码)被泄露,曾经只能添加一些自己的恶意代码,重新签名应用程序,以及在Android Market上发布.这里的好消息是,除非您的Android许可证密钥密码很容易猜到,或者您将其发给其他人,否则攻击者将无法使用相同的许可证密钥发布应用程序.这不仅可以保护您免受责备,还可以使恶意应用程序无法访问您的原始应用程序(例如SharedPreferences)中可用的数据.

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

  • 我想指出,您不需要root设备来获取APK的副本.`ADB pull com.example.coolappdude`.另外,Proguard是一个Java字节码混淆器.制造商ProGuard有一个非自由程序DexGuard,它是Dalvik字节码混淆器.根据你的偏执水平,可能会考虑其中一个. (6认同)
  • 哇..很棒的信息和非常详细的答案.我喜欢这篇论文证明了它的事实.我会按照你的建议.我仍然鼓励人们分享他们的经验 (4认同)

sco*_*yab 8

如果应用程序已被盗版,您可以添加篡改检查并结合模糊处理来提醒用户/禁用功能/向服务器报告.我使用DexGuard进行硬化混淆.

篡改检查

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

更新:自回答这个问题以来,我已经写了一篇关于篡改检测的更详细的文章.


Jef*_*man 6

看看google play许可框架.

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

这是你最好的选择.

谷歌Play许可是基于网络的服务,它允许应用程序查询一个值得信赖的谷歌Play许可服务器,以确定该应用是否被许可为当前设备的用户.许可服务基于Google Play许可服务器确定给定用户是否获得使用给定应用程序许可的功能.如果用户是应用程序的录制购买者,则Google Play会认为用户已获得许可.

  • 应用签名机制已弃用。新的许可系统基于网络并且非常可靠。 (2认同)