Как декомпилировать весь файл Jar? [закрытый]
кто-нибудь знает о бесплатном декомпиляторе, который может декомпилировать весь файл Jar вместо одного класса? У меня проблема с подклассами, такими как name$1.имя класса$2.имя класса.класс!--1-->
9 ответов
2009: JavaDecompiler может сделать хорошую работу с jar: начиная с 0.2.5, отображаются все файлы в файлах JAR.
см. также вопрос "как" декомпилировать " файлы классов Java?".
JD-Eclipse, похоже, не изменился с конца 2009 года (см. изменения).
Таким образом, его интеграция с последним Eclipse (3.8, 4.2+) может быть проблематичной.
JD-Core активно поддерживается.
оба являются результатом фантастической работы (SO user) Эммануэль Дюпюи.
2018: более современный вариант, упомянутый в комментариях by Дэвид Кеннеди Араужо:
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 (.jar
/.war
/ etc...) are все в основном просто фантазии.zip
файлы, С несколькими добавленными манифестами и метаданными.
во-вторых, для решения этой проблемы я лично использую несколько инструментов, которые обрабатывают эту проблему на всех уровнях:
-
Джад + Jadclipse при работе в IDE для декомпиляции
.class
файлы - в WinRAR, мой любимый инструмент сжатия изначально поддерживает архивы Java (опять же, см. Первый абзац).
-
Вне Конкуренции, мой любимый инструмент diff, при правильной настройке может выполнять сравнение на лету между любым архивным файлом, включая
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
содержащий декомпилированные файлы.
У меня был разумный успех с инструментом под названием (разочаровывающе)"JD: Java Decompiler".
Я нашел его лучше, чем большинство декомпиляторы при работе с классами, скомпилированные для Java 5 и выше. К сожалению, у него все еще могут быть некоторые икоты, где Джад обычно преуспевает.
вставить следующий текст в 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=
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: some.jar [-d]"
echo " where: some.jar is the target to decompile"
echo " use -d for debug mode"
}
# check params
if [ -n "" ]
then
if [ "" == "-d" ]; then
debug=true
set -x
fi
work
else
usage
fi
- chmod +x decomplie.jar.sh / / исполняемый файл
- ln-s ./decomplie.сосуд.s / usr/bin / dj
готов к использованию, просто введите dj your.jar
и вы получите your.jar.src
папка с источниками. Использовать -d
опция для режима отладки.
файл jar - это просто zip-файл с расширением jar. Вы должны иметь возможность распаковать (winzip) банку так же, как zip-файл.
Примечание: это решение работает только для пользователей Mac и * nix.
Я также пытался найти Джада, но безуспешно. Моим быстрым решением было загрузить MacJad который содержит jad. После его загрузки вы можете найти jad в [где-вы-скачали-macjad] / MacJAD / содержание / ресурсы / jad.