你问的问题应该是:我能让饼干活得有多难?如果您通过 Playstore 分发您的应用程序,请查看这个问题,即使它被标记为偏离主题,答案和链接也很有价值。
我假设,您的应用程序不是免费的(因为 .csv 似乎很有价值),因此请更深入地了解许可验证库和这篇博文,尤其是。部分技术:将许可证验证卸载到受信任的服务器和技术:使您的应用程序防篡改。
简而言之,据我了解,您的方式如下:
- 使用您的 RSA 公钥将您的 apk 上传到谷歌。
- 在您的应用程序中实现 LVL 请求(无需加密,也无需在应用程序包中使用私钥!**
- 通过安全的 SSL 连接将 lvl 响应转发到您的服务器
- 在您受信任的服务器上,使用您的 RSA 私钥,您应该检查博文中提到的内容,尤其是。将请求的用户 ID 放入数据库并计算来自单个 UID 的请求,如果它远高于平均水平,您可以假设此用户 ID 是用于无效请求的用户 ID。
- 如果支票有任何问题,请不要回复
- 如果一切正常,请回复您的 csv。仅将您的数据保留在 android 客户端上,如果您希望用户在没有连接的情况下使用 csv,否则任何有根设备或破解的 apk 都可以访问并重新分发 csv - 更好:只将 csv 的请求部分(例如行)推送到用户
请参阅此问题并查找重放攻击以及如何防止它,以不让任何人重放提供 csv 或其部分的调用(例如每个 UID 的序列号)。
尽可能地混淆你的代码,使工作更加困难,就像已经提到的@VinceFR。
还有一些攻击,比如这两个:
- 根设备并检查存储的 csv,而不是重新分发 - 这就是您不想将 csv 存储在客户端上的原因
- 对您的应用程序进行逆向工程,记录他们获得并使用它的希望完整的 csv,可能会删除 LVL 代码以免费使用您的应用程序 - 这就是为什么您仍然必须混淆并仅发送请求的部分
即使校验和、使用PackageManager
、apk 签名等 pp 也不会 100% 做到这一点。
但事实上,在客户端第一次下载 csv(或任何其他数据)之前,您的数据将被保存。它甚至可以保存,只要您可以信任您的用户(例如,对于内部应用程序或其他东西的有限用户信任圈,那么您应该更喜欢 androids vpn 选项来访问文件)。在那之后,破解您的应用程序并获取有价值的 csv 只是一个时间和精力的问题——问题是,是否值得任何人投入这些时间。
Justin Case 提供的附加链接,提供有关 LVL 的更多信息和链接。
好好阅读所有这些链接并记住:让它变得无价值的难度无法阻止那些从成功中获取价值的破解者——我的意思是,破解某种“防破解”软件是对某些人来说更有价值,即使没有得到报酬或其他东西。
PS:对于“防破解”软件,请参阅另一个问题的答案-但如果值得的话,即使是网站及其数据也可以不断复制。