当前位置: 首页 > 软件库 > 开发工具 > 反编译工具 >

JD-Core

Java 反编译开发包
授权协议 GPLv3
开发语言 Java
所属分类 开发工具、 反编译工具
软件类型 开源软件
地区 不详
投 递 者 邢博学
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

JD-Core 是 Java 反编译开发包,基于这个开发包有一个 GUI 的项目 jd-gui 和一个 Eclipse 插件项目 jd-eclipse

编译 jd-core 的方法:

> git clone https://github.com/java-decompiler/jd-core.git
> cd jd-core
> ./gradlew build

使用方法:

  1. 实现 jd.core.loader.Loader 接口,
  2. 实现 jd.core.printer.Printer 接口,
  3. 调用方法 "decompile(loader, printer, internalTypeName);"

 示例代码:

  1. Implement the Loader interface:
Loader loader = new Loader() {
    @Override
    public byte[] load(String internalName) throws LoaderException {
        InputStream is = this.getClass().getResourceAsStream("/" + internalName + ".class");

        if (is == null) {
            return null;
        } else {
            try (InputStream in=is; ByteArrayOutputStream out=new ByteArrayOutputStream()) {
                byte[] buffer = new byte[1024];
                int read = in.read(buffer);

                while (read > 0) {
                    out.write(buffer, 0, read);
                    read = in.read(buffer);
                }

                return out.toByteArray();
            } catch (IOException e) {
                throw new LoaderException(e);
            }
        }
    }

    @Override
    public boolean canLoad(String internalName) {
        return this.getClass().getResource("/" + internalName + ".class") != null;
    }
};
  1. Implement the Printer interface
Printer printer = new Printer() {
    protected static final String TAB = "  ";
    protected static final String NEWLINE = "\n";

    protected int indentationCount = 0;
    protected StringBuilder sb = new StringBuilder();

    @Override public String toString() { return sb.toString(); }

    @Override public void start(int maxLineNumber, int majorVersion, int minorVersion) {}
    @Override public void end() {}

    @Override public void printText(String text) { sb.append(text); }
    @Override public void printNumericConstant(String constant) { sb.append(constant); }
    @Override public void printStringConstant(String constant, String ownerInternalName) { sb.append(constant); }
    @Override public void printKeyword(String keyword) { sb.append(keyword); }
    @Override public void printDeclaration(int flags, String internalTypeName, String name, String descriptor) { sb.append(name); }
    @Override public void printReference(int flags, String internalTypeName, String name, String descriptor, String ownerInternalName) { sb.append(name); }

    @Override public void indent() { this.indentationCount++; }
    @Override public void unindent() { if (this.indentationCount > 0) this.indentationCount--; }

    @Override public void startLine(int lineNumber) { for (int i=0; i<indentationCount; i++) sb.append(TAB); }
    @Override public void endLine() { sb.append(NEWLINE); }
    @Override public void extraLine(int count) { while (count-- > 0) sb.append(NEWLINE); }

    @Override public void startMarker(int type) {}
    @Override public void endMarker(int type) {}
};
  1. And call the method "decompile(loader, printer, internalTypeName);"
ClassFileToJavaSourceDecompiler decompiler = new ClassFileToJavaSourceDecompiler();

decompiler.decompile(loader, printer, "path/to/YourClass");

