Кто-нибудь знает о бесплатном декомпиляторе, который может декомпилировать весь файл 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) Эммануэля Дюпюи .
2018: Более современный варианта, упомянутый в комментариях по Дэвиду Кеннеди Араужо :
JetBrains / IntelliJ-сообщество / плагины / Java-декомпилятор / двигатель
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\
Смотрите также Как декомпилировать в java-файлы intellij idea для команды, работающей с недавним IntelliJ IDEA.
Прежде всего, стоит помнить, что все архивные файлы Java ( .jar
/ .war
/ etc ...) - это в основном просто модные .zip
файлы с несколькими добавленными манифестами и метаданными.
Во-вторых, для решения этой проблемы я лично использую несколько инструментов, которые решают эту проблему на всех уровнях:
.class
файловjar
s. Стоит попробовать.Преимущество всего вышеперечисленного заключается в том, что мне не нужно держать какой-либо другой внешний инструмент, который загромождает мою рабочую среду. Все, что мне когда-либо понадобится из одного из этих файлов, может быть обработано внутри моей 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
опцию для режима отладки.
Вы извлекаете его, а затем используете JAD против DIR.
Примечание. Это решение работает только для пользователей Mac и * nix.
Я также попытался найти Jad без удачи. Моим быстрым решением было загрузить MacJad , содержащий jad. Как только вы загрузили его, вы можете найти jad в [где-вы-скачали-macjad] / MacJAD / Contents / Resources / jad.