如何防止我的android应用程序被破解?(抗LVL)

如何防止我的android应用程序被破解?(抗LVL),android,Android,最近,我发现我的应用程序被一些反lvl工具破解了 该工具可以轻松破解我的应用程序中的“Android许可证验证库”,并生成一个新的破解apk 它还提供了许多函数挂钩,以防止开发人员检测到其应用程序被破解。例如获取文件长度函数或检查签名函数 有人知道如何打败它吗 谢谢。一般来说,没有办法在野外完全保护您的应用程序。用户可能在他/她的设备上拥有root访问权限,然后所有赌注都被取消。你可以引入一些手动的“破解”,但如果你的应用是一个引人注目的应用,你无论如何都会被破解 这只是你和饼干之间的权力游戏。

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

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

它还提供了许多函数挂钩,以防止开发人员检测到其应用程序被破解。例如获取文件长度函数或检查签名函数

有人知道如何打败它吗


谢谢。

一般来说,没有办法在野外完全保护您的应用程序。用户可能在他/她的设备上拥有root访问权限,然后所有赌注都被取消。你可以引入一些手动的“破解”,但如果你的应用是一个引人注目的应用,你无论如何都会被破解


这只是你和饼干之间的权力游戏。如果你与黑客的斗争过于激烈,你也可能会伤害你的公平用户。

我还建议你从谷歌I/O 2011中查看以下内容:

摘自:

我想这可能对你很有用

躲避海盗和阻止吸血鬼

编辑演示文稿备注:

一些基本要点

  • 修改LVL
  • 实现LVL防篡改
  • 使用模糊处理
  • 使用反射

我不喜欢“去检查谷歌I/o演示文稿”的标准回答,因为上面提到的许多技术都被antilvl打败了。在我看来,这是一个糟糕的建议,因为诸如反射和crc检查等主题已经失败了

在进一步研究antilvl时,我发现了antilvl的svn主干,在readme.txt文件中有一个非常描述性的提示。据作者所说,这是为了防止反利瓦尔运动,被我打扮得漂漂亮亮的。这将根据smaliHook.java的存在情况返回true/false,antilvl使用它来钩住正常的包检查。这只是第一道防线,因为类名可以通过antilvl的修改版本来更改,而antilvl可能在某处流传。这是一个很好的第一次检查,但是,因为它将击败平均脚本小子

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

是的,你说得对。但是这种通用的破解工具可以让任何人在没有任何背景知识的情况下破解任何android应用程序。这对开发者来说是非常有害的。如果你阅读了AntiLVL网站的第一段,你会得到提示——使用自定义的抗回火方法,而这些方法在该工具中没有被考虑。我甚至不确定在Java中这是否可能,以及开销是多少(c/c++更容易做到这一点),但无论如何,这需要一些时间、技能,而且此功能中的错误会让您的用户相当沮丧。很好的一点是,这是额外工作和用户体验之间的一个非常公平的折衷。它不会影响性能,也没有理由会意外地将授权用户检测为未授权。这不再有效。可能他们改了名字。你能想出当前的文件名吗?lvl现在随机生成它。不可能猜出名称-每次运行antilvl都是不同的。如果我为某个应用付费,我更愿意为该应用提供的功能和价值付费,而不是为可能使该应用变慢的偏执保护计划付费,一般来说,这对我作为一个用户来说是敌意的,因为这会对我的意图做出负面的假设。我不愿意为程序员花在实施保护方案上的时间买单——我更愿意花时间和精力改进应用程序、更好的技术支持等。发布比以前版本更好的新版本——这是防止破解的最佳“保护”。让你的应用程序不要在根设备上运行。并且,检查设备上是否安装了不需要的防lvl工具。