Java 클래스 디컴파일

Haider Ali 2023년10월12일
  1. Java 클래스를 디컴파일하는 이유
  2. 자바 디컴파일러
  3. Eclipse IDE를 사용하여 Java 클래스 디컴파일
  4. IntelliJ IDEA를 사용하여 Java 클래스 디컴파일
  5. 명령줄을 사용하여 Java 클래스 디컴파일
  6. JD-GUI를 사용하여 Java 클래스 디컴파일
Java 클래스 디컴파일

이 가이드에서는 Java .class 파일을 디컴파일하는 기술에 대해 배웁니다. 디컴파일에 대한 간략한 개요, Java에서 .class 파일을 디컴파일하는 방법 및 Java에서 파일을 디컴파일할 때 볼 수 있는 변경 사항을 살펴봅니다.

Java 클래스를 디컴파일하는 이유

Java 개발자로서의 경력에서 적어도 한 번은 JAR 파일을 마주해야 하거나 .class 파일을 다시 소스 코드로 디컴파일해야 하는 상황에 직면합니다.

아시다시피 JAR 파일은 다양한 Java 클래스 파일과 이미지, 오디오 등과 같은 기타 리소스 모음이 포함된 Java 아카이브 패키지입니다. 이러한 파일은 ZIP 형식으로 빌드되며 .jar 확장자를 사용합니다.

JAR 파일의 문제점은 사용자에게 이 파일을 열 수 있는 권한이 부여되지 않는다는 것입니다. 이러한 파일에 액세스하는 유일한 방법은 사용자가 JAR 파일을 디컴파일하는 경우입니다.

파일에서 .class 파일을 읽으려면 소프트웨어 도구를 사용하여 이 파일을 디컴파일해야 합니다.

반면 .class 파일을 사용하면 Eclipse IDE 및 IntelliJ IDEA와 같은 소프트웨어를 사용할 수 있습니다. 또한 명령줄 인수를 사용하여 .class 파일을 디컴파일할 수 있습니다.

자바 디컴파일러

디컴파일은 JAR 파일을 읽을 수 있는 클래스 파일로 디컴파일할 때 리버스 엔지니어링 작업을 따릅니다. 이 가이드의 뒷부분에서 이에 대해 배우겠지만 먼저 .class 파일을 살펴보겠습니다.

.class 파일을 디컴파일하는 방법에는 여러 가지가 있습니다. 이러한 파일로 작업하는 사용자에게 가장 적합한 것이 무엇인지 결정됩니다.

이 프로세스에 도움이 되는 소프트웨어 도구가 있지만 .class 파일을 소스 코드로 디컴파일할 수 있는 다른 방법도 있습니다. 우리가 사용하는 두 가지 방법은 Eclipse IDE 및 IntelliJ IDEA와 같은 소프트웨어입니다.

이 두 가지를 사용하는 가장 중요한 이점은 디컴파일러를 사용하기가 매우 쉽다는 것입니다. 가장 일반적으로 사용되는 소프트웨어인 Eclipse IDE를 살펴보겠습니다.

이를 위해 따라야 할 몇 가지 단계가 있습니다.

Eclipse IDE를 사용하여 Java 클래스 디컴파일

플러그인은 .class 파일을 디컴파일하는 데 사용됩니다. 이 소프트웨어에서 플러그인은 Enhanced Class Decompiler(ECD)라고 합니다. Enhanced Class Decompiler는 Eclipse Marketplace라는 소프트웨어 마켓플레이스에서 쉽게 설치할 수 있습니다.

  • 이를 위해 Go to help 옵션으로 이동하여 Eclipse Marketplace를 선택합니다.
  • 그런 다음 향상된 클래스 디컴파일러를 검색합니다. 그런 다음 ECD가 제대로 작동하도록 설정해야 합니다.
  • ECD를 설정하려면 메뉴에서 창으로 이동 옵션을 클릭한 다음 기본 설정을 클릭합니다.
  • 그런 다음 일반을 선택하면 드롭다운에서 편집기 옵션을 찾을 수 있습니다.
  • 이전 옵션을 클릭한 후 다른 드롭다운에서 파일 연결을 선택합니다.
  • 그런 다음 마지막으로 *.class without source 옵션을 선택합니다.

