Android : 모바일 기기를 위한 Linux based kerenl & middleware & 핵심 애플리케이션을 포함한 소프트웨어 스택
1. 안드로이드 내부 구조
안드로이드 플랫폼 구조는 위 그림과 같다.
Linux Kernel :
안드로이드는 리눅스 커널을 기반으로 하는 리눅스 계열 OS이다. 위 그림에서의 커널은 하드웨어와 우리가 사용하는 OS를 연결시켜주는매개존재로 운영체제에 있어서 핵심이다.
HAL ( Hardware Abstraction Layer ) : 하드웨어 추상화 계층
하드웨어 추상화 계층에서는 같은 종류의 부품으로 다양한 하드웨어를 설계할 수 있어 직접 하드웨어에 접근하는 형태는 다소 복잡할 수 있다. 이러한 점을 해결하고 복잡한 내부를 감추고 일관성 있는 인터페이스를 제공하기 위하여 같은 종류의 하드웨어에 대한 공통 명령어 집합을 만든다. 해당 작업을 하드웨어 추상화라고하며 프로그래머가 여러 장비에서 개발하는 것을 도와주는 역할을 한다.
-> HAL은 하드웨어에 대한 공통 명령어 집합들로 이루어져 있으며, 프레임워크의 요청에 따라 해당 하드웨어의 라이브러리 모듈을 제공한다.
Android Runtime (ART) :
안드로이드 런타임은 ART라고도 부르며 이에 대한 자세한 이해를 위해서는 자바 언어의 구동 절차를 앞서 알아볼 필요성이 있다.
일반적으로 컴파일러는 환경에 맞는 CPU와 플랫폼에 맞추어 기계어로 변형시킨다. 즉, 우리가 작성한 코드를 하드웨어 레벨에서
알아듣게 하기 위하여 번역을 하는 기능을 제공한다.
그러나 자바는 한 종류의 CPU와 플랫폼 환경에 맞춰 저장되는 것이 아니라 바이트코드로 저장되며, 이를 실행하기 위해서는 JVM
(Java Virtual Machine)이 필요하다. 이는 자바가 하나의 바이트코드를 바탕으로 다양한 CPU와 플랫폼 환경에서 실행시키기 위해서다.
즉, CPU와 플랫폼 환경에 맞는 가상머신만 존재한다면 하나의 실행파일을 통해 여러가지 환경에서 사용이 가능하다는 의미이다.
안드로이드 또한 JAVA를 사용하기 때문에 VM이 필수적이다. 그러나 JVM 사용에 관한 라이센스 문제가 존재하여 구글에서 만든 것이
달빅VM(Dalvik VM)과 ART다.
이 둘의 차이는 JIT 컴파일러(달빅 VM)을 사용하냐 , AOT컴파일러(ART)를 사용하냐로 나뉘어지며 어떠한 것을 사용하냐에 따라 동작하는 형태또한 다르다.
JIT(Just-In-Time) 컴파일러의 경우, 이름 그대로 애플리케이션이 구동되면 실시간으로 CPU에 맞춰 자바코드를 변환하였다.
그렇기에 하드웨어에 부하가 크게 발생하였으며 배터리 소모 이슈가 존재했다. 특히 동작중인 화면이 많을수록 배터리 소모량은 더욱 커졌다.
이러한 단점을 보완하고자 나온 것이 AOT컴파일러 기반의 ART이다.
AOT(Ahead Of Time) 컴파일러는 JIT 컴파일러와 달리 애플리케이션을 설치할 당시에 한번에 컴파일하여 바이트코드로 변환하여 저장해놓고 프로그램이 실행될 때 마다 변환된 코드를 읽어들이는 형태이다.
그러나 ART에도 분명히 단점은 존재했다. 애플리케이션 설치시 달빅 VM에 비하여 약 2배 가량 많은 설치공간이 필요하였으며 설치시간 또한 더욱 오래걸렸다.
하지만 이를 바탕으로 ART는 달빅 VM에 비하여 압도적인 성능개선이 이루어졌다.
Native Library :
ART 및 HAL 등의 많은 안드로이드 핵심 시스템 구성요소와 서비스는 C / C++ 언어로 작성된 네이티브 라이브러리를 필요로하는 네이티브 코드 기반으로 이루어져 있다. 안드로이드의 경우, JAVA 프레임워크 API를 이용하며 일부 네이티브 라이브러리 기능을 앱에 제공하고 있다.
코드의 보안 또는 성능을 필요로 하는 경우 , C / C++ 코드가 필요로 하는 애플리케이션을 개발을 진행할 때는 안드로이드 NDK
(Native Development Kit)을 이용하며 네이티브 코드에서 직접 여러가지 네이티브 플랫폼 라이브러리에 접근이 가능하다.
Java API Framework :
JAVA API Framework는 안드로이드 프레임워크를 의미하며 안드로이드의 전체 기능은 JAVA로 작성된 API를 통해서 접근이 가능하다.
개발시 안드로이드 시스템 애플리케이션이 사용하는 것과 동일한 프레임워크 API에 대한 전체 접근 권한을 가지며, 이를 바탕으로
다양한 앱을 개발할 수 있다.
System Apps :
플랫폼에 기본적으로 포함되어진 앱은 사용자가 선택하여 설치하는 앱과 특별한 구분이 없기 때문에 설정 등 일부 앱을 제외하면 사용자가 설치한 다른 앱이 기본 앱으로 지정 가능하다.
시스템 어플리케이션이 사용자가 직접 사용하는 앱으로 동작하기도 하지만, 개발자가 자신의 앱에서 접근할 수 있는 주요 기능을 제공하기 위한 용도로 사용된다.
'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 |
APK File (0) | 2019.09.18 |