String source = printer.toString();
  • java的反编译工具有那么几款,使用最广泛的当属jd-gui,速度快,功能强大。网上介绍反编译工具的文章也不少,但几乎没有介绍如何与程序对接的。 jd-gui的设计相当精妙,核心就是jd-core,但核心几乎没有人提到,开源的jd-gui也没有找到core的踪影。 我是这么获的jd-core的,在官网下载jd-gui-1.4.0.jar,删除其他只保留jd文件夹,里面就是core了。 反编译jd-

  • JD-Core 是 Java 反编译开发包,基于这个开发包有一个 GUI 的项目 jd-gui 和一个 Eclipse 插件项目 jd-eclipse 。 编译 jd-core 的方法: > git clone https://github.com/java-decompiler/jd-core.git > cd jd-core > ./gradlew build 使用方法: 调用方法 "deco

  • JD-Core-java is a thin-wrapper for the Java Decompiler. This is hack around the IntelliJ IDE plugin. It fakes the interfaces of the IDE, and provides access to JD-Core. Since the Author of JD-Core is

  • 为什么要反编译: 我不熟悉git的某些操作,不知情的情况下把原项目文件删除了,突然想起我还有项目打成的jar包。打开后看到源文件都在,只是文件都是.class后缀,于是想到了反编译来恢复文件。 解决方案: 具体操作我参考的失忆老幺的网页操作,虽然没成功,但是还是帮了很大的忙。 Usage: java -jar fernflower.jar [-<option>=<value>]* [<source

 相关资料
  • 问题内容: 我已经反编译了一个jar(可能出于调试目的)并希望重新编译它。 我已经使用了JAD和JD,并且由于goto指令而无法编译 例如 有没有简单的方法(或任何方法)来重新编译它?(除了手动重构和删除的外) 问题答案: 不,没有。在您的情况下,JD和JAD都无法正确地反编译类文件。“ goto”语句是有关实际程序流程的提示。 您可以直接与Java Decompiler团队联系,发送一个类文件,

  • 问题内容: 我正在寻找一个批处理反编译Java类的程序。我找到了JAD,但它不支持Java的某些新功能,该程序的好处是可以从命令行执行并自动生成* .java文件。 我还找到了JD-GUI。它支持Java的大多数功能,但是缺点是它不能执行批处理。您需要使用该程序打开类文件,然后单击“保存”。 有没有办法让JD-GUI像JAD一样进行批处理? 问题答案: 强烈要求对JD- GUI进行命令行反编译,但

  • 我从更新站点安装了JD-Eclipse,但我无法让它在Eclipse开普勒中工作。我在以前的Eclipse版本中做到了这一点,没有任何问题。 这里的问题是,当我转到Preferences>General>Editors>File associations时,*.Class文件的默认关联编辑器是“Class File Viewer(默认)(由'Java Class File'内容类型锁定)”。如果我

  • 问题内容: 您可以推荐用于Eclipse的Java反编译器吗?我的其他问题是,使用来自其他Java程序的反编译代码有什么限制?非法还是什么?我对许可证知之甚少。谢谢阅读。 问题答案: 我建议在Google上弹出一个JD Java反编译器。它真的很好。 至于限制,您必须阅读特定软件的许可,否则可能会写明禁止任何反编译方式。

  • 一面 日期:2023年07月14号 自我介绍。 项目介绍。 介绍一下前端发送请求到后端的过程。 哪些原因会造成前端请求失败? JVM 类加载过程。 String,StringBuffer 和 StringBuilder 区别。 介绍下项目里的测试工作。 对测试的理解。 测试方式有哪些?简单介绍一下。 接口测试是如何做的? 设计测试用例:购物车 为什么投测试开发岗? 手撕 两道简单 SQL 表结构:

  • 问题内容: 我正在尝试反编译 Java项目(.jar)文件,并且能够从其中获取.java文件。现在如何将其编译回来?我可以将.java文件作为单个文件添加到Netbeans。但是如何将其作为项目添加并编译呢?该项目是JavaFX项目。所以请帮我。 问题答案: 有很多方法可以实现此目的,但是我认为您不能像这样直接在框内(在本例中为开箱)将项目导入jar中。 我们可以使用最基本的技术(我承认有点脏),

  • 4.3投递 4.8笔试 4.18技术面 面试时间规定只有30min,问的八股不多(我觉得要么特别简单...要么有点偏...hhh) 面试官说看我技术比较强,就不问那么多了(啊???怎么看出来的??徒有其表的废物女研究生罢了)最后那段时间非常详细讲了一下部门业务 面试官超级和蔼可亲一直讲段子 面试体验感max #京东JDYoung实习生# #后端开发实习# #我的实习求职记录# #美团# #阿里#

  • 问题内容: 关闭。 此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow的主题。 6年前关闭。 改善这个问题 我已经上下搜索,但是找不到适用于Python 2.7 .pyc的反编译器。有人知道适用于Python 2.7的吗?谢谢 问题答案: 更新(2019-04-22)-听起来您现在想使用uncompyle6,而不是我最初提到的答案。 听