이제 .class 파일을 클릭하기만 하면 디컴파일할 수 있습니다.

IntelliJ IDEA를 사용하여 Java 클래스 디컴파일

이 소프트웨어를 사용하는 주된 이유는 디컴파일러를 다운로드하거나 설정할 필요가 없기 때문입니다. 이 소프트웨어에는 기본 디컴파일러가 있어 사용자가 IntelliJ IDEA를 더 쉽게 사용할 수 있습니다.

IntelliJ IDEA에서 .class 파일을 열면 해당 파일이 자동으로 디컴파일됩니다.

명령줄을 사용하여 Java 클래스 디컴파일

.class 파일을 디컴파일하는 또 다른 방법은 명령줄을 사용하는 것입니다. 이 방법에는 세 가지 옵션이 있습니다. 선택하는 것은 전적으로 사용자의 몫입니다.

JD-CLI 사용

JD-CLI는 단일 명령줄 문에 사용됩니다. 클래스 파일을 디컴파일하는 데는 단일 명령만 필요합니다.

다음은 클래스 파일을 디컴파일하는 데 사용되는 명령입니다.

java - jar jd - cli.jar[class - file]

intoolswetrust/jd-cli: Command Line Java Decompiler (github.com)를 클릭하여 이 디컴파일러를 다운로드할 수 있습니다.

FernFlower 사용

FernFlower는 .class 파일을 디컴파일하기 위해 시스템에 다운로드되는 또 다른 디컴파일러입니다.

FernFlower를 사용하려면 이 디컴파일러를 복제해야 합니다. 여기를 클릭하면 됩니다: fesh0r/fernflower: Unofficial Mirror of FernFlower Java Decompiler (github.com).

복제에 사용되는 명령은 다음과 같습니다.

git clone https: // github.com/fesh0r/fernflower
cd fernflower
gradle build

파일을 디컴파일하려면 이 명령을 사용하십시오.

java - jar fernflower.jar[path to JAR or.class file][directory to store the decompiled files]

JD-GUI를 사용하여 Java 클래스 디컴파일

JAR 파일 디컴파일은 .class 파일과 다릅니다. Java 디컴파일러는 JAR 파일을 디컴파일하는 데 가장 일반적으로 사용되는 소프트웨어 도구입니다.

이 도구는 쉽게 다운로드할 수 있습니다. 이 소프트웨어의 다른 버전은 여기를 클릭하여 사용자가 필요로 하는 대로 다운로드할 수 있습니다.

이 버전 중에서 JD-GUI는 Java 디컴파일러의 가장 잘 알려진 UI 버전입니다. JD-GUI는 사용자가 JAR 파일에서 숨겨진 클래스 파일을 볼 수 있게 해주는 애플리케이션입니다.

.class 파일의 주석과 같은 낮은 수준의 정보는 사라집니다. 일부 원래 변수 이름이 사라질 가능성도 있지만 이는 사용자가 컴파일하는 동안 선택한 옵션에 따라 다릅니다.

컴파일하는 동안 디버거가 사용된 경우 .class 파일은 동일한 소스 코드를 얻지 못하므로 더 읽기 쉬운 형식이 됩니다.

주석을 사용하는 간단한 Hello World 예제를 통해 이 개념을 더 잘 이해할 수 있습니다.

class Example1 {
  public static void main(String[] args) {
    // This is the comment used.
    System.out.println("Hello World");
  }
}

현재 JAR 파일 형식인 이 HelloWorld 파일을 디컴파일하면 이 .class 파일을 출력으로 얻게 됩니다.

출력:

class Example1
{
    public static void main(String[] paramArrayOfString){System.out.println("Hello World");}
}

보시다시피 이 두 파일의 분명한 차이점은 주석이 사라지고 main 메소드의 매개변수에서 눈에 띄는 변화가 있다는 것입니다.

결국 많은 옵션이 있기 때문에 Java JAR 파일을 디컴파일하는 데 사용할 소프트웨어 도구는 사용자에게 달려 있습니다.

작가: Haider Ali
Haider Ali avatar Haider Ali avatar

Haider specializes in technical writing. He has a solid background in computer science that allows him to create engaging, original, and compelling technical tutorials. In his free time, he enjoys adding new skills to his repertoire and watching Netflix.

LinkedIn

관련 문장 - Java Class