你问的问题应该是:我怎样才能让饼干活起来?如果您通过 Playstore 分发应用程序,请查看这个问题 https://stackoverflow.com/questions/9915393/android-app-piracy-prevention,尽管它被标记为偏离主题,但答案和链接很有价值。
我认为,您的应用程序不是免费的(因为 .csv 似乎很有价值),因此请更深入地研究许可验证库并这篇博文 http://android-developers.blogspot.de/2010/09/securing-android-lvl-applications.html,特别是。零件技术:将许可证验证卸载到受信任的服务器 and 技术:使您的应用程序防篡改.
简而言之,据我了解,您的做法如下:
- 使用 RSA 公钥将您的 apk 上传到 google。
- 在您的应用程序中实现 LVL 请求(无需加密和without应用程序包内的私钥!**
- 通过安全 SSL 连接将 lvl 响应转发到您的服务器
- 在您的可信服务器上,使用您的 RSA 私钥,您应该检查博客文章中提到的内容,尤其是。将请求的用户 ID 放入数据库并计算来自单个 UID 的请求,如果它远高于平均值,则可以假设该用户 ID 是用于无效请求的用户 ID。
- 如果支票有任何问题,请勿回复
- 如果一切正常,请回复您的 csv。仅将您的数据保留在 Android 客户端上,如果您希望用户在没有连接的情况下使用 csv,否则任何 root 设备或破解的 apk 都可以获得访问权限并重新分发 csv - 更好:仅将 csv 的请求部分(例如行)推送到用户
see 这个问题 https://stackoverflow.com/questions/8559213/android-in-app-billing-verification查找重播攻击以及如何防止它,不让任何人重播提供 csv 或其部分内容(例如每个 UID 的序列号)的调用。
尽可能地混淆你的代码以使工作变得更加困难,就像 @VinceFR 已经提到的那样。
仍然存在一些攻击,例如以下两种:
- root 设备并检查存储的 csv,而不是重新分发 - 这就是为什么您不想将 csv 存储在客户端上
- 对您的应用程序进行逆向工程,记录他们获得的完整 csv 并使用它,可能删除 LVL 代码以免费使用您的应用程序 - 这就是为什么您仍然必须混淆并仅发送请求的部分
甚至校验和,使用PackageManager
、apk签名等pp不会100%做到这一点。
但事实上,在客户端首次下载 csv(或任何其他数据)之前,您的数据都会保存。它甚至可以保存,只要您可以信任您的用户(例如内部应用程序或其他东西的有限用户信任圈,那么您应该更喜欢 androids vpn 选项来访问该文件)。之后,破解您的应用程序并获取有价值的 csv 只是时间和精力的问题 - 问题是,是否值得任何人投入这些时间。
额外的链接提供有关 LVL 的更多信息和链接,作者:Justin Case http://www.androidpolice.com/2010/08/24/response-to-a-response-more-on-googles-android-licensing-service/.
仔细阅读所有这些链接并记住:使其变得足够困难以使其变得毫无价值并不能阻止那些从成功中获取价值的破解者 - 我的意思是,破解某种“防破解”软件是对于某些人来说,即使没有报酬或其他什么,也更有价值。
PS: see 这个答案在另一个 https://stackoverflow.com/a/2384177/2188682问题,对于“防破解”软件 - 但即使是网站及其数据也可以不断复制,如果值得的话。