APK 파일은 확장자가 .apk인 Archive 파일이다.

apk 파일을 hxd으로 열어서 파일 시그니처를 확인해보자.

 

 

apk의 파일 시그니처

50 4B 03 04 로 Pkzip Archive File의 시그니처이다. apk 파일이 압축 파일인 것을 확인 했으니 압축을 한번 풀어보자!

확장자를 .zip으로 바꿔준 뒤 압축 풀기를 해주면 된다.

 

 

 

 

apk 파일 unzip 후 생성 파일들

APK 파일을 다음과 같은 파일들로 구성된다.

 

 

1. assets

2. lib

3. dex

4. META-INF

5. res

6. AndroidManifest.xml

 

 

1. assets

assets의 사전적 의미는 자산이다.

assets는 동영상 같은 용량이 큰 파일들을 관리하는 디렉토리이다. 

예를 들어 게임 앱의 경우 캐릭터의 이미지, 아이템 이미지 등이 assets 디렉토리에 들어있다.

 

 

2. lib

일반적인 라이브러리 파일(.so)들이 들어있다.

여기서 말하는 .so은 Linux에서 사용하는 공유 파일(Shared Object)이라는 뜻으로 Windows로 생각하면 dll 파일과 같다고 생각하면 된다. 공통적인 함수 등을 미리 만들어 놓고 필요할 때마다 불러서 쓸 수 있게 해준다. 

나중에 앱 분석을 하다보면 smali 코드뿐만 아니라 이 so 파일들을 분석해야하는 상황이 오기때문에 잘 알아놓자.

주로 앱 보안 솔루션들이 so파일로 만들어져 분석을 어렵게 해놓았다.

 

 

3. dex

.dex 파일은 Dalvik Executable로 달빅 실행 파일이라는 뜻이다.

안드로이드 가상 머신인 Dalvik이 인식할 수 있도록 .class 파일을 달빅 바이트 코드로 변환한 실행 파일이다. 

 

 

4. META-INF

서명(Sign)에 관한 정보가 들어있는 디렉토리이다.

앱을 설치한 후 우리가 마음대로 수정한 후 다시 설치하려고 하면 서명 오류가 뜬다.

이유는 앱을 수정하려면 파일을 건드리게 되는데 이 때 파일의 hash 값이 바뀌게된다.

하나의 파일이라도 hash 값이 바뀌게 되면 META-INF가 가지고 있는 hash 값과 맞지 않게 된다.

이를 비교하여 다르면 앱 설치를 막는다. 때문에 재서명(Resign) 과정을 통해서 앱을 정상적으로 설치할 수 있다.

 

 

5. res

Resource들이 들어있는 디렉토리로 앱이 사용할 데이터들이 들어있다.

예를들어 문자열, 앱의 아이콘, 언어, 화면을 보여주는 레이아웃 등이 들어있다. 

 

 

6. AndroidManifest.xml

앱의 설치 정보가 들어 있는 파일이다. 앱을 분석할 시 가장 먼저보는 중요한 파일이라고 할 수 있다.

이 파일에서는 패키지명, 메인 액티비티 경로, 앱 권한 등 분석 시 많은 정보를 획득할 수 있다.

 

'Android > Reversing' 카테고리의 다른 글

ELF Parser  (0) 2020.03.09
Smali Code  (0) 2020.03.04
DEX 구조  (0) 2020.03.02
안드로이드 앱 종류  (0) 2020.03.01
안드로이드 리버스 엔지니어링 공부 순서  (0) 2020.03.01

WRITTEN BY
Bugday

,