누구나 단일 클래스 대신 전체 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 파일의 모든 파일이 표시됩니다.
"자바 클래스 파일을"디 컴파일 "하는 방법" 도 참조하십시오. .
JD-Eclipse는 2009 년 말 이후로 변경되지 않은 것으로 보입니다 ( 변경 사항 참조 ).
따라서 최신 Eclipse (3.8, 4.2+)와의 통합에 문제가있을 수 있습니다.
JD-Core는 적극적으로 유지 관리됩니다.
둘 다 (SO 사용자) Emmanuel Dupuy 의 환상적인 작품의 결과입니다 .
2018 : David Kennedy Araujo 의 의견 에 언급 된 보다 현대적인 옵션 :
JetBrains / intellij-community / plugins / java-decompiler / engine
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\
최근 IntelliJ IDEA로 작업하는 명령에 대해서는 java 파일 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
디버그 모드에 옵션을 사용하십시오 .
압축을 풀고 dir에 대해 jad를 사용하십시오.