我正在尝试使用Storyyeller / Krakatau反编译器反编译文件。我已经下载了相关文件并将其放在一个文件夹中。我尝试使用命令提示符使用以下语法对文件进行反编译。
===反编译===
用法:
python Krakatau\decompile.py [-nauto] [-path PATH] [-out OUT] [-r] [-skip]
target
路径:要搜索的目录,jar或zipfiles的可选列表
Krakatau将尝试自动检测并添加
jar包含核心语言类,但你可以用它来禁用它
-nauto
选项。对于多个罐子,您可以传递分号
分隔的罐子列表或多次传递-path
选项。
OUT:要写入源文件的目录名称。默认为 当前目录。如果名称以.zip或.jar结尾,则输出将为a 而不是zip文件。
-r:反编译目录中找到的所有.class文件(递归)
-skip:继续出错。如果在反编译特定时发生错误 方法,回溯将作为注释打印在源文件中。如果 在类级别反编译时发生错误,没有源文件 发出并将错误消息打印到控制台。
target:要反编译的类名或jar名称。如果指定了jar,则全部
jar中的类将被反编译。如果指定了-r
,则应该这样做
是一个目录。
但我总是遇到错误。我不理解上面的语法。
请解释此语法
python Krakatau\decompile.py [-nauto] [-path PATH] [-out OUT] [-r] [-skip]
target
使用一个简单的例子。
答案 0 :(得分:4)
使用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
在这种情况下,目录必须与完全限定的类名完全匹配。一个常见的错误是尝试使用错误的根目录进行反编译。关于jar的好处是拥有正确的目录结构是自动的。