Top

Android Internals Vol.1 [파워 유저 관점의 안드로이드 인터널]

  • 원서명Android Internals::Power User's View (ISBN 9780991055524)
  • 지은이조나단 레빈(Jonathan Levin)
  • 옮긴이이지훈
  • ISBN : 9788960778979
  • 33,000원
  • 2016년 08월 26일 펴냄
  • 페이퍼백 | 284쪽 | 210*270mm
  • 시리즈 : 모바일 프로그래밍

책 소개

요약

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

이 책에서 다루는 내용

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

저자/역자 소개

지은이의 말

안드로이드는 오픈소스 시스템이지만, 과연 얼마나 많은 사람들이 안드로이드의 작동 원리를 이해하기 위해 실제로 자리에 앉아 자바, C, C++, XML로 만들어진 수백만 개의 라인을 훑어보겠는가?
안드로이드는 오픈소스지만 대부분의 사람들은 자바, C, C++, XML로 쓰여진 수백만 개의 라인을 모두 훑어보지 못한다.
이 책은 전 세계에서 가장 인기 있는 모바일 운영체제의 내부 동작을 문서화한 첫 번째 책이다. 장황한 코드를 직접 살펴보지 않고, 상세한 도표와 주석, 직접 해보는 실험을 통해 안드로이드의 다양한 컴포넌트의 흐름과 로직을 쉽게 설명한다. 이 책과 관련된 웹사이트(http://NewAndroidBook.com/)에서는 자료, 읽을거리 및 코드 샘플 등 다양한 추가 자료를 무료로 제공한다.
이 책에서는 Nexi, 삼성 갤럭시 S 시리즈, NVidia 쉴드, 아마존 킨들, HTC One M8, 안드로이드 에뮬레이터 디바이스에서 구동되는 롤리팝을 포함한 안드로이드의 모든 버전을 다룬다.
안드로이드 전체를 상세히 살펴보기 위한 시리즈의 첫 번째 책으로, 2권(프로그래머 관점의 안드로이드 인터널)은 1권에서 다루지 않았던 프레임워크, 입력, 오디오, 비디오, 네트워크 아키텍처를 꼭 필요한 코드와 함께 심도 있게 살펴볼 예정이다.

지은이 소개

조나단 레빈(Jonathan Levin)

10대 때부터 해킹(대부분 좋은 의미의 해킹)을 시작했고, 1993년에는 셸상에서 2400 전송 모뎀을 가진 XT의 작동 방식을 알기 위해 노력했다. 오로지 man 페이지에만 의지한 채, 이 모든 과정을 통과해야만 했다.
그 후로 20년 동안 OS 분야에는 많은 변화가 있었다. 이 기간 동안 유닉스, 리눅스, 윈도우, OS X을 다뤘다. 초창기에 보안 컨설팅 및 교육 분야에 종사했으며, 지금은 OS 전반에 걸친 컨설팅 및 교육을 하고 있다. 이 과정에서 보안은 결국 ‘내부를 보호하는 것’이라는 사실을 깨달았다. 지금은 몇몇 사람들과 함께 시작한 테크놀로긱스 닷컴(Technologeeks.com)의 최고 기술 책임자(CTO)로 일한다.
책을 쓰는 일은 다소 새로운 것이었다. 처음에는 애플의 OS와 관련해 『Mac OS X and iOS Internals』(와일리, 2012)를 썼는데, 매우 좋은 평을 받았다. 힘든 과정이기는 했지만, 굉장한 즐거움을 느끼기도 했다. 이제는 책을 쓰는 즐거움에 중독돼 안드로이드에 관련된 작업을 하게 됐으며, 이에 대한 첫 결과물이 바로 이 책이다. 이 책은 또한 셀프 출판에 대한 첫 시도였다. 이 작업을 마치고, MOXil의 2판을 쓰는 도중에 ‘마시멜로’가 출시되었다. 이제는 안드로이드 마시멜로가 안정화됐기 때문에 이 책의 시리즈인 2권(프로그래머 관점의 안드로이드 인터널)도 곧 출간될 예정이다.

옮긴이의 말

2003년 시작된 안드로이드는 이제 스마트폰 사용 인구의 82%가 사용하는 대중적인 모바일 OS로 발전했다. 스마트폰 이외에도 셋톱 박스 등 다양한 디바이스에 포팅된 안드로이드를 더하면 이 비율이 더욱 높아진다. 안드로이드 OS 시장이 커짐에 따라 안드로이드를 해킹하는 기법도 교묘해지고 있다. 오픈소스인 안드로이드는 누구나 쉽게 소스에 접근할 수 있기 때문에 보안을 위협하는 해킹도 다양하게 시도되고 있다. 안드로이드는 리눅스 OS를 기반으로 하기 때문에 리눅스 OS와 안드로이드 가상 머신의 해킹 기법이 모두 적용될 수 있다. 또한 안드로이드는 오픈소스기 때문에 소스를 자세히 살펴보면 누구나 디바이스에 포팅할 수 있고 이를 해킹할 수도 있다. 이 책은 안드로이드 기반인 리눅스 시스템 및 구성 요소와 안드로이드 가상 머신을 소스 레벨에서 설명한다. 주로 안드로이드 기반 시스템을 좀 더 깊이 공부하고자 하는 사람들에게 적합하다. 다시 말해 리눅스 OS와 자바 및 안드로이드 가상 머신에 대한 기본 지식이 있는 사람들을 대상으로 하는 책이다. 저자는 이 책을 약 3권의 시리즈로 출판할 계획이라고 한다. 그 첫 번째인 이 책은 안드로이드 운영체제의 디자인, 파일시스템의 구조, 부트 순서 및 네이티브 서비스와 함께 안드로이드 동작에 영향을 미치는 리눅스 및 관련 내용에 대해 살펴본다. 2권과 3권에서는 프로그래머 관점에서 안드로이드 프레임워크 구조를 소스 코드 레벨에서 살펴본다. 이 책의 내용은 최신 안드로이드 N 업데이트가 반영돼 있다.

옮긴이 소개

이지훈

아이폰/안드로이드 앱 및 서비스로 다양한 수익 모델을 창출하기 위해 노력하고 있지만 뜻대로 되지 않아 번역 및 저술을 열심히 하려고 하는 40대 개발자다. 한국에서 60대까지 개발자로 일하는 것이 목표다.
저서로는 『나홀로 개발자를 위한 안드로이드』(에이콘, 2011), 『Java 프로그래밍 입문』(북스홀릭퍼블리싱, 2013), 『프로그래머를 위한 안드로이드』(정보문화사, 2015) 등이 있다.

목차

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

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안