Dyrandy

[Android Fundamentals, Reversing Tools] 안드로이드 APK 기본 개념 본문

Concept Study/Mobile

[Android Fundamentals, Reversing Tools] 안드로이드 APK 기본 개념

Dyrandy 2020. 9. 7. 10:53

What is an APK?

APK는 Android Package의 약자로 안드로이드 OS에서 사용하는 애플리케이션을 위한 하나의 패키지다. 

APK의 파일 시그니처 값을 확인 해보면, ZIP파일과 동일한 값이라는 것을 확인 할 수 있다. (PK)

(그렇다고 ZIP으로 바꾸고 푼다고 100% 정상적으로 풀리는 것은 아니다)

 

APK File Hex
https://en.wikipedia.org/wiki/List_of_file_signatures

Types of APP

  1. Pure Native App
    • 어떠한 웹 통신을 하지 않고, 오로지 순수 앱 자체만으로 구동하는 앱
    • 게임, 간단 기능 앱, 등
  2. Hybrid App
    • Web과 Native를 동시에 사용하는 앱
    • 가장 흔하게 볼 수 있는 앱
    • 대부분의 웹 취약점들이 요기에도 동일하게 적용 된다
  3. Web Wrapper App
    • App을 통해 Web을 보여주는 역할을 하는 App
    • 대부분의 웹 취약점들이 동일하게 적용 된다
    • 모바일과 Web Server의 통신을 위한 창구 역할을 한다

** 잘 보면, APK들은 대부분 웹과 밀접한 관련이 있는 것을 알 수 있다. 실제로 현업에서 일을 해보면 웹 취약점들이 고스란히 APP안에서 발견할 수 있고, 그 구조 또한 매우 비슷한 구조로 이루어져있는 것을 확인 할 수 있다.

 

APK File Structure

APK 파일의 기본 구조는 아래와 같다.

APK File Structure

생각보다 많은 구성요소가 없는 것을 확인 할 수 있지만, 그 안에 내용과 코드는 APP마다 다양하다.

구성요소의 내용을 살표보면 아래와 같다.

http://www.ryantzj.com/android-applicationpackage-apk-structure-part-1.html

핵심적으로는 AndroidManifest.xml과 classes.dex가 있겠다. 다른 코딩 프레임워크를 사용해보았으면 Manifest가 먼지 대충 짐작이 갈 것이다.

Manifest 파일은 APP의 구조와 MetaData, 구성요소, 요구사항, 등을 정의한다.

 

DEX 파일은 안드로이드용으로 작성된 컴파일된 코드가 포함된 형식으로 저장된 실행 파일이다. 기술적으로 'Dalvik Executable'이라고 하며, 달빅 가상 머신으로 해석할 수 있다.

 

그 외에는 직관적이다.

 

** APK 파일을 열어보면 Activity라는 파일을 보게 될 것이다. 이것은 MVC구조에서 Controller을 생각하면된다. 어떤 기능들이 어떤 동작을 할 것인지 구현한 부분이고, MainActivity가 가장 기본 Activity가 된다.

 

How to Reverse APK?

이제 APK 구조를 대충 파악했으니, 실제로 열어보면 된다. APK를 열기 위해서는 다양한 툴들이 존재하지만 핵심으로는 3가지가 있다.

 

- JADX-GUI: APK파일을 올리면 사람이 읽기 편한 코드형태로 바꾸어 준다. (JAVA 코드) 가장 많이 쓰이는 디컴파일러로 한번에 2단계 (SMALI -> DEX -> JAVA)를 거치기 때문에 편리 하다. 다만 코드 수정은 불가능하다. (IDA와 비슷하다고 보면 된다)

- DEX2JAR: DEX파일 형식을 JAR로 바꿔주는 역할을 한다. 파일 내용을 수정하고 싶을 때 자주 사용한다. (역으로도 가능)

- APKTOOLS: Android Studio를 설치하면 까리는 기본 중에 기본 툴이다. APK를 까서 Smali코드를 보여준다.

 

*Smali? 이건 assembly언어라고 보면 편하다.

 

APK Hooking?

APK Hooking은 리버싱에서 사용하는 API Hooking을 생각해주면 편하다. APK파일에서 내가 실행하고자 하는 함수를 호출 할 수 있고, Overwrite/Overload가 가능하고, 변수들을 조작가능하며, 결과값을 열람할 수 있다.

 

대표적인 APK Hooking 툴로는 Frida가 있다.

 

** Ross Marks의 FridaLab을 통해 연습 가능하다.

 

Emulator

안드로이드 가상 환경을 보여주기 위한 일종의 VM이다. 데스크탑에서 안드로이드 파일을 실행 가능하게 해주며, Android Studio, Know, Genymotion등 수 많은 에뮬레이터가 존재한다.

 

** 개인적으로 안드로이드 스튜디오의 에뮬을 추천하고 그 외에 Root 권한을 획득하기 위한 (Frida사용하기 위해) Genymotion을 추천한다.

Comments