HOME > Detail View

Detail View

Android internals

Android internals (Loan 1 times)

Material type
단행본
Personal Author
Levin, Jonathan 이지훈, 역
Title Statement
Android internals / 조나단 레빈 지음 ; 이지훈 옮김
Publication, Distribution, etc
서울 :   에이콘출판,   2016-  
Physical Medium
책 : 삽화, 도표 ; 27 cm
Series Statement
에이콘 모바일 프로그래밍 시리즈 = Mobile programming series
Varied Title
Android internals : a confectioner's cookbook
ISBN
9788960778979 9788960770836 (세트)
General Note
색인수록  
Content Notes
1. 파워 유저 관점의 안드로이드 인터널, The power users's view (282 p.)
000 00000nam c2200205 c 4500
001 000045918857
005 20171027133210
007 ta
008 171026m20169999ulkad 001c kor
020 ▼a 9788960778979 ▼g 94000
020 1 ▼a 9788960770836 (세트)
040 ▼a 211009 ▼c 211009 ▼d 211009
041 1 ▼a kor ▼h eng
082 0 4 ▼a 005.268 ▼2 23
085 ▼a 005.268 ▼2 DDCK
090 ▼a 005.268 ▼b 2016z9
100 1 ▼a Levin, Jonathan
245 1 0 ▼a Android internals / ▼d 조나단 레빈 지음 ; ▼e 이지훈 옮김
246 0 9 ▼a Android internals : ▼b a confectioner's cookbook
260 ▼a 서울 : ▼b 에이콘출판, ▼c 2016-
300 ▼a 책 : ▼b 삽화, 도표 ; ▼c 27 cm
440 0 0 ▼a 에이콘 모바일 프로그래밍 시리즈 = ▼x Mobile programming series
500 ▼a 색인수록
505 1 0 ▼n 1. ▼t 파워 유저 관점의 안드로이드 인터널, The power users's view ▼g (282 p.)
700 1 ▼a 이지훈, ▼e
740 2 ▼a Power users's view
900 1 0 ▼a 레빈, 조나단, ▼e
945 ▼a KLPA

Holdings Information

No. Location Call Number Accession No. Availability Due Date Make a Reservation Service
No. 1 Location Science & Engineering Library/Sci-Info(Stacks1)/ Call Number 005.268 2016z9 1 Accession No. 121242095 Availability Available Due Date Make a Reservation Service B M

Contents information

Book Introduction

에이콘 모바일 프로그래밍 시리즈. 이 책은 안드로이드의 기반인 리눅스 시스템 및 구성 요소, 그리고 안드로이드 가상 머신을 소스 레벨에서 설명하고 있기 때문에 안드로이드의 내부 동작 모습을 깊이 살펴보거나 안드로이드를 디바이스에 포팅하고자 하는 사람 및 안드로이드 보안에 관심이 있는 모든 사람에게 많은 도움이 될 것이다.

★ 요약 ★

안드로이드의 기반인 리눅스 시스템 및 구성 요소, 그리고 안드로이드 가상 머신을 소스 레벨에서 설명하고 있기 때문에 안드로이드의 내부 동작 모습을 깊이 살펴보거나 안드로이드를 디바이스에 포팅하고자 하는 사람 및 안드로이드 보안에 관심이 있는 모든 사람에게 많은 도움이 될 것이다.

★ 이 책에서 다루는 내용 ★

■ 파티션 및 파일시스템
■ 부트 프로세스
■ Init 및 Init 설정 파일
■ /system/bin의 네이티브 데몬
■ 프레임워크 서비스 아키텍처와 servicemanager
■ 리눅스 인터페이스를 통한 모니터링
■ 보안

★ 이 책의 구성 ★

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장으로 구성된 한 권의 책으로 만들려고 했다). 여기서는 리눅스 레벨과 프레임워크 레벨에서의 보안 기능에 대해 자세히 알아본다. 또한 ’승인’된 방법 및 뜻밖의 방법으로 안드로이드 디바이스를 루팅하는 방법을 살펴본다.


Information Provided By: : Aladin

Author Introduction

조나단 레빈(지은이)

10대부터 (좋은 의미의) 해킹을 시작했고, 1993년에는 2400 보(baud) 모뎀을 사용하는 XT에서 셀이 돌아가는 방식을 알아내기 위해 노력했다. 따로 배울 만한 곳이 없었기 때문에 감사 관련 매뉴얼(man) 페이지를 반복적으로 보며 독학해야 했다. 그 후 20년 동안 많은 변화가 일어났고 유닉스(UNIX)를 처음 시작해 리눅스를 사용 중이며, 윈도우와 OSX 또한 사용하고 있다. 보안 분야에서 시작해 수년간 컨설팅과 교육을 해오던 중, 보안이 내부 구조를 상세하게 파악하는 것임을 깨달았다. 마침내 좋은 사람들과 함께 테크놀로긱스닷컴(Technologeeks.Com)을 창업했다. 지금은 테크놀로긱스닷컴의 최고 기술 경영자(CTO)로 근무 중이다. 애플의 OS 관련 집필은 『Mac OS X and iOS Internals』(O'Reilly, 2012)로 시작했으며, 이 과정 속에서 도파민이 급격히 분비하는 짜릿함을 느낄 수 있었다. 이제는 중독됐으며, 안드로이드와 관련된 집필을 시작할 당시 알게 된 로니 페더부시(Ronnie Federbush)의 충고에 따라 처음으로 자가 출판을 감행했다. 이 작업은 원활하게 진행됐고, 『Mac OS X and iOS Internals』 1권을 처음 생각했던 방식으로 다시 집필할 수 있는 기회를 얻을 수 있었다. 출판사의 변덕을 피하고, 검열을 받지 않으며, 페이지 수와 예산에 신경 쓸 필요도 없었다. 그 결과 3부작 중 지금 여러분이 읽고 있는 새로운 『*OS Internals Vol.3』를 출간할 수 있게 됐다.

이지훈(옮긴이)

기계공학을 전공했지만 자바 웹 개발을 시작으로 안드로이드/iOS 기반의 앱을 개발했으며, 최근 몇 년간은 하둡과 스파크 및 딥러닝에 관련된 소프트웨어를 개발해왔다. 또한 IT 관련 서적의 저자 및 번역가로도 활동한다. 『나홀로 개발자를 위한 안드로이드』(에이콘, 2013), 『Java 프로그래밍 입문』(북스홀릭퍼블리싱, 2013)을 저술했고, 『프로그래머를 위한 안드로이드』(정보문화사, 2015), 『Android Internals Vol.1』(에이콘, 2016), 『스위프트로 하는 iOS 9 프로그래밍』(에이콘, 2016), 『대용량 머신 러닝과 스파크』(에이콘, 2018) 등 수십 권의 책을 번역했다.

Information Provided By: : Aladin

Table of Contents

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 암호화 
____시큐어 부트 
__안드로이드 루팅 
____루트로 부트하기 
____취약점을 악용해 루팅하기 
__요약 
__참조

New Arrivals Books in Related Fields