Top

안드로이드 애플리케이션 리버스 엔지니어링 [기초부터 고급까지 안드로이드 앱 리버싱]

  • 지은이남대현, 류재형
  • ISBN : 9788960779983
  • 30,000원
  • 2017년 03월 30일 펴냄
  • 페이퍼백 | 292쪽 | 188*235mm
  • 시리즈 : 해킹과 보안

책 소개

소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
https://github.com/AcornPublishing/android-reverse

요약

안드로이드 애플리케이션 설치 방법부터 동적 디버깅에 이르는 다양한 분석 방법을 담은 책이며, 난독화 및 분석 방지 솔루션 등 분석이 막혔을 때, 돌파구를 찾을 수 있는 책이다. 저자들의 다년간 모의해킹 및 취약점 분석으로 터득한 노하우를 바탕으로 분석 환경 구성부터 고급 활용까지 모두 다뤘다.

이 책에서 다루는 내용

■ 안드로이드 애플리케이션 분석 환경 설정
■ 무료 도구를 이용한 정적 분석 방법
■ 상용 도구를 이용한 난독화 애플리케이션 분석 방법
■ 분석 방지 솔루션이 적용된 애플리케이션 분석 방법
■ 공유 라이브러리 동적 디버깅 방법
■ 해킹 대회 문제를 통한 실전 응용 ■ 개발을 통한 APK 후킹 방법

이 책의 대상 독자

■ 안드로이드 애플리케이션 보안을 처음 접하거나 이제 막 시작하려는 독자
■ 개발자 및 시큐리트 파트에서 보안 점검을 담당하는 독자
■ 안드로이드 애플리케이션 취약점 점검 모의해킹 컨설턴트
■ 안드로이드 애플리케이션 리버스 엔지니어링에 관심이 많은 독자

이 책의 구성

1장, '안드로이드 기본 개념'에서는 안드로이드 애플리케이션 분석에 앞서 분석을 어느 부분부터 해야 하는지 모르는 독자들에게 안드로이드 애플리케이션의 네 가지 구성요소에 대한 개념 설명으로 어느 부분부터 분석을 시작해야 모르는 독자들이 개념을 바탕으로 관련 코드를 쉽게 분석해 나갈 수 있도록 액티비티(Activity), 서비스(Service), 브로드케스트 수신자(Broadcast Receiver), 콘텐츠 제공자(Contents Provider)에 관해 설명한다.
2장, '안드로이드 리버스 엔지니어링을 위한 환경 구축'에서는 분석에 앞서 디바이스에 접속하기 위해 ADB 접속을 위한 USB디버깅 활성화하는 방법, 필요한 명령어 등을 사용하기 위해 Busybox 등을 설치하는 방법 및 윈도우, 우분투 환경에 맞게 자바 버전 확인 및 안드로이드 스튜디오(Android Studio)를 이용해 SDK를 설치하는 방법을 시작하는 사람들을 기분으로 자세히 설명한다.
3장, '안드로이드 앱 구성 및 코드 분석'에서는 안드로이드 애플리케이션의 구성, 안드로이드 애플리케이션 생성 과정과 apktool을 이용한 기본적인 APK Repackage 과정을 설명하고 무료로 쉽게 구할 수 있는 JD-GUI, JADX, Androguard, ByteCodeViewer를 이용해 분석하는 방법에 대해 설명한다. 또한 안드로이드 애플리케이션 분석 용도로 많이 사용되고 있는 JEB, JEB2를 이용한 자세한 분석 방법과 JEB2에서 제공하는 동적 디버깅을 할 수 있는 방법에 대해 자세히 설명한다.
4장, '안드로이드 앱 정적 분석'에서는 분석을 위해 설치된 안드로이드 애플리케이션 추출부터 분석방지 솔루션이 적용된 애플리케이션의 실행코드 추출 방법 및 유용한 팁을 예제를 바탕으로 설명하고, 레벨 테스트 용도로 제작된 안드로이드 애플리케이션의 정적 분석 방법에 대해 안드로이드 기본 개념부터, 코드 활용까지 차근차근 설명한다.
5장, '안드로이드 앱 동적 분석'에서는 이장의 내용은 대부분 고급과정에 속하며 개발에 대한 사전지식이 필요하다. 따라서 앱을 직접 분석하지 않고 동적 환경을 구성해 어떤 이벤트가 발생하는지 확인하기 위해 안드로이드 LKM(Loadable Kernel Module), 대표적인 프레임워크를 활용한 자바 API 후킹을 통해 분석해나가는 방법, API 후킹을 하는 방법에 대해서 자세히 설명한다.
6장, '안드로이드 앱(APK) 디버깅'에서는 GDB, IDA, JEB2를 통해서 안드로이드 애플리케이션 코드에 대한 동적 디버깅 환경 구축 및 동적 디버깅 방법, JNI 라이브러리 디버깅 방법에 대해서 자세히 설명한다.

