in JAVA

java – decompile

자바 디컴파일일 하는 방법을 소개하도록 하겠습니다.

디컴파일을 위해 3가지 Tool 이 필요합니다.
1. AJXMLPrinter2 (Prints XML document from binary XML file – with correct namespace handing & attribute formatting)
위 라이브러리는 바이너리로 된 XML 파일을 사람이 인식할 수 있는 파일로 출력해줍니다.
사용법
[code]java -jar AXMLPrinter2.jar file.xml > output[/code]
2. Undx
위 라이브러리는 .dex 파일을 jar로 변환해주는 역할을 합니다.
사용법
[code]$ java -DASDKLoc={Location of dexdump} -jar undx.jar -f {apkname.apk}[/code]

3. JAD (Java Decompiler)
위 라이브러리는 class파일을 java파일로 변환해주는 역할을 합니다.
사용법
[code]jad -sjava java *[/code]

! decompile 해봅시다.
ex) Android로 예로 들자면 안드로이드는 빌드 후 .apk를 생성하게 됩니다.
사실 .apk파일이나 .jar나 보시면 다 압축(파일의 모음)파일입니다.

압축을 풀고 계층 구조를 보면 아래와 같습니다.
.
|____AndroidManifest.xml
|____Animation.apk
|____classes.dex
|____META-INF
| |____CERT.RSA
| |____CERT.SF
| |____MANIFEST.MF
|____res
| |____anim
| | |____in_from_right.xml
| |____drawable-hdpi
| | |____icon.png
| |____drawable-ldpi
| | |____icon.png
| |____drawable-mdpi
| | |____icon.png
| |____layout
| | |____first_view.xml
| | |____main.xml
| | |____second_view.xml
|____resources.arsc

위 파일들에서 필요한 파일은 classes.dex 파일과 Androidmanifest.xml파일입니다.
classes.dex파일은 파일명 그대로 class파일 모음입니다.
.dex파일은 undx 라이브러리를 이용하여 푸시면 되고
Androidmanifest.xml 바이너리 파일은 AXMLPrinter2 라이브러리를 이용하시면 됩니다.

좀 더 자세한 내용을 남기고 싶었으나 시간 관계로 이만 쓰도록 하겠습니다.
막히는 부분이나 좀더 자세한 설명을 원하시는 경우 글 남겨주세요.

Write a Comment

Comment