我正在尝试反编译一些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/