Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Storyyeller/Krakatau反编译.class和jar文件_Java_Python 2.7_Decompiler - Fatal编程技术网

Java 如何使用Storyyeller/Krakatau反编译.class和jar文件

Java 如何使用Storyyeller/Krakatau反编译.class和jar文件,java,python-2.7,decompiler,Java,Python 2.7,Decompiler,我正在尝试使用Storyyeller/Krakatau反编译器反编译文件。我已经下载了相关文件并将其放入文件夹中。我尝试使用以下语法使用命令提示符反编译该文件 ==反编译=== 用法: python Krakatau\decompile.py [-nauto] [-path PATH] [-out OUT] [-r] [-skip] target 路径:要搜索的目录、JAR或ZipFile的可选列表 课堂上。Krakatau将尝试自动检测并添加 jar包含核心语言类,但您可以使用 -nauto

我正在尝试使用Storyyeller/Krakatau反编译器反编译文件。我已经下载了相关文件并将其放入文件夹中。我尝试使用以下语法使用命令提示符反编译该文件

==反编译===

用法:

python Krakatau\decompile.py [-nauto] [-path PATH] [-out OUT] [-r] [-skip]
target
路径:要搜索的目录、JAR或ZipFile的可选列表 课堂上。Krakatau将尝试自动检测并添加 jar包含核心语言类,但您可以使用
-nauto
选项。对于多个JAR,可以传递分号 单独的JAR列表或多次传递
-path
选项

OUT:要写入源文件的目录名。默认为 当前目录。如果名称以.zip或.jar结尾,则输出将是 而不是压缩文件

-r:反编译在目录目标中找到的所有.class文件(递归)

-跳过:在出现错误时继续。如果在反编译特定文件时发生错误 方法,则回溯将作为注释打印在源文件中。如果 在类级别反编译时发生错误,将不会生成任何源文件 发出并将向控制台打印一条错误消息

目标:要反编译的类名或jar名称。如果指定了jar,则所有 jar中的类将被反编译。如果指定了
-r
,则应 是一个目录

但是我总是会出错。我不理解上面的语法

请解释一下这个语法

python Krakatau\decompile.py [-nauto] [-path PATH] [-out OUT] [-r] [-skip]
target

使用一个简单的例子。

使用Krakatau反编译的最简单和正常的方法是反编译jar

假设您在当前目录中有一个名为
Luyten.jar
的jar文件,您希望反编译jar中的每个类并将其输出到目录
temp
。然后你会做一些类似的事情

pypy -O Krakatau\decompile.py -skip -out temp Luyten.jar
根据是否安装了JDK以及安装位置的不同,可能需要在path参数中显式传递jre的位置。比如说

pypy -O Krakatau\decompile.py -skip -out temp -path "C:\Program Files (x86)\Java\jre7\lib\rt.jar" Luyten.jar
如果要在jar中反编译特定类,可以将jar添加到路径并指定类名。如果您需要像上一个示例中那样指定rt.jar的路径,那么可以多次传递
-path
参数,或者用分号分隔一次。例如,要仅反编译com.beust.jcommander.FuzzyMap$IKey类

pypy -O Krakatau\decompile.py -skip -out temp -path Luyten.jar com.beust.jcommander.FuzzyMap$IKey
您还可以反编译jar之外的类文件,但这要烦人得多,因为您必须确保目录布局正确。您需要指定一个目录,该目录是相对于类所在位置的根目录

例如,假设您有一个位于./Foo/Bar/com/beust/jcommander/FuzzyMap$IKey.class的类文件

pypy -O Krakatau\decompile.py -skip -out temp -path Foo/Bar com.beust.jcommander.FuzzyMap$IKey

在这种情况下,目录必须与完全限定的类名完全匹配。一个常见的错误是尝试使用错误的根目录进行反编译。jars的好处是,拥有正确的目录结构是自动的。

使用此url下载反编译器感谢您的解决方案,感谢您花费宝贵的时间。此反编译器不是好的。它不会产生正确的结果output@NirangaSandaruwan有什么问题吗?缺乏再灌注?对于未混淆的代码,您可能更喜欢Procyon,但如果您试图反编译混淆的代码,Krakatau是目前为止最好的。问题是有些方法无法正确反编译。但是Procyon可以。另一个问题是有些方法不能很好地用Procyon反编译。我对此感到高兴。但是反编译的代码有很多漏洞,标签语句。因此,有时很难理解代码。如果它们可以进一步解析的话。这是一个有价值的反编译器。我确实做了一些改进,但问题是输出必须至少和输入一样复杂。因此,如果您试图反编译的代码已经很复杂,那么在这方面您就无能为力了。