反编译器

此处主要讨论java反编译器,更主要是的和安卓相关的java的反编译器,其中尤其涉及到dex转出jar包后的,如何从jar包反编译出java源代码的相关反编译器。

作用

  • jar文件=jar包转换出java源代码
    • 用于
      • 在GUI图形界面工具中查看java代码
      • 命令行工具中直接导出整个项目所有的java代码文件

总体结论

  • 网上目前提到的最多的要数:JD-GUI
  • 自己的经验和心得
    • JD-GUI不太够用:
      • 有些文件转换会出错
      • 且代码逻辑也不够清晰
    • 目前自己
      • 以后尽量用Jadx
        • 特点
          • 代码转换不仅不出错
          • 关键是代码逻辑更加清晰和易懂
            • 大大提升代码质量,使得代码更加易读
        • 用来
          • 直接用jadx打开未加固的apk
            • 即可查看和导出java源代码
          • 打开(用FDex2从加固了的apk导出的)dex文件
            • 查看和导出java源代码
      • 其次考虑用:Procyon
        • 或基于Procyon的GUI工具:Luyten
        • 特点
          • 代码转换不出错的
        • 用来
          • 查看代码:用基于Procyon的Luyten去查看代码
          • 导出代码:用Procyon去从jar反编译转换出java源代码

常用安卓相关java反编译器

网上有很多安卓相关的java反编译器,大致整理如下:

  • 比较老旧的
  • 相对新的工具
    • JD-GUI
      • 官网地址:
      • is an Decompiler, which comes with its own GUI. All is licensed under GPLv3. Like CFR the source for the decompiler itself, is not published, but you have the right to decompile the bionaries. And the binaries are under an OpenSource-License (CFR is under the MIT-license and JD Core is under the GPLv3 license)
      • 转换效果:经常会报错
        • 更准确的说是:对于LINQ/DLR的树编译器产生的代码,会不支持,会报错
          • -》解析后的代码中,包含/ Error / // Byte code 这种代码
    • CFR
      • 官网
      • 特点
        • 支持java 9/10/12等
      • by Lee Benfield is well on its way to becoming the premier Java Decompiler. Lee and I actually work for the same company and share regression tests. We're engaged in a friendly competition to see who can deliver a better decompiler. Based on his progress thus far, there's a very good chance he will win--at least on decompiling obfuscated code :).
    • Krakatau
      • https://github.com/Storyyeller/Krakatau
      • by Robert Grosse, written in Python, includes a robust verifier. It focuses on translating arbitrary bytecode into valid Java code, as opposed to reconstructing the original code.
    • Fernflower
    • Cavaj
    • Procyon
    • Jadx
      • 也支持从jar查看java代码
        • 和导出全部代码
          • 导出方式还有2种
            • 保存全部代码
            • 和以Gradle的方式导出源码
              • 如果打开的是apk文件
              • 则导出了dex对应的java源码外,还有assets等资源和其他文件
              • -》更加利于你得到更接近apk的原始代码的项目结构
        • 同时还支持直接打开apk
          • 查看apk中的各种文件
            • 包括java源代码

results matching ""

    No results matching ""