Android how to read obfuscated Java code after getting through reverse engineering
使用诸如dex2jar和JD-GUI之类的工具后,我从APK中获得了Java类。众所周知,Java字节码可以转换回Java类,因此大多数情况下会通过某些工具(例如在Android中使用ProGuard)对其进行优化和混淆,以使其免受其他程序的影响。因此,我得到的是经过混淆的代码,我想使其无错误,易读且易于理解,以便我可以出于自己的目的对其进行进一步修改(仅供个人使用,并不意味着要侵犯任何版权)。因此,任何帮助(例如建议,工具和帮助材料)都可以使这些混淆的代码更接近于开发人员编写的内容,或者使其无错误且易于理解,这将对我有很大帮助。目前,我的重点是反转ProGuard所使用的混淆技术,例如当我尝试对自己的项目进行反向工程时发现:
-
通过使用反向工程生成的
R 文件进行匹配,可以使用ID更改int 资源值。 -
if /else 条件大部分转换为while(true) 以及某些continue 和break 。 - 内部班级大多分拆成单独的文件
因此,用于上述方式的任何其他技术和帮助材料(可以描述如何正确逆转它们)将非常有帮助。
没有一种神奇的工具可以将混淆的代码重构为可构建的项目。最有可能的是,您将无法对APK进行反编译和反混淆,从而使其成为干净且可维护的代码。这是一件好事。
有一些工具比dex2jar和jd-gui更好。其中之一是apk-deguard,它声称可以逆转混淆过程。从他们的关于页面:
DeGuard
DeGuard (http://www.apk-deguard.com) is a novel system for statistical
deobfuscation of Android APKs, developed at the Software Reliability
Lab, ETH Zurich, the same group which developed the widely used JSNice
system. Similarly to JSNice, DeGuard is based on powerful
probabilistic graphical models learned from thousands of open source
programs. Using these models, DeGuard recovers important information
in Android APKs, including method and class names as well as
third-party libraries. DeGuard can reveal string decoders and classes
that handle sensitive data in Android malware.
您应该使用Google拥有的Enjarify,而不是dex2jar。另外,apktool可以很好地反编译APK的资源,而dex2jar和enjarify无法处理该资源。
其他工具包括jadx,procyon,fernflower,show-java,smali / baksmali。
您将需要一个好的IDE进行重构。 JEB看起来是重构的好工具。这是主要由Android安全研究人员使用的付费工具。
这应该有助于:
DeObfuscator
逆向工程是一项艰巨的任务(我想说是微妙的艺术),尤其是对于混淆的代码而言,它会碰到很多东西,您可以做的是专注于一些特殊功能,这似乎很明显,并从那里开始,重命名和重构类,好的IDE也可能对您有很大帮助(我个人建议:NetBeans)。