Android如何在完成逆向工程后阅读混淆的Java代码

时间:2012-08-27 17:10:47

标签: java android obfuscation deobfuscation

在使用dex2jar和JD-GUI等工具后,我从APK获得了Java类。因为每个人都知道Java字节代码可以转换回Java类,因此大多数情况下它通过一些工具进行优化和混淆(比如在Android的情况下使用ProGuard),以使其与其他人保持安全。所以我得到的是混淆代码,我想让它没有错误,可读,易懂,以便我可以为了我自己的目的进一步修改它(仅供我个人使用,我并不是要侵犯任何版权)。因此,任何帮助,即建议,工具,帮助材料使这个混淆的代码更接近开发人员编写的代码,或使其无错误和可理解将帮助我很多。目前我的重点是逆转ProGuard使用的混淆技术,就像我在自己的项目上尝试逆向工程一样,发现:

    通过使用逆向工程生成的int文件进行匹配,可以使用ID更改
  • R资源值。
  • if / else条件主要转换为while(true)和部分continue s和break s。
  • 内部课程主要分为单独的文件

因此,任何其他技术和帮助材料的上述方法可以描述如何正确扭转它们将是非常有帮助的。

3 个答案:

答案 0 :(得分:8)

没有一个神奇的工具可以将混淆的代码重构为可构建的项目。最有可能的是,您无法对APK进行反编译和反模糊处理,使其成为干净且可维护的代码。这是一件好事。

有些工具比dex2jar和jd-gui更好。其中一个是apk-deguard,声称可以扭转混淆过程。从他们的关于页面:

  

<强> DeGuard

     

DeGuard(http://www.apk-deguard.com)是一种新颖的统计系统   Android APK的反混淆,由软件可靠性开发   实验室,苏黎世联邦理工学院,与开发广泛使用的JSNice的同一小组   系统。与JSNice类似,DeGuard基于强大的功能   从数千个开源中学习的概率图形模型   程式。使用这些模型,DeGuard可以恢复重要信息   在Android APK中,包括方法和类名以及   第三方图书馆。 DeGuard可以显示字符串解码器和类   处理Android恶意软件中的敏感数据。

您应该使用Google拥有的Enjarify,而不是dex2jar。此外,apktool适用于反编译APK的资源,而这些资源不是由dex2jar和enjarify处理的。

其他工具包括jadxprocyonfernflowershow-javasmali/baksmali

您需要一个好的IDE来进行重构。 JEB看起来像是一个很好的重构工具。这是一款主要由Android安全研究人员使用的付费工具。

答案 1 :(得分:3)

这应该有所帮助: DeObfuscator

答案 2 :(得分:1)

逆向工程是一项艰巨的任务(我会说是微妙的艺术),主要是命中和错过,特别是对于混淆代码,你可以做的是专注于一些特殊的功能,这似乎很明显,从那里开始,重命名和重构类,也是一个好的IDE可能对你有很大帮助(我的个人建议:NetBeans)。