如何反编译整个Jar文件?

Sto*_*art 272 java jar decompiler

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

Von*_*onC 301

2009: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出色工作的结果.


2018:一个更现代的选项,提到在评论大卫·肯尼迪阿劳霍:

JetBrains公司/的IntelliJ社区/插件/ java的反编译/引擎

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\
Run Code Online (Sandbox Code Playgroud)

另请参阅如何使用最近的IntelliJ IDEA对使用最新IntelliJ IDEA的命令进行反编译.

  • fyi,java反编译器适用于windows,mac和linux. (5认同)
  • @AlexS很好:)下一步:版本控制(http://stackoverflow.com/questions/59561/what-tools-techniques-can-benefit-a-solo-developer)然后继续集成(http:// stackoverflow. COM /问题/ 130592 /是连续的,一体化重要-FOR-A-个人开发者) (4认同)
  • 使用Java Decompiler,您可以打开JAR文件并转到File,Save All Sources.它将所有类文件保存到java文件= D. (2认同)
  • 请记住它也会出错.我有一个带有Member变量的类,它将它移动到函数的参数,破坏了代码的效果.小心,它会得到你. (2认同)
  • JD 是一个很好的起点,但无法反编译复杂的代码。一个不错的选择是使用 https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine (2认同)

Yuv*_*dam 37

首先,值得记住的是,所有Java归档文件(.jar/ .war等等......)基本上都只是花哨的.zip文件,附加了一些清单和元数据.

其次,要解决这个问题,我个人会使用几种工具来处理所有级别的问题:

  • Jad + Jadclipse在IDE中工作以反编译.class文件
  • WinRAR,我最喜欢的压缩工具本身支持Java档案(再次参见第一段).
  • 超越比较,我最喜欢的差异工具,如果配置正确,可以在任何存档文件(包括jars)之间进行即时比较.值得一试.

上述所有优点是,我不需要持有任何其他外部工具,这会混乱我的工作环境.我将从其中一个文件中获得的所有内容都可以在我的IDE中处理,或者本机地与其他文件进行区分.


Chr*_*s R 36

如果你碰巧有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
Run Code Online (Sandbox Code Playgroud)

我可能只是微不足道,但它应该像广告中那样或多或少地起作用.您最终应该$JAR.tmp包含反编译的文件.


Ada*_*ter 25

我用一个名为(令人沮丧的)" JD:Java Decompiler " 的工具取得了一定的成功.

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


小智 10

就像是:

jar -xf foo.jar && find . -iname "*.class" | xargs /opt/local/bin/jad -r
Run Code Online (Sandbox Code Playgroud)

也许?


小智 5

将以下内容插入到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
Run Code Online (Sandbox Code Playgroud)
  • chmod + x decomplie.jar.sh //可执行文件
  • ln -s ./decomplie.jar.s/usr/bin/dj

准备好使用,只需键入dj your.jar,您将获得your.jar.src包含来源的文件夹.使用-d调试模式选项.