如何反编译整个Jar文件?

有谁知道一个免费的反编译器,可以反编译整个Jar文件,而不是一个类? 我有一个名称为$ 1.class name $ 2.class name.class的子类有问题

JavaDecompiler可以很好地处理jar:从0.2.5开始,将显示JAR文件中的所有文件。

http://java.decompiler.free.fr/sites/default/screenshots/screenshot1.png

另请参阅“如何”反编译“Java类文件”的问题 。

自2009年年底以来,JD-Eclipse似乎没有发生变化(请参阅更改 )。
所以它与最新的Eclipse(3.8,4.2+)的集成可能会有问题。

JD-Core被积极维护。

这两者都是(SO用户) Emmanuel Dupuy的出色工作的结果。

首先,值得记住的是,所有的Java归档文件( .jar / .war / etc …)都基本上只是花哨的.zip文件 ,还有一些额外的清单和元数据。

其次,为了解决这个问题,我个人使用了几个工具来处理这个问题:

  • Jad + Jadclipse在IDE中工作,用于反编译.class文件
  • WinRAR ,我最喜欢的压缩工具本地支持Java归档(再次参见第一段)。
  • 除了比较之外 ,如果configuration正确,我最喜欢的diff工具可以在任何存档文件(包括jar文件)之间进行即时比较。 值得一试。

所有上述的优点是,我不需要任何其他的外部工具,使我的工作环境混乱。 我将需要从这些文件中的任何一个都可以在我的IDE内处理,或与本地其他文件的差异。

如果你碰巧有一个bash shell和jad:

 JAR=(your jar file name) unzip -d $JAR.tmp $JAR pushd $JAR.tmp for f in `find . -name '*.class'`; do jad -d $(dirname $f) -s java -lnc $f done popd 

我可能是一个微小的,微小的,但它应该或多或less的广告。 你应该以包含反编译文件的$JAR.tmp结束。

我用一个名为(令人沮丧的)“ JD:Java Decompiler ”的工具取得了合理的成功。

在处理为Java 5和更高版本编译的类时,我发现它比大多数反编译器更好。 不幸的是,JAD通常会成功的话,仍然会有一些麻烦。

就像是:

 jar -xf foo.jar && find . -iname "*.class" | xargs /opt/local/bin/jad -r 

也许?

将以下内容插入到decompile.jar.sh中

 # Usage: decompile.jar.sh some.jar [-d] # clean target folders function clean_target { rm -rf $unjar $src $jad_log } # clean all debug stuff function clean_stuff { rm -rf $unjar $jad_log } # the main function function work { jar=$1 unjar=`basename $jar.unjar` src=`basename $jar.src` jad_log=jad.log clean_target unzip -q $jar -d $unjar jad -d $src -ff -r -lnc -o -s java $unjar/**/*.class > $jad_log 2>&1 if [ ! $debug ]; then clean_stuff fi if [ -d $src ] then echo "$jar has been decompiled to $src" else echo "Got some problems check output or run in debug mode" fi } function usage { echo "This script extract and decompile JAR file" echo "Usage: $0 some.jar [-d]" echo " where: some.jar is the target to decompile" echo " use -d for debug mode" } # check params if [ -n "$1" ] then if [ "$2" == "-d" ]; then debug=true set -x fi work $1 else usage fi 
  • chmod + x decomplie.jar.sh //可执行文件
  • ln -s ./decomplie.jar.s / usr / bin / dj

准备使用,只需键入dj your.jar ,你将得到你的your.jar.src文件夹的来源。 debugging模式使用-d选项。

你提取它,然后使用jad对dir。

jar文件只是一个jar扩展名的zip文件。 你应该能够像压缩文件一样解压(winzip)一个jar文件。

注意:此解决scheme仅适用于Mac和* nix用户。

我也试图find没有运气的杰德。 我的快速解决scheme是下载包含jad的MacJad 。 一旦你下载了它,你可以在[where-you-downloaded-macjad] / MacJAD / Contents / Resources / jad中findjad。