【问题标题】:How to decompile .class and jar file using Storyyeller/Krakatau如何使用 Storyyeller/Krakatau 反编译 .class 和 jar 文件
【发布时间】:2015-02-05 01:19:18
【问题描述】:

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

=== 反编译===

用法:

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

PATH: 要搜索的目录、jar 或 zip 文件的可选列表 类。 Krakatau 将尝试自动检测并添加 jar 包含核心语言类,但你可以禁用它 -nauto 选项。对于多个罐子,您可以传递一个分号 单独的 jar 列表或多次传递 -path 选项。

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

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

-skip:出现错误继续。如果在反编译特定文件时发生错误 方法,回溯将在源文件中打印为 cmets。如果 在类级别反编译时发生错误,不会有源文件 发出并在控制台打印一条错误消息。

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

但我总是出错。我不懂上面的语法。

请解释一下这个语法

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

用一个简单的例子。

【问题讨论】:

标签: java python-2.7 decompiler


【解决方案1】:

使用 Krakatau 进行反编译最简单和正常的方法是反编译一个 jar。

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

pypy -O Krakatau\decompile.py -skip -out temp Luyten.jar

根据您是否安装了 JDK 以及安装位置,您可能需要在路径参数中显式传递 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 的好处是自动拥有正确的目录结构。

【讨论】:

  • 感谢您的解决方案,感谢您花费宝贵的时间 Antimony。
  • 这个反编译器不好。它不会产生正确的输出
  • @NirangaSandaruwan 有什么问题?缺乏补充?对于未混淆的代码,你可能会更喜欢 Procyon,但如果你想反编译混淆的代码,Krakatau 是迄今为止最好的。
  • 问题是一些方法没有得到正确的反编译。但是 Procyon 可以。其他的事情是一些方法不能很好地用 Procyon 反编译得到用 Krakatau 反编译。我对此很高兴。但是反编译的代码有很多中断, while,label statements.so 有时很难理解代码。如果它们可以进一步解析。这是有价值的反编译器。
  • 嗯,我确实在努力改进它,但问题是输出必须至少与输入一样复杂。因此,如果您尝试反编译的代码已经很复杂,那么您在这方面无能为力。
猜你喜欢
  • 2020-08-22
  • 1970-01-01
  • 2012-06-13
  • 2011-03-06
  • 1970-01-01
  • 2013-03-03
  • 1970-01-01
  • 2015-07-23
相关资源
最近更新 更多