이미 소장하고 있다면 판매해 보세요.
|
1. 안드로이드 아키텍처의 진화
__안드로이드 버전의 이력 ____프로요 ____진저브레드 ____허니콤 ____아이스크림 샌드위치 ____젤리빈 ____키켓 ____롤리팝 ____마시멜로 __안드로이드 대 리눅스 ____리눅스의 또 다른 배포판이 아니다 ____그러고 나서 안드로이드가 왔다 ____리눅스와의 공통점과 차이점 ____안드로이드 프레임워크 ____달빅 가상 머신 ____JNI ____네이티브 라이브러리 ____바이오닉(Bionic) ____안드로이드 네이티브 라이브러리 ____외부 네이티브 라이브러리 ____하드웨어 추상화 레이어 ____리눅스 커널 __안드로이드 파생물 ____구글에서 만든 파생물 ____구글이 아닌 곳에서 만든 파생물 __생각해보기 ____64비트 호환성 ____안드로이드 런타임(ART) ____분할-화면 ____데스크톱 OS로서의 안드로이드 ____안드로이드와 프로젝트 아라 ____브릴로 __요약 __참조 2. 안드로이드 파티션 및 파일시스템 __파티셔닝 스키마 ____별도의 파티션에 대한 필요성 ____GUID 파티션 테이블 ____플래시 저장 시스템 ____파일시스템 ____안드로이드 디바이스 파티션 __안드로이드 파일시스템 콘텐츠 ____루트 파일시스템 ____/system ____/system/bin ____/system/xbin ____/system/lib[64] ____/system/etc ____/data ____/data/data ____/data/misc ____/data/system ____/cache ____/vendor ____SD 카드 __보호된 파일시스템 ____OBB ____ASec __리눅스 가상 파일시스템 ____cgroupfs ____debugfs ____functionfs(/dev/usb-ffs/adb) ____procfs(/proc) ____pstore(/sys/fs/pstore) ____SELinuxfs(/sys/fs/selinux) ____sysfs(/sys) __요약 __참조 3. 안드로이드 부팅, 백업 및 복구 __안드로이드 이미지 ____부트로더 ____부트로더 이미지 ____부트로더 잠금 ____부트 이미지 ____커널 ____디바이스 트리(ARM) ____램디스크 ____시스템 및 데이터 파티션 __부트 프로세스 ____펌웨어 부트 ____커널 부트 __종료 및 재부팅 __안드로이드 백업 및 복구 ____커맨드 라인 도구 ____로컬 백업 ____백업 동작 모니터링 __시스템 복구 및 업데이트 ____OTA 업데이트 ____OTA 업데이트 프로세스 ____이미지 커스터마이징 ____이미지 변경을 위한 리소스 __요약 __참조 4. init __init의 역할과 책임 ____시스템 프로퍼티 ____.rc 파일 ____종합: init의 흐름 __Init 및 USB __init의 다른 역할 ____ueventd ____watchdogd __요약 __이번 장에서 설명한 파일들 5. 안드로이드 데몬 __핵심 서비스 ____adbd ____healthd ____lmkd?(안드로이드 L) ____logd(안드로이드 L) ____vold __네트워크 서비스 ____netd ____mdnsd ____mtpd ____racoon ____rild __그래픽 및 미디어 서비스 ____부트애니메이션 ____mediaserver ____drmserver __다른 서비스들 ____installd ____Commands ____키스토어 ____debuggerd[64] ____sdcard ____자이고트[64] __요약 __이번 장에서 설명한 파일들 __참조 6. 프레임워크 서비스 아키텍처 __서비스 매니저 다시 살펴보기 __서비스 호출 패턴 ____장단점들 ____직렬화와 AIDL(Android Interface Definition Language) __바인더(Binder) ____짧은 역사 ____그러면 정확하게 바인더는 무엇일까? ____바인더 사용하기 ____바인더 추적하기 __system_server ____시작 및 흐름 ____시작 동작 변경하기 __요약 __이번 장에서 사용된 파일 __참조 7. 리눅스 렌즈를 이용해 안드로이드 살펴보기 __/proc, revisited ____심링크: cwd, exe, root ____fdinfo ____status ____pid, tid, tgid 및 ppid 정리하기 __스레드 상태 및 컨텍스트 스위칭 __사용자 모드 메모리 관리 ____가상 메모리 분류 및 생명주기 ____메모리 메트릭 ____아웃 오브 메모리 조건 __시스템 호출 추적하기 ____toolbox ps 툴 ____wchan 및 syscall ____strace 툴 __요약 __이번 장에서 사용된 참조 및 설명한 파일 8. 안드로이드 보안 __모바일 보안 위협 모델링 ____공격 경로 ____로드맵 __리눅스 레벨의 보안 ____리눅스 퍼미션 ____리눅스 케이퍼빌리티 ____SELinux ____주목할 만한 다른 특징들 __달빅 레벨의 보안 ____달빅 레벨 퍼미션 ____달빅 코드 서명 __사용자 레벨 보안 ____잠금 화면 ____멀티-유저 지원 __키 매니지먼트 ____인증서 관리 ____비밀 및 개인 키 관리 __스토리지 보안 ____/data 암호화 ____시큐어 부트 __안드로이드 루팅 ____루트로 부트하기 ____취약점을 악용해 루팅하기 __요약 __참조 |
|
1장에서는 운영체제를 소개한다. OS 버전별로(지금은 사용되지 않는 프로요(Froyo)부터 L 버전까지) 개선된 내용을 살펴본다. 또한 고수준의 관점에서 아키텍처를 설명하고, 안드로이드 스택의 각 레이어들을 알아보면서 리눅스의 토대를 살펴본다. 그런 다음 구글과 다른 벤더(예를 들면, 아마존 FireOS)의 안드로이드 변형 제품을 살펴보고, 향후의 방향과 몇 가지 논의에 대한 결론을 내린다.
2장에서는 좀 더 기술적으로 들어간다. 특히 안드로이드 파티션과 파일시스템을 다룬다. 안드로이드에서 사용되는 파티셔닝 스키마(불행하게도 표준화되어 있지 않다)와 파일시스템(Ext4와 F2FS)을 살펴본다. 다음으로 특정 시스템 디렉터리나 파일이 포함되어 있는지 알아내고자 할 때 유용한 ‘파일시스템 내용을 탐색하는 방법’을 알아본다. 그리고 포렌식을 수행할 경우에 편리하게 이용할 수 있는 내장 앱 데이터 디렉터리를 살펴본다. 또한 이 장에서는 안드로이드의 ‘보호된 파일시스템(OBB와 ASEC)’을 다룬다. 물론 루팅된 디바이스에서는 이 파일시스템이 보호되지 않는다. 마지막으로 리눅스의 가상(pseudo) 파일시스템인 cgroupfs, debugfs, procfs, sysfs 등을 설명한다. 3장은 이전에 배운 내용을 토대로 한다. 특히 파티션을 주로 다루면서 안드로이드 부트 프로세스 내에서의 파티션 역할에 대해 설명한다. 또한 안드로이드 부트 이미지(일부에서는 ‘ROM’이라는 용어로 사용되는데, 이는 틀리다)에 대해 설명하고, 디바이스 부트 파티션으로 전송하는 방법을 알아본다. 이 밖에 기본 안드로이드 부트 로더를 설명하고(좀 더 깊이 있는 내용은 이 책과 관련된 웹사이트에서 찾아볼 수 있다) 부트 이미지의 다른 컴포넌트(커널, 디바이스 트리 및 initramfs)를 상세하게 설명한다. 그리고 실험을 통해 이 컴포넌트들을 풀거나, 커스터마이즈하거나, 다시 묶는 방법을 설명한다(부트로더는 언록되어 있다고 가정한다). 또한 OTA 업데이트를 통해 이미지를 전송하는 방법과 백업 및 복구 프로세스 및 셧다운 프로세스에 대해서도 살펴본다. 4장에서는 하나의 프로세스(/init)에 대해서만 살펴본다. 이 프로세스는 UN*X에서와 같이 유저 모드에서 시스템을 시작할 책임이 있다. /init.rc 파일 구문을 자세히 살펴보면서 시동 프로세스를 자세히 설명한다. 또한 시스템 속성 관리 및 하드웨어 변경 내역 감시(ueventd)와 같은 /init의 다른 역할을 자세히 설명한다. 5장에서는 네이티브 서비스에 대해 논의한다. 예를 들어 네이티브 서비스는 /init.rc에 나와 있고, 리눅스 바이너리로 적재된다(system_server 내의 스레드로 적재되는 달빅-레벨 프레임워크와 대비된다. 달빅-레벨 프레임워크는 2권에서 다룬다). 또한 이번 장에서는 디바이스에서 볼 수 있는 모든 데몬에 대한 참조를 다룬다. 6장에서는 안드로이드에서 모든 프레임워크의 기반 역할을 하는 servicemanager 및 system_service 프로세스를 설명하면서 안드로이드 프레임워크 서비스 아키텍처에 대해 다룬다. 이번 장에서는 바인더에 대해 설명하지만, 대부분의 내용은 2권에서 살펴볼 것이다. 하지만 독자들이 안드로이드 인터널 커뮤니케이션과 리모트 프로시저 호출이 동작하는 방식에 대한 충분한 통찰력을 얻을 수 있도록 충분히 설명한다. 7장에서는 리눅스의 관점에서 안드로이드를 바라본다. 즉, 리눅스 레벨의 도구와 /proc 파일시스템을 통해 안드로이드 시스템 프로세스와 앱을 살펴본다. 또한 네이티브 레벨에 디버깅하기 위한 리눅스 시스템의 거의 모든 기술을 다룬다. 마지막 장인 8장에서는 보안에 대해 논의한다. 이 장은 미리보기용으로 만들었다(원래는 이 책을 21장으로 구성된 한 권의 책으로 만들려고 했다). 여기서는 리눅스 레벨과 프레임워크 레벨에서의 보안 기능에 대해 자세히 알아본다. 또한 ’승인’된 방법 및 뜻밖의 방법으로 안드로이드 디바이스를 루팅하는 방법을 살펴본다 |