본문 바로가기

자료실/유틸

자바 디컴파일, 플러그인 디컴파일 해보기

디컴파일?



컴파일러와 반대의 역할로, 상대적으로 저 수준의 추상에 있는 프로그램의 코드를 고수준의 추상으로 변형한다 디컴파일러는 보통 원본 소스코드로 완벽하게 재구성될 수 없으며 결과가 매우 다양할 수 있다 그럼에도 불구하고 이것은 소프트웨어 리버스 엔지니어링 에서 매우 중요한 도구이다. 디컴파일러는 실행 파일을 입력으로 갖고, 같는 기능을 하는 소스 코드 파일 즉, 고급 언어로 만든다 (위키피디어 인용)


정확한 개념이라 할 순 없으나 쉽게 말하자면 이미 컴파일 (만들어진) 프로그램을 만들기 전의 코드형태로 만들어, 보거나 편집이 가능하다.

위에 인용했다시피, 디컴파일을 하더라도 원본 소스코드를 완벽하게 재구성할 수 없어 때에 따라 대충 보고 이해 용도로 쓴다고 알고있다.

프로그램을 .jar 확장자의 프로그램으로 정의하며 이 글에서는 이런 디컴파일을 하기위해 무엇이 필요하고 어떻게 해야 컴파일된 프로그램을 코드 형태로 볼 수 있을까에 대해 다뤄볼 생각이다.




자바 디컴파일러 JD-GUI



JD-GUI 는 바로 실행할 수 있는 .exe 확장자의 프로그램이고 실행해서 디컴파일 할 프로그램을 드래그 앤 드롭으로 가볍고 곱게 던져주면 알아서 열리고 해당 클래스들의 코드도 클릭 하나로 쉽게 볼 수 있다.


우선 다운로드 부터 해보자.



Java Decompiler (JD - GUI) 의 공식 홈페이지이며 JD-GUI 를 찾아 Download 탭에서 자신에게 맞는 운영체제를 골라 다운로드 한다

다운로드한 zip 파일 압축을 풀어 jd-gui.exe 를 실행해보자




처음 보면 ? 디컴파일러라길래 복잡한줄 알았는데 생각보다 빈약 해 보이네 라고 생각할 수도 있을 것이다. 아니, 심플한거지.

위의 설명대로 그냥 디컴파일 할 프로그램을 툭 던져주면 된다. 먹이를 준다고 생각해보자




목록들이 생겼다 한번 + 버튼으로 열어보면 대규모일수록 목록이 많을것이다

패키지들의 + 를 열고 열어 .class 가 노출됬다면 클릭해서 오른쪽 큰 빈 창에 코드를 띄워보자




매우 간편하다 JD-GUI 가 타 디컴파일러에 비해 정확도가 낮은 것 같긴 하지만 쓰는 이유는 매우 편해서이다.

밑줄 쳐진 곳을 누르면 해당하는 패키지나 메소드의 위치로 이동할 수 있다. 이런 편의 기능까지 포함되어 보기도 편하다.




자바 디컴파일러 온라인



근데, 열어보면 이상하게 JD-GUI 에서 INTERNAL ERROR 가 뜨고 안열리는 것이 있다.

필자는 현재 무료로 판매되고 있는 플러그인을 열었으며, 이름은 가렸다.




보시다시피 코드가 보이지 않는다. 개발자와 동시에 판매자인 사람의 최소한의 보호 정책이겠지.

이럴때는 방법이 있다. 다른 디컴파일러를 쓰는것이다.

무려 다운로드 하지 않아도 브라우저만 있으면 할 수 있다.

거기다, 디컴파일러의 종류도 매우 다양하다 (CFR, Jadx, JDCore, Procyon, Fernflower, JAD)

바로 Java Decompiler Online 이라는 곳이다.





들어가보면 위와 같은데, 파일 선택 버튼을 눌러 디컴파일할 프로그램을 선택한 후 사용할 디컴파일을 선택 후 Upload and Decompile 버튼을 누르면 알아서 디컴파일 해서 목록을 보여준다.





잘 보인다. 필자는 사이트에 들어가서 하는 것 보다는 바로 켜서 로드해서 코드를 보는게 더 편하기 때문에 대충 볼때는 JD-GUI 를 쓰지만

조금이라도 더 정확하게 보려 할 땐 사이트에서 하는 편이다.


만약 JD-GUI 로 디컴파일이 안될 때에는 사이트에 들어가면 여러개의 디컴파일러를 선택해 디컴파일 할 수 있으니 알아두면 편하다.