java - jar 反编译器在某些 jar 上卡住(尝试过 Procyon、JD-cmd 和 CFR)

标签 java jar decompiler

我正在尝试反编译一些jar 文件。到目前为止我尝试过 Procyon、JD-cmd 和 CFR。

大多数 jar 都表现良好,但它们会卡住并且对某些 jar 没有任何作用。对于 Procyon、JD 和 CFR,这些 jar 是不同的。 (Procyon 在 2 号卡住,但 JD 在 4 号卡住,依此类推)

有趣的是,当我终止进程时,它们停止卡住并完成工作?

我在一个小型 java 程序中使用它们,如下所示:

ExecuteCommand cmd = new ExecuteCommand();

cmd.executeCommand("java -jar " + cfrPath + " " + jarPath + " --outputdir " + unzip);
cmd.executeCommand("java -jar " + jdPath + " -od " + unzip + " " + jarPath);    
cmd.executeCommand("java -jar " + procyonPath + " -jar " + jarPath + " -o " + unzip);

ExecuteCommand.java 类是:

public class ExecuteCommand {

    public void executeCommand(String command) {
         String s = null;

         try {

            Process p = Runtime.getRuntime().exec(command);

            BufferedReader stdInput = new BufferedReader(new 
                 InputStreamReader(p.getInputStream()));

            BufferedReader stdError = new BufferedReader(new 
                 InputStreamReader(p.getErrorStream()));

            while ((s = stdInput.readLine()) != null) {
                System.out.println(s);
            }

            while ((s = stdError.readLine()) != null) {
                System.out.println(s);
            }

        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }   
}

我做错了什么吗?提前致谢!

最佳答案

我收到了你寄来的 jar 。我能够成功反编译其中两个;第三个 jar (最小的一个)似乎是空的。

您使用的 Procyon 版本是什么?在我的工作站上,最新版本(v0.5.30)和当前的开发分支都可以反编译前两个 jar 而不会挂起,尽管某些类确实无法正确反编译。但请注意,两者都需要一段时间才能完全反编译:一个大约需要 48 秒,另一个在我的 2013 年 Core i7 上花了 2 分 30 秒。

我确实注意到,当存在与二元运算符相关的失控复杂性错误时,一些类可能需要很长时间才能使用版本的 Procyon 进行反编译。检查您的版本号,如果已过期,请获取最新版本。

顺便说一句,Procyon 对于通过 dex2jar 等工具运行的类表现不佳。即使在最好的情况下,您也应该对反编译器生成的任何代码保持适当的怀疑态度。对于已被 dex2jar 转换的代码,您应该对输出感到彻底怀疑。

关于java - jar 反编译器在某些 jar 上卡住(尝试过 Procyon、JD-cmd 和 CFR),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47416970/

相关文章:

java - 在运行时选择可运行 jar 中的主类

java - 这是什么引用?

java - Android 中如何获取时差?

java - 通过常量获取属性值——JSTL

java - 从 ActionListener 访问变量并将其传输到新方法

java - final 关键字并在 java 中将连接对象声明为 final

java - 为什么运行应用程序时 jar 文件的大小会增加?

java - 在 Linux Ubuntu 12.04 LTS 上安装 JavaMail 1.4.7

linux - 从剥离的 ELF 二进制文件估计编译器(GCC 或 LLVM-clang)版本

java反编译器,在intellij-idea的实际物理位置保存行号