본문으로 바로가기


1. 개요


Krakatau는 파이썬을 이용하여 만들든 자바 디컴파일러이다. assembler.py를 이용하여 자바 클래스 파일을 생성하고 decompiler.py와 disassembler.py를 이용하여 자바 클래스파일을 분석한다.


Krakatau의 세 종류의 도구 중에 disassembly.py와 assembly.py는 Python 2.7의 기본 라이브러리를 이용하여 사용 할 수 있다.


decompiler.py를 이용하면 위의 모든 과정을 한번에 진행하여 jar 파일 또는 class 파일을 java 소스코드로 디컴파일이 가능하다. 다만 decompiler.py를 이용하려면 java를 사용해야 하기 때문에 java의 라이브러리 위치를 명시해 주어야 한다.


2. 설정


Java가 설치되어 있고, Python 2.7이 설치되어 있다면 특별 한 설정 없이 도구를 사용 할 수 있다. 하지만 decompile.py를 사용하기 위해서는 Java가 필요로 한다. Kali Linux에는 기본적으로 자바가 설치되어 있기 때문에 Path설정만 해주면 된다.


export JAVA_HOME=/usr/lib/jvm/default-java

- OS : Debian 3.7.2-0+kali5 x86_64 GNU/Linux


* .profile를 통해 설정하면 운영체제 부팅과 함께 자동으로 path설정이 된다. 이는 운영체제마다 설정하는 방법이 조금씩 다르다.


2.1. 설치


다운로드

git clone https://github.com/Storyyeller/Krakatau.git


핵심 파일


  • disassemble.py
  • assemble.py
  • decompile.py


3. 실행


disassemble.py


jar 파일 안에 있는 class의 바이트 코드로 표현되어 파일로 저장한다.


# python disassemble.py ../../1366938770/Xlwn0.jar

root@kali:~/hakawati/tools/Krakatau# python disassemble.py ../../1366938770/Xlwn0.jar 

Krakatau  Copyright (C) 2012-13  Robert Grosse

This program is provided as open source under the GNU General Public License. 

See LICENSE.TXT for more details.


processing target GondadGondadExp.class, 1/1 remaining

Class written to /root/hakawati/tools/Krakatau/GondadGondadExp.j

0.00321817398071  seconds elapsed


assemble.py


disassemble.py와 한 묶음으로 사용된다. disassemble.py를 이용하여 생성된 바이트코드 파일을 class파일로 변환해 준다.


# python assemble.py GondadGondadExp.j

root@kali:~/hakawati/tools/Krakatau# python assemble.py GondadGondadExp.j 

Krakatau  Copyright (C) 2012-13  Robert Grosse

This program is provided as open source under the GNU General Public License. 

See LICENSE.TXT for more details.


Processing file GondadGondadExp.j, 1/1 remaining

Class written to /root/hakawati/tools/Krakatau/GondadGondadExp.class


decompile.py


jar파일의 class들을 java소스로 디컴파일 해준다. 이 기능을 이용하기 위해서는 자바 라이브러리가 필요로 하다. 클래스가 사용하는 API들을 매칭하기 위해서 자바의 라이브러리들을 사용하는 것으로 추측한다.


# python decompile.py ../../1366938770/Xlwn0.jar

root@kali:~/hakawati/tools/Krakatau# python decompile.py ../../1366938770/Xlwn0.jar 

Krakatau  Copyright (C) 2012-13  Robert Grosse

This program is provided as open source under the GNU General Public License. 

See LICENSE.TXT for more details.


Attempting to automatically locate the standard library...

Found at  /usr/lib/jvm/default-java/jre/lib/rt.jar

processing target GondadGondadExp, 1 remaining

Loading GondadGondadExp

Loading java/applet/Applet

Decompiling method <init> ()V

Loading java/awt/Container

Loading javax/swing/JList

Loading javax/swing/JComponent

javax/swing/JComponent cached

javax/swing/JList cached

Loading javax/script/ScriptEngine

javax/script/ScriptEngine cached

Loading javax/script/ScriptEngineManager

javax/script/ScriptEngineManager cached

Decompiling method init ()V

Class written to /root/hakawati/tools/Krakatau/GondadGondadExp.java

0.827899932861  seconds elapsed


4. Error Reports


decompiler Error


Krakatau.error.ClassLoaderErrer:

ClassNotFoundException:  java/lang/invoke/MethodHandles$Lookup


해결


ClassLoaderError가 발생하면서 Class를 찾을 수 없는 에러가 발생하면 Java 버전을 1.7 버전으로 변경하면 된다.


assembly Error


ImportError: No module named ply


해결


apt-get install python-ply


이 모듈은 python을 이용하여 lex와 yacc를 파싱하는 모듈이다.


5. 참조



저작자 표시 비영리 동일 조건 변경 허락
신고

댓글을 달아 주세요

티스토리 툴바