source

어떻게 전체 JAR 파일을 디컴파일 할 수 있죠?

gigabyte 2022. 8. 15. 21:24
반응형

어떻게 전체 JAR 파일을 디컴파일 할 수 있죠?

단일 클래스가 아닌 전체 Jar 파일을 디컴파일할 수 있는 무료 디컴파일러를 아는 사람?name$1.classname$2.classname.class와 같은 서브클래스에 문제가 있습니다.

2009: JavaDecompiler는 jar를 잘 사용할 수 있습니다.0.2.5 이후로는 JAR 파일 내의 모든 파일이 표시됩니다.

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

"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은 코멘트에서 제안합니다.

이 제품은 잘 작동합니다. 레오나르도 산토스jdec.app.

아카이브파일(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

반응형