【问题标题】:How to go from cracked APK to java code? 1-click tool cracked my app如何从破解的 APK 到 java 代码?一键工具破解了我的应用
【发布时间】:2012-06-05 20:35:48
【问题描述】:

所以我发布了我的 android 应用程序,我对其进行了保护,应用了 LVL,甚至更改了一些 LVL 代码,但是当然,我发现它在某个地方使用了一个名为 Lucky Patcher 的工具破解了。我不会问我如何才能防止像这样的一键式工具,因为我想没有单一的答案(除非你有一个想法并且可以指向我)。

我需要请你帮忙弄清楚我的代码是如何被破解的。我了解此工具需要 APK 文件并删除许可。现在鉴于此,我该如何获取这个 APK 文件并将其反向工程回 Java 文件,以查看该工具如何破解我的代码(所以我修复它)

请帮帮我 谢谢

【问题讨论】:

标签: android apk


【解决方案1】:

在 Proguard 之后,无法将您的代码反编译为人类可读的 Java。
虽然它使逆向工程过程更加困难,但聪明的逆向者并非不可能找出隐藏的算法。

至于工具,
使用android-apktool反编译成smali,提取所有编码的xml资源。
使用dex2jar将Dalvik翻译成jar 最后jd-gui 看到生成的反向java代码

【讨论】:

  • 谢谢。我有映射种子和from.proguard,我可以用它们去混淆它吗?
  • 这和“scorpiodawg”写的评论是一样的,只是他给了一个帖子的链接。请阅读帖子。
【解决方案2】:

有很多关于如何从 DEX 文件返回 Java 源代码的信息 here。另外,您是否查看过this blog post,它解决了许多保护您的来源的方法?

【讨论】:

  • 很公平,我不想重复其他两个帖子中很好地捕捉到的所有内容。
【解决方案3】:

盗版是一个大问题,我不认为任何平台或操作系统都可以完全保护它。

然而,谷歌已经制作了一些关于保护它的教程,例如: http://www.google.com/events/io/2011/sessions/evading-pirates-and-stopping-vampires-using-license-verification-library-in-app-billing-and-app-engine.html

还有: http://android-developers.blogspot.co.il/2010/09/securing-android-lvl-applications.html

我认为您也可以使用 C 而不是 java 设置一些复杂的障碍。

另外,正如谷歌建议的那样,考虑使用不同的方法:让核心功能免费,其余的可以通过应用内结算购买。您还可以添加广告和一项功能以通过应用内结算来删除它们。

【讨论】:

  • 谢谢,我知道,但正如我在帖子中所说,我想保护我的程序免受一键式工具的影响。我实现的是。从帖子中,我希望有一些例子可以更容易理解
  • 好吧,您可以尝试并反复试验,直到找到无法成功破解您的应用程序的方法。但是,应用程序的开发人员能够找到克服它的方法只是时间问题。
【解决方案4】:

我正在考虑这个问题,如果您真的想保护您的应用程序免受黑客攻击,似乎只有一种方法可以做到这一点。您可以实施各种奇特的方法来确保您的应用程序获得许可并按照谷歌文章中的描述付费,但只需要一个优秀的黑客反编译您的应用程序并找到代码所在的位置,然后将其注释掉或更改功能始终返回 true。

相反,实现在 jni/ndk 中使用所需的应用程序的某些部分,并检查该代码中的验证。它不必是非常复杂的代码,但您不能只放置函数之类的东西(例如 checkValidity),因为用户可以轻松地注释调用 ndk 的 java 调用。相反,您应该对您的 ndk 进行一些调用,以实际执行一些对您的应用程序运行而言并非微不足道的事情——用户不能只是注释掉或使用执行相同操作的已定义函数切换出来。从 ndk 代码中验证您的应用程序的完整性/许可,如果失败则终止应用程序或您需要执行的任何操作。

为了绕过这一点,黑客需要重新实现 ndk 代码或对其进行逆向工程。这应该更复杂,不值得。

这显然不是一个简单的解决方案,仍然不能保证您的应用程序永远不会被黑客入侵,但它应该比其他方法更难破解..

【讨论】:

  • 太棒了。谢谢你的回答。我真的很喜欢阅读它,我认为这是一个很好的方式。通常一键式程序会更改来自谷歌的标准 LVL 库,所以我想我需要更改它以包含 JNi/NDK。你有一个例子/链接到一个教程如何在android中实现jni/ndk?谢谢
  • 如果您遵循这些指南,通过一键式程序无法删除 LVL 可能并不太难。然而,很难阻止一个对代码非常了解的优秀黑客能够通过几个小时的计算手动删除许可证验证码。 .. 您可以随时尝试看看您是否可以在发布到市场之前使用它们反转您自己的代码。
【解决方案5】:

我个人认为,如果使用得当,混淆 {Proguard, Dexguard} 和原生 {.so} 是非常有效的方法。

它肯定会阻止经验不足的“玩家”,并且肯定会使即使是有经验的“玩家”的生活也变得复杂

不要简单地复制/粘贴 Google android 示例代码......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 2016-06-07
    • 1970-01-01
    • 2014-05-31
    • 2023-04-09
    相关资源
    最近更新 更多