我正在开发的应用程序被antiLVL自动破解(虽然我没有在我的应用程序中使用LVL)。
为了保护我的应用免受“一键盗版”的侵害,我正在实现 tampering detection techniques explained at Google IO .
我已尝试使用 getPackageInfo()
和反射(invoke()
)检查签名,但 AntiLVL 能够在这两种情况下自动破解应用程序。
如何编写不会被当前版本的antiLVL(1.4.0)自动破解的代码?我的意思是,除了使用 JNI。
PS:我不是在谈论一般性的防止盗版。我只是希望盗版者手动挖掘代码,而不是使用自动破解器。
最佳答案
问题是,任何仅用于检查应用程序有效性的 API 都可以被颠覆并替换为始终返回您期望的结果的版本。我没有详细查看 Anti-LVL,但我想它正在这样做,这就是为什么您为此目的使用 Dalvik 的内置 API 验证代码的尝试失败了。
为了让它发挥作用,您必须自己完成这项工作,仅使用具有多种用途且不易被破坏的 API。
一种方法是计算您的 .apk 文件或其中的 classes.dex 文件的校验和,并根据某些外部资源(具有已知正确版本列表的在线服务器、下载到 SD 的文件)对其进行验证卡在第一次执行等,.apk 文件中的资源不包含在 classes.dex 中)。这可以防止代码修改,我相信这就是反 LVL 的工作原理。我自己没有尝试过,但我怀疑它应该有效。
关于android - 我应该如何编码来抵抗 "one-click piracy"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9498015/