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

有帮助吗?

解决方案

2009: Java反编译器 可以用 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 用户)出色工作的结果 伊曼纽尔·杜普伊.


2018:提到了更现代的选择 在评论中 经过 大卫·肯尼迪·阿劳霍:

JetBrains/intellij-community/plugins/java-decompiler/engine

Fernflower 是第一个实际工作的 Java 分析反编译器,可能也适用于一般的高级编程语言。

java -jar fernflower.jar [-<option>=<value>]* [<source>]+ <destination>

java -jar fernflower.jar -hes=0 -hdc=0 c:\Temp\binary\ -e=c:\Java\rt.jar c:\Temp\source\

也可以看看 intellij idea如何反编译为java文件 适用于最新 IntelliJ IDEA 的命令。

其他提示

如果你碰巧有两个是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

我可能会关闭与一个微小的,点点,但它应该工作或多或少为标榜。您应该结束了与$JAR.tmp包含您的反编译的文件。

首先,值得记住的是所有 Java 存档文件 (.jar/.war/等...)是 基本上一切都只是幻想.zip 文件, ,添加了一些清单和元数据。

其次,为了解决这个问题,我个人使用了几种可以在各个层面上处理这个问题的工具:

  • 贾德 + 贾德克利普斯 在IDE中进行反编译时 .class 文件
  • 解压缩工具, ,我最喜欢的压缩工具本身支持 Java 存档(再次参见第一段)。
  • 无可比拟, ,我最喜欢的 diff 工具,如果配置正确,可以在任何存档文件之间进行即时比较,包括 jars。非常值得一试。

上述所有优点的优点是,我不需要持有任何其他外部工具来扰乱我的工作环境。我从这些文件之一中需要的所有内容都可以在我的 IDE 中处理,或者与其他文件本地进行比较。

我曾与一个名为(令人沮丧) “ JD:Java的反编译” 工具合理的成功。

我发现它比大多数反编译的编译为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 包含源的文件夹。使用 -d 调试模式选项。

一个jar文件是刚刚与罐子扩展的压缩文件。你应该能够解压缩(WinZip的)罐子就像一个zip文件。

您提取它,然后使用JAD靠在DIR。

注意:此解决方案仅适用于Mac和* nix用户

我也试过找亚德没有运气。我快速的解决办法是下载包含JAD MacJad 。一旦你下载了它,你可以找到在[地方,你下载的-macjad] / MacJAD /内容/资源/ JAD JAD。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top