2016-03-27 75 views
5

这听起来可疑,但我需要去混淆我自己的应用程序。前段时间我发布我的应用程序,我用Proguard混淆了。不幸的是,我没有保存该版本的应用程序,并改变了很多代码。如何使用Proguard生成的mapping.txt去混淆jar文件?

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

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

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

+0

这可能是不可能的。编译应用程序后,代码已被编译器“模糊处理”。您再次使用Proguard对应用程序进行混淆的情况,即双重混淆。可能有一种方法可以对应用程序进行反混淆和反编译。我建议你在下次编码之前保存和备份任何东西。 – mob41

+0

这对您现在没有帮助,但为了避免将来出现此类问题,请使用**版本控制系统**(VCS)。 – F43nd1r

回答

8

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

我为自己做了一个,花了大概一天时间才能可靠地工作。

编辑:这不是完美的,但它非常接近。 LinkScreenshot of the GUI给它一个程序化的jar文件,映射,它会重命名所有可以找到的。有几个问题,但只是看它应该完成这项工作的来源。只需将它生成的jar(FileName +“-Re.jar”)转储到反编译器,如Luyten/JD-GUI。此外,文件输入只能通过按钮进行更改。文本框仅用于视觉反馈/确认。

编辑2:修正了在给定的jar中不存在映射中的类输入时发生的NPE。

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

编辑4:将已编译的jar上传到github (发布,在压缩文件中它在映射util中),增加了对多种映射类型的支持。

+0

这看起来像我想要的东西,不幸的是,当我按下“撤消”按钮时,我得到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。在me.lpk.mapping.MappingGen.mappingsFromProguard(MappingGen.java:49) at me.lpk.ReProguard $ 4.actionPerformed(ReProguard.java:123) .. 。* – user2758776

+0

看起来像扔了,因为它尝试加载的类名不存在于罐子里。重新编写了ProguardLoader类来检查这一点。如果该类不存在于该jar中,则该类的映射将被忽略。重新加载修复工具。 –

+0

感谢您的努力,但我仍然得到NPE: java.lang.NullPointerException at me.lpk.mapping.MappedClass。 (MappedClass.java:38) 在me.lpk.mapping.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) 在me.lpk.ReProguard $ 4.actionPerformed(ReProguard.java:123) 也许你可以与我分享你的工具的源代码?谢谢! – user2758776

2

我建议根据above answer以及Enigma的建议使用proguard工具。针对您的问题的解决方案不是非常简单,您需要使用可用工具的组合来解决问题。

+0

除了Proguard之外,我还使它适用于Engima映射。但是我没有编译Enigma GUI激活的版本。源是在回购:但是:https://github.com/LPK-Matt/SkidSuite2/blob/master/SkidReob/src/me/lpk/gui/windows/mapping/WindowEnigma.java –

+0

@DankVader该网址给404 – beppe9000

+0

@ beppe9000具体文件在提交中被删除,但回购仍然存在。 https://github.com/LPK-Matt/SkidSuite2/releases自从发表评论以来,它已被编译并置于发布版本中。 –