最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【整理】把jar包转换为java源代码的java反编译器的整理和对比

Java crifan 1582浏览 0评论
折腾:
【已解决】用基于Procyon的Luyten反编译安卓jar包得到java源码
和后来的:
【未解决】小花生中如何得到getToken的计算逻辑以便得到正确的md5值可以正常请求接口
发现,对于从jar包(查看源码并)转换java源码的准确率,jd-gui,没有luyten好。
现在去整理和总结。顺带也去:
Procyon vs jd-gui
decompilation – What is a good Java decompiler and deobfuscator? – Reverse Engineering Stack Exchange
很多人,包括Procyon的作者Mike Strobel,都提到了,jd-gui转换出的源码中,有些会有不少的error错误
-》而此处我自己是换用基于Procyon的Luyten,即可正确解析
-》而Procyon的wiki
mstrobel / Procyon / wiki / Java Decompiler — Bitbucket
中也解释了这个情况。
然后又参考:
Looking for a Java decompiler : java
5 Best Java Decompilers for converting programs into source code
【总结】
结论:
关于java反编译器:
  • 作用:从jar文件=jar包,可以转换出java源代码
    • 供在GUI图形界面工具中查看或导出java源代码文件
  • 常用工具
    • 网上目前提到的最多的要数 JD-GUI
    • 经过自己使用的经验来说
      • JD-GUI不太够用:有些文件会出错
      • 目前自己用:代码转换不出错的Luyten
        • 其是基于命令行工具Procyon的
    • 以后有空
      • (万一遇到Procyon解析都出错的话)
      • 再去试试:CFR
而网上还有其他很多类似的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源代码
【整理】java反编译器对比:JD-GUI,CFR,Procyon,Jadx
摘录总结:
  • 以后尽量用Jadx
    • 直接用jadx打开未加固的apk
      • 即可查看和导出java源代码
    • 打开(用FDex2从加固了的apk导出的)dex文件
      • 查看和导出java源代码
  • 其次考虑用Procyon(或基于Procyon的GUI工具Luyten)
    • 查看代码:用基于Procyon的Luyten去查看代码
    • 导出代码:用Procyon去从jar反编译转换出java源代码

转载请注明:在路上 » 【整理】把jar包转换为java源代码的java反编译器的整理和对比

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
82 queries in 0.167 seconds, using 22.13MB memory