Herkes bir Jar dosyası yerine tek bir sınıf yerine tüm decompile edebilen ücretsiz bir decompiler biliyor mu? $ 1.class name $ 2.class name.class gibi alt sınıflarla ilgili bir sorunum var
Herkes bir Jar dosyası yerine tek bir sınıf yerine tüm decompile edebilen ücretsiz bir decompiler biliyor mu? $ 1.class name $ 2.class name.class gibi alt sınıflarla ilgili bir sorunum var
Yanıtlar:
2009: JavaDecompiler bir kavanoz ile iyi bir iş yapabilir : 0.2.5'ten beri, JAR dosyalarındaki tüm dosyalar görüntülenir.
Ayrıca "Java sınıfı dosyalarını nasıl" kodabilirim "sorusuna da bakın. .
JD-Eclipse, 2009 sonlarından bu yana değişmiş gibi görünmüyor (bkz. Değişiklikler ).
Bu nedenle, en son Eclipse (3.8, 4.2+) ile entegrasyonu sorunlu olabilir.
JD-Core aktif olarak korunur.
Her ikisi de (SO kullanıcısı) Emmanuel Dupuy'un fantastik çalışmasının sonucudur .
2018: belirtilen bir daha modern bir seçenek, yorumlardaki tarafından David Kennedy Araujo :
JetBrains / intellij-toplum / plugins / java-Decompiler / motor
Fernflower, Java için ve muhtemelen genel olarak yüksek seviyeli bir programlama dili için çalışan ilk analitik dekomserdir.
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\
Ayrıca bkz . IntelliJ IDEA ile çalışan bir komut için java dosyalarına intellij ideali nasıl ayrılır .
Her şeyden önce, tüm Java arşiv dosyalarının ( .jar
/ .war
/ vb ...) temelde sadece.zip
birkaç manifest ve meta veri içeren süslü dosyalar olduğunu hatırlamakta fayda var.
İkincisi, bu sorunu çözmek için kişisel olarak bu sorunu tüm seviyelerde ele alan birkaç araç kullanıyorum:
.class
dosyalarıayrıştırmak için IDE'de çalışırkenjar
sdahil olmak üzere herhangi bir arşiv dosyası arasında anında karşılaştırmalar yapabilir. Denemeye değer.Yukarıda belirtilenlerin avantajı, çalışma ortamımı tıkayan başka bir harici alete ihtiyaç duymamamdır. Bu dosyalardan birinden ihtiyaç duyacağım her şey IDE'mde ele alınabilir veya diğer dosyalarla doğal olarak farklılaştırılabilir.
Hem bash kabuğuna hem de yeşim taşına sahipseniz:
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
Bununla küçük, küçük bir bit olabilir, ancak reklamı az çok çalışmalıdır. $JAR.tmp
Sonuç olarak, decompiled dosyalarınızı içermelisiniz .
javap
Bu temel döngü yapısı içinde kullanıyorum ve bu benim için çalışıyor.
(Sinir bozucu) " JD: Java Decompiler " adlı bir araç ile makul bir başarı elde ettim .
Java 5 ve üstü için derlenmiş sınıflarla uğraşırken çoğu dekomperi daha iyi buldum . Ne yazık ki, JAD'nin normal olarak başarılı olacağı bazı hıçkırıklar olabilir.
Gibi bir şey:
jar -xf foo.jar && find . -iname "*.class" | xargs /opt/local/bin/jad -r
olabilir?
Aşağıdakileri decompile.jar.sh dosyasına ekleyin
# 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
Kullanıma hazır, sadece yazın dj your.jar
ve your.jar.src
kaynaklarla klasör alacaksınız . -d
Hata ayıklama modu seçeneğini kullanın .
Çıkarın ve sonra direk karşı jad kullanın.