我正在使用的应用程序被antiLVL自动破解(尽管我的应用程序中没有使用LVL)。
为了保护我的应用程序不受"一键盗版"的影响,我正在实施谷歌IO解释的篡改检测技术。
我尝试过用getPackageInfo()
和反射(invoke()
)检查签名,但AntiLVL能够在这两种情况下自动破解应用程序。
如何编写不会被当前版本的antiLVL(1.4.0)自动破解的代码?我的意思是,除了使用JNI。
附言:我不是在谈论一般的防止盗版。我只是想让盗版者手动挖掘代码,而不是使用自动破解器。
问题是,任何只用于检查应用程序有效性的API都可能被破坏,并替换为始终返回预期结果的版本。我还没有详细研究过Anti-LVL,但我可以想象它正在这样做,这就是为什么您尝试使用Dalvik的内置API验证代码失败的原因。
为了让它发挥作用,你必须自己做这项工作,只使用具有多种用途且不易被颠覆的API。
一种方法是计算你的.apk文件或其中的classes.dex文件的校验和,并根据一些外部资源(具有已知正确版本列表的在线服务器、第一次执行时下载到SD卡的文件等,.apk中未包含在classs.dex中的资源)对其进行验证,我相信这就是反LVL的工作原理。我自己还没有试过,但怀疑它应该有效。
的演示说明
一些基本关键点
- 修改LVL
- 机具LVL防篡改
- 使用模糊处理
- 添加反射
请注意,无论出于何种原因,我提供的链接末尾的#:r.page.X
都不会始终将您带到特定的幻灯片页码。如果没有,请记下并手动浏览。