저자/역자 소개

지은이의 말

안드로이드에 관한 많은 책이 있다. 순수 애플리케이션 개발에 초점을 맞춘 책, 악성코드 분석에 초점을 맞춘 책, 취약점 분석에 초점을 맞춘 책 등 안드로이드 관련 다양한 책들이 있다. 우리는 순수하게 안드로이드 애플리케이션 분석 방법에 대한 책을 만들고 싶었다. 안드로이드 애플리케이션 설치부터 다양한 분석 도구를 활용하는 방법까지 자세히 기술하려고 노력했고, 깊이가 없다는 지적을 받지 않기 위해 개발 지식이 필요한 부분까지 설명하였다. 동적 분석에서는 디버깅, APK 후킹 등 다양한 방법을 설명했다. 국내외 도서를 통틀어 이 책보다 안드로이드 애플리케이션 리버스 엔지니어링에 충실한 책은 없다고 자부한다. 이제 막 안드로이드 리버스 엔지니어링을 시작하려는 사람, 현재 모바일 애플리케이션 취약점 분석 및 모의해킹에 몸담고 있는 사람들에게 도움이 될 수 있는 책을 만들기 위해 다년간의 노하우를 녹여 집필했다. 이 책을 통해 한 단계 도약하는 계기가 되었으면 하는 바람이다.

지은이 소개

남대현

해커이자 보안 연구원이다. 3년 정도 스마트TV의 취약점을 진단했고, 모바일 사업부 취약점 진단, 커널 취약점 진단, 모의해킹 진단을 다년간 해오고 있다. NHN, SK텔레콤, 사이버 사령부 시스템 해킹 강의, SANS ITL 아카데미 강의를 했고, 모바일 환경의 In-App 우회 취약점 다수 발견했다. 모바일 환경의 보안 및 암호화된 메시지 복호화 등에도 관심이 많고, 강의를 통해서 지식을 나누고 싶다.

류재형

사이버 수사관이다. 모바일 카메라의 소프트웨어 검증 업무를 수행하면서 안드로이드의 구조에 대해 깊이 있는 이해를 바탕으로 초창기 버전 안드로이드 모델부터 최신 버전의 안드로이드 펌웨어 및 안드로이드 앱 분석을 하면서 안드로이드 보안에 대해 큰 관심을 갖고 있으며, 특히 모바일 기기에서 사용되는 경량화 암호의 복호화와 최신 안드로이드폰에 아이폰과 같은 강력한 암호화 방식이 적용되고 있는데, 포렌식적 관점에서 획득과 분석을 하는 데 큰 관심을 갖고 연구를 하고 있다.

목차

