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. 참조
- Krakatau - https://github.com/Storyyeller/Krakatau
- lex - http://dinosaur.compilertools.net/#lex
- yacc - http://dinosaur.compilertools.net/#yacc
'Information Security > OpenSource' 카테고리의 다른 글
Yara Project 2.0 Release & How to install Yara 2.0 (0) | 2013.12.27 |
---|---|
How to install thug.py Honeyclient on Kali linux (0) | 2013.09.03 |
Malcom 0.3 – Using Graphical of Network Traffic (0) | 2013.08.19 |
How to install thug.py Honeyclient on Kali linux (0) | 2013.05.20 |
How to install phoneyc.py on Kali Linux (0) | 2013.05.16 |