APK ( Android Package )
> 안드로이드 플랫폼에서 어플리케이션 설치를 위해 배포되는 패키지 파일
- Android Package는 안드로이드 어플리케이션 파일이며 zip과 같은 하나의 압축 파일이다.
일반적으로 접하는 압축파일과 가장 큰 차이가 있다면 "서명된" 압축파일이라는 점이다.
- 어플리케이션에 관계된 파일들을 하나로 압축해놓은 파일이기 때문에, 압축 프로그램을 사용하여 압축을 풀 수 있다.
- APK는 앱 실행 파일이라기 보다는 설치 프로그램이라고 할 수 있음.
- 애플 IOS의 IPA 확장자에 대응된다.
결론 : APK는 서명된 압축파일이며 파일 내부에는 데이터와 리소스, 자바 실행코드를 묶어놓았다.
> 주요 구성요소
- AndroidManifest.xml : 앱에 대한 정보 및 실행권한 등의 데이터가 들어있으며 인코딩 되어있다.
- classes.dex : 달빅 가상머신에서 동작하는 바이너리 실행 파일
( DEX ( Dalvik Executable ) : 달빅 가상머신에 맞게 클래스 파일을 바이트 코드로 변환한 파일로써 자바 코드를 컴파일하여 클래스 파일을 만든 후 다시 DEX 도구로 압축한 것. )
- /res : 리소스 파일 폴더
- META_INF : 인증 관련 파일들이 들어있는 데이터
부가설명 )
AndroidManifest.xml 파일이 중요한 이유 :
- C / C++ 언어의 경우 소스 분석 진행시 main() 부터 진행해 나아가는데 안드로이드의 경우 main activity에 onCreate 함수부터 시작되어진다. main activity는 개발자의 마음대로 이름 변경이 가능하지만 모든 activity는 AndroidManifest.xml 파일 내부에 기재되어야 사용이 가능하다. 따라서 AndroidManifest.xml 을 참조하여 일종의 Entry Point를 찾을수 있다.
*.dex 파일은 android에서 App이 구동하기 위하여 필요한 핵심적인 파일포맷으로써 만일 하나의 .dex에 메소드가 너무 많아 64K 개수를 넘어서면 안드로이드 5.0 이상 버전에서는 기본적으로 .dex를 분리한다 , 이러한 기본적 이유는 분석에 훼방을 놓기 위함이며
대체로 사이즈가 큰 apk파일을 뜯어보면 .dex파일이 여러개 존재하는것을 확인할 수 있다.
-META_INF 파일은 인증서 관련 파일들을 모아놓은 폴더로써 apk빌드 후 빌드과정이 끝난 리소스에 서명을 진행하면
META-INF라는 폴더가 생성되어지며 그 안에는 서명과 관련된 파일들을 넣게된다. 보통 CERT.RSA , CERT.SF , MANIFEST.MF 등이 존재한다.
APK 파일에 서명하는 이유 :
안드로이드는 .apk 파일을 생성하는 과정에서 개인키로 암호화 서명을 하여, 이 apk파일이 누구에 의하여 서명되었는지 확인이 가능하다.
이로 인하여 해당 apk의 원래 소유자로부터 서명된 apk가 맞는지 일종의 인증이 가능하다.
이러한 인증 과정은 누군가가 조작된 (ex : 악성코드 삽입..etc) apk를 배포하지 못하도록 보안적 이유 때문에 진행한다.
APK 파일 생성 절차 구조도
.apk확장자 파일 압축을 풀면 나오는 .dex 파일은 ART (또는 Dalvik VM)이 인식할 수 있도록 .class 파일을 바이트코드로 변환한 것이다.
.dex 파일을 jvm 바이트코드로 디컴파일하여 .class파일을 추출할 수 있다면, 안드로이드 어플리케이션의 Java 코드 추출 또한 가능하다.
'Hacking & Security > Android' 카테고리의 다른 글
Android App Hooking with Frida (0) | 2019.10.17 |
---|---|
FRIDA_Install (0) | 2019.10.17 |
Android APK Vuln analysis methodology (0) | 2019.10.14 |
ARM Assembly (1) | 2019.10.14 |
Android Architecture (0) | 2019.09.18 |