소스코드를 갖고 있지 않고, apk 파일만을 가지고 있는 상태에서 해당 앱을 디컴파일하여 분석하는 방법입니다.
앱 디컴파일에는 다양한 도구가 있지만, 기초를 다지는 시작이므로 다음 3개의 도구로 차근차근 디컴파일 해보겠습니다.
apktool - APK파일로 압축되어 있는 resources.arsc, classes.dex, XML 파일들을 디버깅 파일 형태로 변환해주고, 이를 수정한 후에 다시 수정된 APK파일로 Biuld 시켜주는 도구입니다.
링크 : https://ibotpeaches.github.io/Apktool/install/
Apktool - How to Install
Install Instructions Quick Check Is at least Java 1.8 installed? Does executing java -version on command line / command prompt return 1.8 or greater? If not, please install Java 8+ and make it the default. (Java 7 will also work at this time) Windows: Down
ibotpeaches.github.io
dex2jar - APK파일이나 APK파일에 포함되어 있는 classes.dex 파일을 자바 클래스 파일로 변환해주는 도구입니다.
링크 : https://sourceforge.net/projects/dex2jar/
dex2jar
Download dex2jar for free. Tools to work with android .dex and java .class files. Mirrors: * https://bitbucket.org/pxb1988/dex2jar * https://github.com/pxb1988/dex2jar dex2jar contains following compment * dex-reader is designed to read the Dalvik Executab
sourceforge.net
JD-gui - jar 파일을 사용자가 읽을 수 있는 형태로 변환해주는 도구입니다. [ jar -> 자바파일 ]
링크 : http://jd.benow.ca/
Java Decompiler
The “Java Decompiler project” aims to develop tools in order to decompile and analyze Java 5 “byte code” and the later versions. JD-GUI is a standalone graphical utility that displays Java source codes of “.class” files. You can browse the reco
java-decompiler.github.io
위의 3개의 도구를 통해 APK 파일을 디컴파일 하고 그 중 중요한 몇몇 파일들을 살펴 보겠습니다.
A - apktool을 사용해 디버깅 파일 형태로 변환
명령어 - apktool d app-release.apk
@참고 : app-release.apk는 InsecureBank라는 앱을 안드로이드 스튜디오에서 사이닝을 통해 생성한 apk 파일입니다.
해당 APK파일에 대한 디버깅이 진행됩니다.
이렇게 APK파일을 smali 파일과 다양한 파일들로 디버깅했습니다.
해당 파일들을 열어보면,
인코딩되어 저장된 XML 파일도 평문으로 변환된 걸 확인할 수 있습니다.
B - dex2jar를 활용하여 APK파일 내에 classes.dex 파일을 자바 클래스 파일로 변환
@참고 : classes.dex 파일이란 안드로이드 가상머신인 dalvik이 인식하도록 자바의 class파일을 바이트 코드로 변환 한 파일입니다.
사용자가 쉽게 알아볼 수 있게, classes.dex 파일[바이트 코드]을 자바 파일로 변환하겠습니다.
dex2jar를 설치한 폴더로 이동하여, cmd 창을 킨 후,
명령어 - d2j-dex2jar.bat "apk파일위치[경로포함]"
해당 폴더 내에 [앱이름]-dex2jar.jar 파일이 생성됩니다.
C - jd-gui [ 자바 디컴파일러 ] 를 사용하여 jar 파일 디컴파일
jd-gui는 디컴파일을 원하는 파일만 끌어오면 바로 디컴파일을 해줍니다. 사용법이 간단합니다.
이렇게 3개의 도구를 통해, APK파일만을 가지고도 디컴파일을 해보았습니다.
[ 이 3가지의 작업을 한번에 해주는 도구들이 몇 개 있는 것으로 알고있지만, 처음 시작하는 안린이기 때문에..ㅎㅎ ]
정리를 위해 그림을 하나 가져오겠습니다.
안드로이드 앱 컴파일 과정
.java파일 + .xml파일 - compile - .class파일 - dex tool - .dex파일 + (xml, res) --- .apk파일
해당 위 그림을 역순으로 디컴파일 한 것입니다.
방금 3개의 도구로 해당과정을 하나씩 디컴파일
.apk파일 - apktool - .dex파일 + (xml, res) - dex2jar - .class가 모여있는 .jar파일 - jd-gui - .java파일
해당 작업이 안드로이드 앱의 구조를 이해하는데 도움이 되길 바랍니다.
다음에는 안드로이드 앱 취약점 진단 및 분석도구 [ ADB, Drozer 등 ]에 대해 다뤄보겠습니다~
그림출처 -- https://jmoon.co.kr/29
'Android' 카테고리의 다른 글
앱 취약점 - 브로드캐스트 리시버(Broadcast Receiver) 결함 분석 (0) | 2021.08.12 |
---|---|
드로저(Drozer)를 활용한 앱 취약점 진단 | part.2 - 컴포넌트 분석 (0) | 2021.08.11 |
드로저(Drozer)를 활용한 앱 취약점 진단 | part.1 - 정보 추출 (0) | 2021.08.10 |
ADB(Android Debug Bridge) 기본 명령어 Part.2 (0) | 2021.08.07 |
ADB(Android Debug Bridge) 기본 명령어 Part.1 (0) | 2021.08.05 |