1. 안드로이드(Android) 운영체제 소개
○ 안드로이드는 구글에서 개발한 리눅스 기반 오픈 소스 플랫폼으로, 모바일에서 운영체제 역할을 수행
○ 구글 플레이 스토어 및 기타 미켓 플레이스를 통한 타사 앱 설치를 지원함
○ 오늘날 플랫폼은 휴대전화, 태블릿, 웨어러블 기술, TV 및 기타 스마트 디바이스와 같은 최신 가술의 토대가 됨
2. 안드로이드 운영체제 구조
○ Linux 커널
● Adroid 플랫폼의 기반은 리눅스 커널
● ART(안드로이드 런타임)는 스레딩 및 하위 수준의 메모리 관리와 같은 기본 기능에 리눅스 커널을 사용
● 경량, 저전력, 안정화, 빠른 반응 등의 장점이 존재함
○ HAL (하드웨어 추상화 계층)
● 상위 수준의 Java API 프레임워크에 디바이스 하드웨어 기능을 사용할 수 있도록 하는 표준 인터페이스를 제공함
● HAL은 카메라 모듈, 블루투스 모듈 등 하유웨어 구성요소의 인터페이스를 여러 라이브러리 모듈로 구성함
● 프레임워크 API가 디바이스 하드웨어에 접근하기 위해 호출을 수행할 경우, 안드로이드 시스템이 해당 하드웨어 구성 요소에 대한 라이브러리 모듈을 로드함
○ Android 런타임
● Adroid 버전 5.0(API 레벨 21)이상을 실행하는 디바이스의 경우 각 앱이 자체 프로세스 내 자체 ARP 인스턴스 실행
● ART는 DEX 파일을 실행하여 저용량 메모리 디바이스에서 여러 가상머신을 실행하도록 함
● DEX 파일은 안드로이드용으로 특별히 설계된 바이트코드 형식으로, 최소 메모리 공간에 맞게 최적화 되어 있음
○ 네이티브 C/C++ 라이브러리
● C/C++로 작성된 라이브러리
● ART 및 HAL 등의 많은 핵심 Adroid 시스템 구성 요소와 서비스가 C/C++로 작성된 네이티브 라이브러리를 필요로
하는 네이티브 코드 기반으로 이루어짐
● JAVA 프레임워크 API를 사용하여 일부 네이티브 라이브러리의 기능을 앱에서 사용하도록 함
○ Java API 프레임워크
● 안드로이드 운영체제의 전체 기능은 JAVA로 작성된 API를 통해 접근 가능
● 개발자는 안드뢰드 시스템 앱이 사용한느 것과 동일한 프레임워크 API에 대한 전체 접근 권한을 가짐
● 안드로이브 앱 제작에 필요한 뷰 시스템, 리소스 매니저, 알림 매니저, 액티비티 매니저, 콘텐츠 바이더와 같은
앱 제작에 필요한 빌딩 블록을 구성할 수 있음
○ 시스템 앱
● 이메일, SMS 메시징, 캘린더, 인터넷 검색 주소록 등의 주요 어플리케이션이 제공됨
● 시스템 앱은 사용자를 위한 앱으로도 작동하고, 개발자가 자신의 앱에서 접근할 수 있는 주요 기능을 제공하기 위한
용도록도 작동함
● 앱이 SMS 메시지를 제공하고자 할 경우 해당 기능을 직접 빌드할 필요가 없음
● 대신, 이미 설치된 SMS 앱을 호출하여 지정받는 사람에게 메시지를 제공할 수 있음
3. 안드로이드 4대 컴포넌트(구성요소)
○ 앱의 구성요서는 안드로이드 앱의 필수적인 구성 요소로 각 독리된 형태로 존재함
○ 각 구성 요소는 시스템이나 사용자가 앱에 들어올 수 있는 진입점을 의미
○ 특히 "인텐트"는 다른 애 컴포넌트로부터 작업을 요청하는 데 사용할 수 있는 메시징 객체
○ 액티비티 = UI라고 생각하면 편함
● 사용자와 상호작용 하기 위한 진입점
● 사용자 인터페이스를 포함한 화면 하나를 나타냄
● ex) 이메일 앱
- 이메일 목록 액티비티(UI)
- 이메일 작성 액티비티(UI)
- 이메일 읽기 액티비티(UI) 등
● 이메일 앱에서 허용할 경우 다른 앱에서도 이메일 액티비티에 접근 가능
○ 서비스
● 백그라운드에서 앱을 실행하기 위한 다목적 진입점
● 사용자 인터페이스(UI)는 제공하지 않음
● 사용자가 다른 앱에 있는 동안 백그라운드에서 음악을 재생할 수 있음
● 사용자 액티비티 간의 상호작용을 차단하지 않고 네티워크를 통해 데이터를 가져올 수 있음
○ Broadcast Receiver
● 시스템이 정기적인 사용자 플로우 밖에서 이벤트를 앱에 전달하도록 지원하는 컴포넌트
● 대다수의 브로드캐스트는 시스템에서 발생
● 화면 깨짐, 배터리 부족, 사진 캡쳐 알림 등
● 일반 앱도 브로드캐스트를 사용해 사용자 인터페이스를 표시하진 않지만, 상태 표시줄 알림을 생성
○ 콘텐츠 프로바이더
● 콘텐츠 제공자는 파일 시스템, SQLite 데이터베이스, 웹상이나 앱이 접근할 수 있는 다른 모든 영구 저장소에
저장 가능한 앱 데이터의 공유형 집합을 관리함
● 다른 앱은 컨텐츠 제공자를 통해 데이터를 쿼리하거나, 콘텐츠 제공ㄱ자가 허용할 경우에는 수정도 가능
● 안드로이드 시스템은 사용자의 연락처 정보를 관리하는 콘텐츠 제공자를 제공하여, 적절한 권한을 가진 앱일 경우
콘텐츠 제공자를 쿼리하여 특정 인물에 대한 정보를 읽고 쓸 수 있음
4. 안드로이드 루팅의 이해
○ "모든 모안 기능과 마찬가지로 애플리케이션 샌드박스도 깨지지 않는다."
○ "제대로 구성된 장치에서 애플리케이션 샌드박스를 벗어나려면 리눅스 커널의 보안을 손상시켜야 한다."
○ 리눅스 기반 시스템의 root 권한은 모든 작업을 수행할 수 있는 최고 사용자 수준!
○ 안드로이드/리눅스에서는 소수 액심 유틸리티만 root 권한으로 실행됨
○ 하지만, 장치를 Rootting 하면 실행중인 모든 앱에서 root 권한으로 사용 가능
shell@android:/ $ su
root@android:/ $ id
uid=0(root) gid=0(root)
○ 루팅이란 안드로이드 운영 체제 상에서 최상위 권한을 얻어, 생상자 또는 판매자 측에서 걸어놓은 제약을 해제하는 행위
○ 루트 접근 권한을 얻어 디바이스를 완전히 제어하는 것이 루팅!
○ 루팅된 디바이스에서는 $가 아닌 #루트 쉘을 가진 uid 값 0이 존재함
'기반 지식 > Android' 카테고리의 다른 글
6. 모바일 취약점 진단 항목 (0) | 2024.12.09 |
---|---|
5. 녹스(Nox Player) 가상 애뮬 설치 (0) | 2024.12.06 |
4. 안드로이드 앱 구조 (0) | 2024.12.05 |
3. 안드로이드 디바이스 디렉터리 구조 (1) | 2024.12.04 |
2. 안드로이드 앱 진단 환경의 이해 및 설치 (0) | 2024.12.03 |