如何防止我的Android应用程序被破解?(AntiLVL)

9

最近,我发现我的应用程序被一些反破解工具破解了。

这个工具可以轻松地破解我的应用程序中的“Android许可验证库”,并生成一个新的破解后的apk。

它还提供了许多功能钩子,以防止开发人员检测他们的应用程序是否被破解。例如获取文件长度函数或检查签名函数...

有人知道如何打败它吗?

谢谢。


如果我为一个应用程序付费,我更喜欢支付它给我提供的功能和价值,而不是为了多疑的保护机制付费,这些机制可能会使应用程序变慢,并且总体上对我作为用户来说是敌对的,因为这样做对我的意图持负面假设。我愿意为程序员实施保护方案花费的时间付费——我更希望将时间和精力花在改进应用程序、提供更好的技术支持等方面。发布新版本比以前的版本更好-这是最好的防止破解的“保护”方式。 - ccpizza
使您的应用程序无法在已经rooted的设备上运行。并且,检查设备上是否安装了不需要的反LVL工具。 - user6796473
3个回答

10

我不喜欢“去查看Google I/O演示文稿”的标准回复,因为其中提到的许多技术都被Antilvl打败了。在我看来,这是一个糟糕的建议,因为一些话题(例如反射和CRC检查)已经无法应对。

在进一步研究Antilvl时,我发现了针对Antilvl的svn主干,并在readme.txt文件中找到了非常详细的提示。这里是作者介绍的预防Antilvl的方法,由我进行了整理。依据是否存在smaliHook.java,这将返回true/false,该文件用于钩取正常包检查。由于类名可能被修改成某个经过修改的Antilvl版本,这仅作为第一道防线。但这是一个很好的第一次检查,因为它可以打败平均水平的脚本小子。

protected boolean isAntiLVL(){
    try{
        Class.forName("smaliHook");
        return true;
    }catch(Exception e){}
    return false;
}

好的观点,这是在额外付出努力和用户体验之间非常公平的妥协。它不会影响性能,并且没有理由误将许可证用户检测为未经许可。 - Tom
这个不再起作用了。可能是它们改了名称。你能想出当前的文件名吗? - tobias
2
现在的级别是随机生成的。不可能猜到名称 - 每次运行 antilvl 都是不同的。 - marekdef

7

总的来说,在野外没有完全保护您的应用程序的方法。用户可能在他/她的设备上拥有root访问权限,那么所有的赌注都将无效。您可以引入一些手动的“hackarounds”,但如果您的应用程序是一个高调的应用程序,您仍然会被破解。

这只是您和黑客之间的权力游戏。如果您过于强硬地打击黑客,您可能也会伤害到公平的用户。


是的,你说得对。但这种通用的破解工具会让任何人在没有任何背景知识的情况下破解任何安卓应用程序。这对开发者来说非常有害。 - dong221
1
如果你阅读 AntiLVL 网站的第一段,你会得到提示 - 使用自定义的反篡改方法,这些方法在该工具中没有被考虑。我甚至不确定在 Java 中是否可能实现这一点以及开销是多少(c/c++ 对此更容易),但无论如何,这将需要一些时间、技能和功能中的错误会让你的用户相当沮丧。 - inazaruk

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接