목차
  • 1장. 안드로이드 기본 개념
    • 1.1 안드로이드 필수 구성 요소
      • 1.1.1 액티비티
      • onCreate( )
      • startActivity( )
      • startActivityForResult( )
      • setResult( )
      • 액티비티 생명주기
      • 1.1.2 서비스
      • 서비스 생명주기
      • 1.1.3 브로드캐스트 수신자
      • 1.1.4 콘텐츠 제공자

  • 2장. 안드로이드 리버스 엔지니어링을 위한 환경 구축
    • 2.1 디바이스 설정
      • 2.1.1 ADB 접속을 위한 USB 디버깅 활성화
      • 2.1.2 루팅
      • 2.1.3 다양한 명령을 사용하기 위한 BusyBox 설치
    • 2.2 안드로이드 SDK, NDK 설치
      • 2.2.1 윈도우 환경에서 안드로이드 SDK 설치
      • 자바 버전 확인
      • 자바 다운로드
      • 자바 설치
      • 2.2.2 안드로이드 스튜디오를 이용한 안드로이드 SDK 설치
      • 안드로이드 스튜디오 다운로드
      • 안드로이드 SDK 설치
      • 환경 변수 등록
    • 2.3 우분투 환경에서 안드로이드 SDK 설치
      • 2.3.1 자바 버전 확인 및 설치
      • 자바 버전 확인
      • 자바 설치
      • 자바 버전 확인
      • 2.3.2 안드로이드 SDK의 다운로드와 설치
      • 2.3.3 안드로이드 SDK 환경 변수 설정
      • 2.3.4 안드로이드 NDK 다운로드 및 설치
      • 압축 해제
      • 2.3.5 안드로이드 NDK 환경 변수 등록

  • 3장. 안드로이드 앱 구성 및 코드 분석
    • 3.1 안드로이드 APK 구성
    • 3.2 APK Repackage
      • 3.2.1 Apktool
    • 3.3 무료 도구를 활용한 코드 분석
      • 3.3.1 JD - GUI
      • 실행 문제 해결
      • 3.3.2 JADX
      • 3.3.3 Androguard
      • 3.3.4 바이트코드 뷰어
    • 3.4 상용도구를 활용한 코드 분석
      • 3.4.1 JEB1
      • 쉬운 해킹대회 문제 풀어보기
      • 3.4.2 JEB2
      • UI 배치
      • 아티팩트 추가
      • 애플리케이션 동적 디버깅
      • SETPROPEX를 이용한 설정값 변경
      • CVE-2016-5195 취약점을 이용한 설정값 변경
      • JEB2 동적 디버깅 기능 사용 관련 문제 해결
      • JEB2를 이용한 애플리케이션 디버깅

  • 4장. 안드로이드 앱 정적 분석
    • 4.1 안드로이드 APK 추출
      • 4.1.1 ADB
      • 4.1.2 아스트로 파일관리자
    • 4.2 분석방지 솔루션 우회
      • 예제 1
      • 예제 2
    • 4.3 안드로이드 애플리케이션 정적 분석
      • 예제 1
      • 예제 2
    • 4.4 난독화된 애플리케이션 분석
      • 예제 1.
      • 예제 2.

  • 5장. 안드로이드 앱 동적 분석
    • 5.1 안드로이드 LKM을 활용한 동적 분석
      • 5.1.1 모바일 기기에 맞는 커널 다운로드
      • 5.1.2 툴체인 다운로드
    • 5.2 Java API Hooking을 활용한 동적 분석
      • 5.2.1 Cydia Substrate를 이용한 자바 API 후킹
      • 주입기 설치
      • 자바 API 후킹 모듈 개발
      • 분석 및 코딩 시작
      • 직접 만들어보자
      • 5.2.2 Xposed를 이용한 자바 API 후킹
      • 개발 환경 구축
      • 모듈 업데이트
      • 후킹 모듈 개발
    • 5.3 Frida 활용한 동적 분석
      • 5.3.1 Frida 설치
      • 5.3.2 Frida-trace를 이용한 시스템콜 후킹
      • 5.3.3 Frida 모듈을 이용한 스크립트 작성
      • 5.3.4 Frida를 이용한 자바 후킹

  • 6장. 안드로이드 앱(APK) 디버깅
    • 6.1 GDB를 이용한 Android Remote Debugging
      • 6.1.1 ADB를 이용한 안드로이드 기기 접속
    • 6.2 IDA Pro를 이용한 APK 디버깅
      • 6.2.1 환경 변수 설정
      • 6.2.2 앱 설치
      • 6.2.3 디버깅 시작
      • 6.2.4 문제 해결
    • 6.3 IDA 프로를 이용한 classes.dex & 공유 라이브러리 디버깅
      • 6.3.1 환경 변수 등록확인
      • 6.3.2 Android NDK 설치
      • 6.3.3 환경 변수 등록
      • 6.3.4 컴파일
      • 6.3.5 custom_rules.xml 수정
      • 6.3.6 두 개의 IDA 인스턴스 생성
    • 6.4 IDA Pro를 이용한 JNI 공유 라이브러리 디버깅 방법 1
      • 6.4.1 환경 구축
      • 6.4.2 Linker 복사
      • 6.4.3 공유 라이브러리 복사
      • 6.4.4 도구 개발
      • 6.4.5 Android.mk 파일 작성
      • 6.4.6 Makefile 작성
      • 6.4.7 컴파일
      • 6.4.8 안드로이드 기기 작업
      • 6.4.9 ADB 포트 포워딩
      • 6.4.10 IDA Pro 설정
      • 6.4.11 브레이크 포인트 설정
      • 6.4.12 디버그 설정
      • 6.4.13 안드로이드 기기 작업
      • 6.4.14 포트 포워딩
    • 6.5 IDA Pro를 이용한 JNI 공유 라이브러리 디버깅 방법 2
    • 6.6 IDA Pro를 이용한 JNI 공유 라이브러리 디버깅 방법 3
      • 6.6.1 STEP 1 달빅 런타임 후킹
      • 6.6.2 STEP 2 SDK에 포함된 ddms 실행
      • 6.6.3 STEP 3 안드로이드 서버 전송 및 실행
      • 6.6.4 STEP 4 adb forward
      • 6.6.5 STEP 5 애플리케이션 설치 및 실행
      • 6.6.6 STEP 6 IDA 실행 및 디버거 연결
    • 6.7 마치며

도서 오류 신고

도서 오류 신고

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

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

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

정오표

정오표

[p.23 : 아래에서 5행]
새로운 액티비
->
새로운 액티비티

[p.25 : 아래에서 2행]
메모리에서 살아질
->
메모리에서 사라질

[p.32 : 위에서 5행]
prifix:
->
prefix:

[p.157 : 11행]
문자열을 읽을 한 번에 읽을
->
문자열을 한 번에 읽을

[p.251 : 아래 이미지]

[p.256]

[p.288 : 두 번째 그림 아래 설명]
▲ R8 에서 확인된 키 값
->
▲ R1 에서 확인된 키 값