Хтось знає про безкоштовний декомпілятор, який може декомпілювати весь файл Jar замість одного класу? У мене проблема з підкласами, такими як name $ 1.class name $ 2.class name.class
Хтось знає про безкоштовний декомпілятор, який може декомпілювати весь файл Jar замість одного класу? У мене проблема з підкласами, такими як name $ 1.class name $ 2.class name.class
Відповіді:
2009 рік: JavaDecompiler може добре виконати роботу з баночкою: з 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 для команди, що працює з недавнім IntelliJ IDEA.
Перш за все, варто пам’ятати, що всі файли архіву Java ( .jar
/ .war
/ тощо) - це в основному просто фантазійні .zip
файли , з кількома доданими маніфестами та метаданими.
По-друге, для вирішення цієї проблеми я особисто використовую кілька інструментів, які вирішують цю проблему на всіх рівнях:
.class
файлівjar
s. Ну варто спробувати.Перевагою всього вищезазначеного є те, що мені не потрібно тримати жодного іншого зовнішнього інструменту, який забиває моє робоче середовище. Все, що мені колись знадобиться з одного з цих файлів, можна обробляти всередині моєї IDE або відрізнятись від інших файлів на самому собі.
Якщо у вас є як bash shell, так і 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
опцію для режиму налагодження.
Ви витягаєте його, а потім використовуєте джид проти реж.