어떻게 전체 JAR 파일을 디컴파일 할 수 있죠?
단일 클래스가 아닌 전체 Jar 파일을 디컴파일할 수 있는 무료 디컴파일러를 아는 사람?name$1.classname$2.classname.class와 같은 서브클래스에 문제가 있습니다.
2009: JavaDecompiler는 jar를 잘 사용할 수 있습니다.0.2.5 이후로는 JAR 파일 내의 모든 파일이 표시됩니다.
"Java 클래스 파일을 "컴파일 해제"하려면 어떻게 해야 합니까?" 질문을 참조하십시오.
JD-Eclipse는 2009년 후반 이후 변경되지 않은 것으로 보인다(변경 참조).
이클립스(3.8, 4.2+)
JD-Core는 액티브하게 유지되고 있습니다.
둘 다 (SO 사용자) Emanuel Dupuy의 환상적인 작업의 결과입니다.
2018년: David Kennedy Araujo의 코멘트에서 언급된 보다 현대적인 옵션:
JetBrains/intelij-community/플러그인/java-decompiler/엔진
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 files intellij idea로 디컴파일하는 방법을 참조하십시오.
2022 업데이트:Florian Wendelborn은 코멘트에서 제안합니다.
아카이브파일(Java, Java, Java(Java))은가 있습니다.jar
/.war
/etc...)는 기본적으로 모두 고급.zip
파일이며, 몇 개의 매니페스트와 메타데이터가 추가되었습니다.
둘째, 이 문제에 대처하기 위해 개인적으로 모든 수준에서 이 문제를 다루는 여러 도구를 사용합니다.
- IDE에서 디컴파일을 위해 작업하는 동안 Jad + Jadclipse
.class
삭제 - 좋아하는 압축 툴인 WinRAR은 기본적으로 Java 아카이브를 지원합니다(첫 번째 단락 참조).
- Beyond Compare(비교 제외)는 제가 좋아하는 diff 툴입니다.올바르게 구성되면 다음과 같은 아카이브 파일을 즉시 비교할 수 있습니다.
jar
해 볼 가 있습니다. 시도해 볼 만합니다.
이 모든 것의 장점은 작업 환경을 어지럽히는 다른 외부 도구를 들 필요가 없다는 것입니다.이 파일들 중 하나에서 필요한 것은 모두 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 이상용으로 컴파일된 클래스를 다룰 때 대부분의 디컴파일러보다 낫다는 것을 알게 되었습니다.안타깝게도 JAD가 정상적으로 성공할 수 있는 부분에서는 여전히 딸꾹질이 발생할 수 있습니다.
예를 들어 다음과 같습니다.
jar -xf foo.jar && find . -iname "*.class" | xargs /opt/local/bin/jad -r
아마도요?
다음 내용을 decompile.jar에 삽입합니다.쉿
# 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
- chmod +x decomplie.jar.sh //설정 가능
- ln - s . / decomplie . jar . s / usr / bin / decomplie
바로 사용할 수 있습니다. 입력만 하면 됩니다.dj your.jar
그리고 당신은 얻을 것이다your.jar.src
원본이 있는 폴더입니다.사용하다-d
옵션을 지정합니다.
참고: 이 솔루션은 Mac 및 *nix 사용자만 사용할 수 있습니다.
나도 Jad를 찾으려고 했지만 운이 없었어.저의 빠른 해결책은 jad가 포함된 MacJad를 다운로드하는 것이었습니다.다운로드 후 [where-you-downloaded-macjad]/MacJAD/Contents/Resources/jad에서 jad를 찾을 수 있습니다.
추출한 다음 dir에 jad를 사용합니다.
언급URL : https://stackoverflow.com/questions/647116/how-to-decompile-a-whole-jar-file
'source' 카테고리의 다른 글
게터나 세터는 디자인이 좋지 않은가요?모순된 조언이 표시됨 (0) | 2022.08.15 |
---|---|
v-for, 클릭된 목록 항목을 여는 방법 (0) | 2022.08.15 |
왜 내 배열이 아닌 옵저버가 있는 거죠? (0) | 2022.08.15 |
Java 8 코드를 Java 7 JVM에서 실행하도록 컴파일할 수 있습니까? (0) | 2022.08.15 |
Java에서 사용자 지정 이벤트 생성 (0) | 2022.08.15 |