315

単一のクラスではなく、Jar ファイル全体を逆コンパイルできる無料の逆コンパイラを知っている人はいますか? name$1.class name$2.class name.class のようなサブクラスに問題があります

4

8 に答える 8

337

2009: JavaDecompilerは jar でうまく機能します: 0.2.5 以降、JAR ファイル内のすべてのファイルが表示されます。

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

「Java クラス ファイルを「逆コンパイル」するにはどうすればよいですか? という質問も参照してください。.

ただし、JD-Eclipse は 2009 年後半から変更されていないようです (「変更点」を参照)。
そのため、最新の Eclipse (3.8、4.2+) との統合には問題がある可能性があります。

JD-Core は積極的にメンテナンスされています。

どちらも (SO ユーザー) Emmanuel Dupuyの素晴らしい仕事の結果です。


2018: David Kennedy Araujoのコメントで言及されている、より現代的なオプション:

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 に逆コンパイルする方法も参照してください。

于 2009-03-15T02:21:34.233 に答える
40

まず第一に、すべての Java アーカイブ ファイル ( .jar/ .war/etc...) は、基本的にはすべて.zip、いくつかのマニフェストとメタデータが追加された単なるファンシーファイルであることを覚えておく価値があります。

第二に、この問題に取り組むために、私は個人的にこの問題をすべてのレベルで処理するいくつかのツールを使用しています。

  • ファイルを逆コンパイルするために IDE で作業中のJad + Jadclips.class
  • 私のお気に入りの圧縮ツールであるWinRARは、ネイティブで Java アーカイブをサポートしています (最初の段落を参照してください)。
  • Beyond Compareは、私のお気に入りの差分ツールで、正しく構成されていれば、jars. 試してみる価値があります。

前述のすべての利点は、作業環境を乱雑にする他の外部ツールを保持する必要がないことです。これらのファイルの 1 つから必要になるものはすべて、IDE 内で処理したり、他のファイルとネイティブに比較したりできます。

于 2009-03-15T09:00:33.947 に答える
36

bash シェルと 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逆コンパイルされたファイルを含めることになるはずです。

于 2009-03-15T04:40:06.290 に答える
28

私は、(苛立たしいことに) " JD: Java Decompiler " という名前のツールでそれなりの成功を収めました。

Java 5以降用にコンパイルされたクラスを扱う場合、ほとんどの逆コンパイラよりも優れていることがわかりました。残念ながら、JAD が正常に機能する場合でも問題が発生する可能性があります。

于 2009-03-27T11:37:51.023 に答える
12

何かのようなもの:

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

多分?

于 2010-02-05T16:47:18.240 に答える
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
  • chmod +x decomplie.jar.sh //実行可能ファイル
  • ln -s ./decomplie.jar.s /usr/bin/dj

すぐに使用できます。入力するだけで、ソースを含むフォルダーdj your.jarが取得されます。デバッグ モードのオプションをyour.jar.src使用します。-d

于 2011-04-12T09:37:54.290 に答える
1

注: このソリューションは、Mac および *nix ユーザーに対してのみ機能します。

私もジャドを見つけようとしましたが、うまくいきませんでした。私の簡単な解決策は、jadを含む MacJad をダウンロードすることでした。ダウンロードしたら、[where-you-downloaded-macjad]/MacJAD/Contents/Resources/jad で jad を見つけることができます。

于 2009-03-27T11:31:03.147 に答える
0

それを抽出してから、ディレクトリに対してjadを使用します。

于 2009-03-15T02:14:01.100 に答える