単一のクラスではなくJarファイル全体を逆コンパイルできる無料の逆コンパイラを知っている人はいますか?name $ 1.class name $ 2.class name.classのようなサブクラスに問題があります
単一のクラスではなくJarファイル全体を逆コンパイルできる無料の逆コンパイラを知っている人はいますか?name $ 1.class name $ 2.class name.classのようなサブクラスに問題があります
回答:
2009:JavaDecompilerはjarを使用して適切に機能します。0.2.5以降、JARファイル内のすべてのファイルが表示されます。
「Javaクラスファイルを「逆コンパイル」する方法」という質問も参照してください。。
ただし、JD-Eclipseは2009年後半以降変更されていないようです(変更点を参照)。
そのため、最新のEclipse(3.8、4.2以降)との統合には問題がある可能性があります。
JD-Coreは積極的にメンテナンスされています。
どちらも(SOユーザー)Emmanuel Dupuyの素晴らしい作品の結果です。
2018:言及したAより近代的なオプション、コメントででデビッド・ケネディアラウージョ:
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のアイデアも参照してください。
まず第一に、すべてのJavaアーカイブファイル(.jar
/ .war
/ etc ...)はすべて、基本的に単なるファンシー.zip
ファイルであり、いくつかのマニフェストとメタデータが追加されていることを覚えておく価値があります。
次に、この問題に取り組むために、私はすべてのレベルでこの問題を処理するいくつかのツールを個人的に使用します。
.class
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
あなたの逆コンパイルされたファイルを含むことになるでしょう。
javap
この基本的なループ構造内で使用しており、それは私のために働いています。
私は(イライラする)「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
使用する準備ができて、入力するだけで、ソースのあるフォルダーdj your.jar
がyour.jar.src
表示されます。-d
デバッグモードのオプションを使用します。
それを抽出してから、dirに対してjadを使用します。