1 분 소요


image-20221025130114073


APK 구조

  • APK란?
  • APK 파일 구조
  • 컴파일 / 디컴파일 / 패키징 / 리패키징
  • 애플리케이션 진단 도구



APK란?

image-20221124152114161

Android Application Pakage

안드로이드 프로그램 형태로 배포되는 형식의 파일

JAR를 확장한 포맷이먀, JAR 파일은 ZIP 압축 파일 포맷을 사용한다.


APK 설치 경로

/data/app/<APK명>

/data/data/<APK명>



APK 파일 구조

image-20221124153240710

META-INF

Signature File

공개키를 담은 인증서 등이 존재


res

애플리케이션이 실행하는데에 필요한 리소스(레이아웃, 문자열 등)가 모여있는 디렉토리


AndroidManifest.xml

패키지 정보, 권한, 앱을 구성하는 컴포넌트 및 패키지 정보, 권한과 같은 앱의 정보가 저장되는 파일

주요 컴포넌트

  • Activity : 일반적으로 하나의 뷰를 말하며, 해당 Activity에 대한 속성을 정의한다.
  • Service : 백그라운드에서 실행되는 서비스
  • Broadcase Receiver : 안드로이드 내부 이벤트 핸들링을 위한 컴포넌트
    • ex) 배터리 부족, 문자 수신
  • Content Provider : 애플리케이션 간 데이터 공유를 위한 컴포넌트


Classes.dex

.class 파일을 바이트 코드로 변환(컴파일)시킨 소스 파일

애플리케이션 실행을 위한 코드 존재


Resources.arsc

컴파일된 리소스(문자열, 스타일 등)와 res의 정보 존재



컴파일 / 디컴파일 / 패키징 / 리패키징

APK 컴파일

JAVA -JavaCompile-> CLASS -DexCompile-> .Dex


APK 디컴파일

JAVA <-JavaDecompile- CLASS <-Dex2jar- .Dex


안드로이드 앱 패키징

image-20221124164615143

일반적으로 프로그래밍 언어들은 컴파일 과정을 거쳐 기계가 인식할 수 있는 바이너리 파일로 변환(컴파일)되는데,

안드로이드는 이 과정에서 프로그램을 묶어주는 패키징코드 사인 작업이 추가된다.

전 게시물에서 설명했다싶이, JAVA는 바이트 코드로 변환(컴파일)된다.

https://eonion-th3db.github.io/Android-Justice-1-1-Android/ ← 전 게시물


안드로이드 앱 리패키징

image-20221124164529909

앱의 제작과정을 거꾸로 하여 앱의 최초 형태인 소스 코드로 변환한 후 소스 코드를 수정하거나 다른 코드를 삽입하고 앱을 다시 제작하는 일련의 과정



애플리케이션 진단 도구

ADB shell

녹스 혹은 단말과 통신을 위한 명령 수행 콘솔

패키지 설치, 삭제, 쉘 명령 등 수행


Apktool

APK 파일을 디컴파일 및 리빌드하기 위한 도구


Dex2jar

Dex 파일을 자바 클래스(CLASS) 파일로 변환(컴파일)


jd-gui

Java Decompiler 도구


Keytool

APK 파일 서명하기 위한 키 생성 도구


Jarsigner

리빌드된 APK 파일에 코드 서명을 위한 도구



앞으로 위 도구들을 사용해서 루팅 탐지 우회, 메모리 내 중요정보 탈취를 진행해보자

업데이트: