Как декомпилировать весь файл Jar? [закрытый]

кто-нибудь знает о бесплатном декомпиляторе, который может декомпилировать весь файл Jar вместо одного класса? У меня проблема с подклассами, такими как name$1.имя класса$2.имя класса.класс!--1-->

9 ответов


2009: JavaDecompiler может сделать хорошую работу с jar: начиная с 0.2.5, отображаются все файлы в файлах JAR.

http://java.decompiler.free.fr/sites/default/screenshots/screenshot1.png

см. также вопрос "как" декомпилировать " файлы классов 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, при правильной настройке может выполнять сравнение на лету между любым архивным файлом, включая jars. Стоит попробовать.

преимущество всего вышесказанного заключается в том, что мне не нужно держать какой-либо другой внешний инструмент, который загромождает мою рабочую среду. Все, что мне когда-либо понадобится из одного из этих файлов, может быть обработано внутри моей 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 и выше. К сожалению, у него все еще могут быть некоторые икоты, где Джад обычно преуспевает.


что-то типа:

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=
  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-файл.


вы извлекаете его, а затем используете jad против реж.


Примечание: это решение работает только для пользователей Mac и * nix.

Я также пытался найти Джада, но безуспешно. Моим быстрым решением было загрузить MacJad который содержит jad. После его загрузки вы можете найти jad в [где-вы-скачали-macjad] / MacJAD / содержание / ресурсы / jad.