Czy ktoś zna darmowy dekompilator, który może dekompilować cały plik Jar zamiast pojedynczej klasy? Mam problem z podklasami, takimi jak nazwa $ 1. klasa nazwa $ 2. klasa nazwa.klasa
Czy ktoś zna darmowy dekompilator, który może dekompilować cały plik Jar zamiast pojedynczej klasy? Mam problem z podklasami, takimi jak nazwa $ 1. klasa nazwa $ 2. klasa nazwa.klasa
Odpowiedzi:
2009: JavaDecompiler może wykonać dobrą robotę ze słoikiem : od 0.2.5 Wyświetlane są wszystkie pliki w plikach JAR.
Zobacz także pytanie „Jak„ dekompilować ”pliki klas Java?” .
Wygląda na to, że JD-Eclipse nie zmieniło się od końca 2009 roku (patrz Zmiany ).
Dlatego jego integracja z najnowszym Eclipse (3.8, 4.2+) może być problematyczna.
JD-Core jest aktywnie utrzymywany.
Oba są wynikiem fantastycznej pracy Emmanuela Dupuya (użytkownika SO) .
2018: Bardziej nowoczesnym rozwiązaniem, o którym mowa w komentarzach przez Davida Kennedy'ego Araujo :
JetBrains / intellij-community / plugins / java-decompiler / engine
Fernflower jest pierwszym faktycznie działającym dekompilatorem analitycznym dla Javy i prawdopodobnie ogólnie dla języka programowania wysokiego poziomu.
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\
Zobacz także Jak dekompilować do plików java intellij pomysł na komendę współpracującą z najnowszą IntelliJ IDEA.
Przede wszystkim warto pamiętać, że wszystkie pliki archiwów Java ( .jar
/ .war
/ etc ...) są w zasadzie tylko fantazyjnymi .zip
plikami z kilkoma dodanymi manifestami i metadanymi.
Po drugie, aby rozwiązać ten problem, osobiście korzystam z kilku narzędzi, które radzą sobie z tym problemem na wszystkich poziomach:
.class
plikówjar
s. Warto spróbować.Zaletą wszystkich wyżej wymienionych jest to, że nie muszę trzymać żadnych innych narzędzi zewnętrznych, które zagracają moje środowisko pracy. Wszystko, czego kiedykolwiek będę potrzebować z jednego z tych plików, może być obsługiwane wewnątrz mojego IDE lub różnicowane z innymi plikami natywnie.
Jeśli zdarzy ci się mieć zarówno powłokę bash, jak i 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
Mogę być z tym trochę, ale powinno to działać mniej więcej tak, jak reklamowano. Powinieneś skończyć z $JAR.tmp
zawieraniem zdekompilowanych plików.
javap
tej podstawowej struktury pętli i działa ona dla mnie.
Miałem spory sukces z narzędziem o nazwie (frustrująco) „ JD: Java Decompiler ”.
Znalazłem to lepiej niż większość dekompilatorów w przypadku klas skompilowanych dla Java 5 i wyższych . Niestety, nadal może mieć pewne czkawki, w przypadku których JAD zwykle by odniósł sukces.
Coś jak:
jar -xf foo.jar && find . -iname "*.class" | xargs /opt/local/bin/jad -r
może?
Wstaw następujące polecenie do pliku 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
Gotowy do użycia, po prostu wpisz, dj your.jar
a otrzymasz your.jar.src
folder ze źródłami. Użyj -d
opcji dla trybu debugowania.
Uwaga: to rozwiązanie działa tylko dla użytkowników komputerów Mac i * nix.
Próbowałem też znaleźć Jad bez powodzenia. Moim szybkim rozwiązaniem było pobranie MacJada zawierającego jad. Po pobraniu możesz znaleźć jad w [where-you-download-macjad] / MacJAD / Contents / Resources / jad.