単一のクラスではなく、Jar ファイル全体を逆コンパイルできる無料の逆コンパイラを知っている人はいますか? name$1.class name$2.class name.class のようなサブクラスに問題があります
8 に答える
2009: JavaDecompilerは jar でうまく機能します: 0.2.5 以降、JAR ファイル内のすべてのファイルが表示されます。
「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 に逆コンパイルする方法も参照してください。
まず第一に、すべての Java アーカイブ ファイル ( .jar
/ .war
/etc...) は、基本的にはすべて.zip
、いくつかのマニフェストとメタデータが追加された単なるファンシーファイルであることを覚えておく価値があります。
第二に、この問題に取り組むために、私は個人的にこの問題をすべてのレベルで処理するいくつかのツールを使用しています。
- ファイルを逆コンパイルするために IDE で作業中のJad + Jadclips
.class
- 私のお気に入りの圧縮ツールであるWinRARは、ネイティブで Java アーカイブをサポートしています (最初の段落を参照してください)。
- Beyond Compareは、私のお気に入りの差分ツールで、正しく構成されていれば、
jar
s. 試してみる価値があります。
前述のすべての利点は、作業環境を乱雑にする他の外部ツールを保持する必要がないことです。これらのファイルの 1 つから必要になるものはすべて、IDE 内で処理したり、他のファイルとネイティブに比較したりできます。
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
逆コンパイルされたファイルを含めることになるはずです。
私は、(苛立たしいことに) " 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
使用します。-d
注: このソリューションは、Mac および *nix ユーザーに対してのみ機能します。
私もジャドを見つけようとしましたが、うまくいきませんでした。私の簡単な解決策は、jadを含む MacJad をダウンロードすることでした。ダウンロードしたら、[where-you-downloaded-macjad]/MacJAD/Contents/Resources/jad で jad を見つけることができます。
それを抽出してから、ディレクトリに対してjadを使用します。