【问题标题】:How to deobfuscate jar file using mapping.txt generated by Proguard?如何使用 Proguard 生成的 mapping.txt 对 jar 文件进行去混淆处理?
【发布时间】:2016-07-14 17:34:27
【问题描述】:

这听起来很可疑,但我需要对我自己的应用进行去混淆处理。前段时间我发布了我用 Proguard 混淆的应用程序。不幸的是,我没有保存该版本的应用程序并更改了很多代码。

现在我需要那个旧版本的代码。 我还有 Proguard 生成的 mapping.txt 文件。

我已经将classes.dex文件转换为jar(使用dex2jar工具),现在我需要根据mapping.txt去混淆它。有什么工具可以帮助我吗?也许是 Proguard 本身?

UPD。我需要一个可以自动重命名所有类、函数等的工具,所以我不必手动操作。谢谢

【问题讨论】:

  • 这可能是不可能的。编译应用程序后,代码已经被编译器“混淆”了。您再次使用 Proguard 混淆应用程序的情况,即双重混淆。可能有一种方法可以对应用程序进行反混淆和反编译。我建议您在下次编码之前保存和备份任何内容。
  • 这对您现在没有帮助,但为了防止将来出现此类问题,请使用 版本控制系统 (VCS)。

标签: java android proguard deobfuscation


【解决方案1】:

如果您有映射,那么您可以获取每个类、字段和方法名称。您可以使用java-asm(字节码修改库)重新映射类和成员名称。大部分工作将是更新成员描述符。

我为自己做了一个,花了大约一天的时间让它可靠地工作。

编辑:它并不完美,但非常接近。 Link 给它一个经过保护的 jar 文件,映射,它会重命名它可以找到的所有东西。有一些问题,但只是查看源它应该可以完成工作。只需将它生成的 jar (FileName + "-Re.jar") 转储到反编译器中,例如 Luyten/JD-GUI。此外,文件输入只能通过按钮进行更改。文本框仅用于视觉反馈/确认。

编辑 2:修复了在给定 jar 中不存在映射中的类条目时发生的 NPE。

编辑 3:修复了许多导致方法未重命名的问题。

编辑 4:将编译后的 jar 上传到 github(发布,在 zip 文件中它在映射工具中),添加了对多种映射类型的支持。

【讨论】:

  • 这看起来像我想要的东西,不幸的是当我按下“撤消”按钮时我得到 NPE:java.lang.NullPointerException at me.lpk.mapping.MappedClass.(MappedClass .java:38) 在 me.lpk.mapping.ProguardLoader.readClass(ProguardLoader.java:121) 在 me.lpk.mapping.ProguardLoader.read(ProguardLoader.java:61) 在 me.lpk.mapping.ProguardLoader.read( ProguardLoader.java:41) 在 me.lpk.mapping.MappingGen.mappingsFromProguard(MappingGen.java:49) 在 me.lpk.ReProguard$4.actionPerformed(ReProguard.java:123) ...
  • 看起来它抛出了那个,因为它尝试加载的类名在 jar 中不存在。重新设计了 ProguardLoader 类以检查这一点。如果 jar 中不存在该类,则该类的映射将被忽略。重新上传了带有修复程序的工具。
  • 感谢您的努力,但我仍然在 me.lpk.mapping.MappedClass.(MappedClass.java:38) 在 me.lpk.mapping 处得到 NPE: java.lang.NullPointerException .ProguardLoader.readClass(ProguardLoader.java:126) 在 me.lpk.mapping.ProguardLoader.read(ProguardLoader.java:61) 在 me.lpk.mapping.ProguardLoader.read(ProguardLoader.java:41) 在 me.lpk。 mapping.MappingGen.mappingsFromProguard(MappingGen.java:49) at me.lpk.ReProguard$4.actionPerformed(ReProguard.java:123) 也许你可以和我分享你的工具的源代码?谢谢!
  • 给你:github.com/LPK-Matt/SkidSuite2 我正在尝试重现 NPE,但我现在似乎无法弄清楚你的映射是如何触发它的。
  • 链接失效了,你改了github用户名了吗?
【解决方案2】:

我建议使用above answer 中建议的proguard 工具以及Enigma。您的问题的解决方案不是很简单,您需要使用可用工具的组合来解决它。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 2022-01-18
相关资源
最近更新 更多