해당 글에서는 총 3가지의
APK 파일 디컴파일 방법에 대해 설명하고 있습니다.
리패키징 방법에 대해서는
"APK 디컴파일 및 리패키징(2)" 을 참조해주세요
💡 디컴파일(Decompile)?
1) 개념
컴파일의 반대 개념으로, APK 파일이 어떻게 구성되어 있는지 확인하는 일련의 과정을 의미함
2) 목적
안드로이드 APK 파일은 JAVA 기반으로 이루어져 있기 때문에 컴파일 코드의 실행 구조를 디컴파일 할 수 있음
따라서, APK 파일을 실제 JAVA 소스코드 형태로 보기 위해서는 디컴파일 과정이 반드시 필요함
3) 사용도구
필수) APK Tools, Jadx-gui.bat, dex2jar, AXMLPrinter2.jar, jd-gui
선택) Notepad++
1. APK Tools 를 이용한 디컴파일 (저수준 언어로 디컴파일)
STEP 1) APK 파일 확인
진단 대상 APK 파일을 apktool이 위치한 폴더로 이동시킴
STEP 2) CMD 실행
관리자모드로 cmd를 실행한 뒤, apk 파일과 apktool이 위치한 폴더로 이동함
STEP 3) 디컴파일 진행
하단의 명령어를 입력하여 디컴파일을 진행함
C:\> apktool.bat d <apk 파일명>
STEP 4) 디컴파일 확인
APK 파일이 압축 해제된 폴더를 확인하고, Notepad++로 파일을 확인함
📌 주요 특징
✔ 위와 같이 APKTool을 이용해 디컴파일 하게 될 경우, 디컴파일 후 생성된 폴더 내부에 저수준 코드인 smali코드를 생성한다는 특징을 가지고 있음
✔ smail 코드 같은 경우, 가독성은 낮지만 모든 코드를 볼 수 있다는 장점을 가지고 있음
✔ 또한, 생성된 .smali 코드는 텍스트 에디터를 이용하여 사용자의 마음대로 변경이 가능함
2. Jadx-gui.bat 를 이용한 디컴파일(고수준 언어로 디컴파일)
STEP 1) Jadx-gui.bat 다운로드 및 실행
https://github.com/skylot/jadx/releases/tag/v1.2.0 에서 Jadx-gui.zip 파일을 다운로드 한 뒤, 압축해제 후 실행함
Release v1.2.0 · skylot/jadx
Main changes gui: support for renaming methods, classes and fields gui: allow to load multiple files, button for add files res: fix duplicate entries and deobfuscate file names in XML resources co...
github.com
STEP 2) APK 파일 열기
Jadx-gui.exe 를 실행시킨 뒤, 대상 APK 파일을 선택하면 디컴파일이 성공적으로 완료된 것을 확인할 수 있음
Jadx-gui의 경우 다운로드 기능을 지원하므로, 디컴파일 된 파일을 별도로 PC에 저장하고 싶다면 저장 가능함
📌 주요 특징
✔ 위와 같이 Jadx-gui를 이용해 디컴파일 하게 될 경우, 디컴파일 후 생성된 폴더 내부에 dex 파일(달빅 가상 머신에 맞게 클래스 파일을 바이트 코드로 변환한 파일)이 생성된다는 특징이 있음
✔ Java 코드로 분석하는 경우, 가독성은 높지만 일부 코드들이 정상적으로 디컴파일이 안되어 있을 수 있음
✔ 또한, 생성된 classes.dex 파일은 dex2jar를 이용해 jar 파일로 변환 시켜야 함
3. AXMLPrinter2.jar 를 이용한 디컴파일 (복호화)
STEP 1) APK 파일 압축해제
STEP 2) 파일 복호화
복호화 대상 파일(해당 포스팅에서는 AndroidManifest.xml)을 선택한 뒤, AXMLPrinter2.jar와 같은 폴더로 이동시킴
STEP 3) AndroidManifest.xml 파일 복호화
C:\> java -jar AXMLPrinter2.jar AndroidManifest.xml > "생성하고자 하는 파일명.txt"
STEP 4) 파일 확인
정상적으로 파일 내부 내용을 확인할 수 있는 것을 확인함
📌 주요 특징
✔ 모든 파일을 한 번에 볼 수 없으므로 번거로움
✔ 위 1, 2번의 방법으로 디컴파일을 진행하더라도 간혹 일부 파일이 암호화로 인해 깨져 보이는 경우가 존재함
✔ 따라서, 그럴 경우 3번의 방법을 이용해 복호화를 진행하여 확인하면 됨
'Security > Mobile' 카테고리의 다른 글
[iOS] 아이폰 탈옥(Unc0ver) (0) | 2021.09.09 |
---|---|
[Android] APK 디컴파일 및 리패키징(2) (0) | 2021.09.07 |
[Android] 앱 APK 파일 추출하기 (구글 플레이 스토어 앱) (0) | 2021.09.07 |
[Android] 앱 패키지명 확인(1) (0) | 2021.09.07 |
[Android] 취약점진단 분석 도구Ⅱ(동적 분석)🛠 (0) | 2021.09.06 |