실전 연습으로 완성하는 리버싱 [x86/x64 윈도우, 리눅스부터 모바일 ARM iOS까지]
- 원서명Reverse Engineering for Beginners
- 지은이데니스 유리체프(Dennis Yurichev)
- 옮긴이민병호
- ISBN : 9788960776647
- 59,800원
- 2015년 01월 29일 펴냄
- 페이퍼백 | 1,160쪽 | 188*250mm
- 시리즈 : 해킹과 보안
판매처
개정판책 소개
요약
국내 출간된 리버싱 서적 중 다양한 아키텍처를 비교하며 배울 수 있게 구성된 책은 이 책이 유일하다. 따라서 이 책은 리버싱 공부를 시작하는 초보자뿐만 아니라 다양한 플랫폼으로 자신의 리버싱 능력을 확장하고자 하는 중급 이상 개발자에게도 더할 나위 없이 좋다. 풍부한 예제와 흥미로운 실전 연습문제를 해결하다 보면 x86 윈도우, 리눅스부터 64비트 모바일 ARM iOS 리버싱까지 섭렵한 자신을 발견할 수 있다.
이 책에 쏟아진 찬사
이렇게 잘 쓴 글을 무료로 배포하다니 끝내준다. 서슴없이 그에게 50불을 보내줬다.
- 대니얼 빌라(Daniel Bilar) / 씨지 테크놀로지(Siege Technologies), 트위터(@danielbilar) 글에서_
데니스 유리체프가 쓴 온라인 무료 문서를 읽었다. 훌륭하다!
- 피트 피니건(Pete Finnigan) / 오라클(Oracle) RDBMS 보안 전문가, 트위터(@petefinnigan) 글에서
흥미로운 책이다. 대단한 작업을 해냈다!
- 마이클 시코스키(Michael Sikorski) / 『실전 악성코드와 멀웨어 분석』(에이콘출판, 2013) 저자
이 훌륭한 리버싱 가이드에 찬사를 보낸다!
- 헤어버트 보쉬(Herbert Bos) / VU 대학교 암스테르담의 정교수
믿기 어려울 정도로 놀라운 책이다.
- 루이스 로차(Luis Rocha) / CISSP/ISSAP, 버라이즌 비즈니스(Verizon Business)의 네트워크 및 정보보안 기술 매니저
엄청난 노력과 훌륭한 책에 감사를 표한다.
- 요리스 판 더 피스(Joris van de Vis) / SAP 넷위버 및 보안 분야 전문가
적절한 리버싱 기술 입문서다.
- 마이크 스테이(Mike Stay) / 미연방법집행훈련센터의 강사, 레딧닷컴(reddit.com) 리뷰글에서
정말 마음에 드는 책이다! 이 책을 읽는 학생을 여럿 봤으며, 대학원 과목 강의에서 활용할 예정이다.
- 세르게이 브라투스(Sergey Bratus) / 다트머스 대학 컴퓨터과학 학부의 연구조교수, 트위터(@sergeybratus) 글에서
이 책에서 다루는 내용
■ 윈도우, 리눅스, 맥, 모바일 플랫폼 등 다양한 운영체제에 따른 소프트웨어 리버싱
■ 리버싱을 할 때 꼭 알고 있어야 할 코드 패턴 익히기
■ 여러가지 정보를 활용해 코드의 주요 부분을 찾아내는 방법
■ 리버싱 작업의 생산성을 높일 수 있는 운영체제 특기 사항
■ 리버싱에 유용한 도구 소개
■ 재미있는 예제부터 대규모 소프트웨어 리버싱까지 다양한 실전 연습
■ 비공개 파일 포맷을 리버싱하고 분석하는 방법
■ 리버싱 작업 시 알아두면 좋을 광범위한 내용 설명
■ 각종 참고 자료와 연습문제 활용
이 책의 대상 독자
직접적인 대상 독자는 악성코드 분석과 취약점 분석, 버그 헌팅 등을 공부하고자 하는 사람이다. 해당 분야의 전문가라 하더라도 다양한 플랫폼으로 자신의 능력을 확장하고자 하는 사람이라면 이 책에서 많은 도움을 받을 수 있다. C/C++ 언어에 익숙한 사람이라면 충분히 이해할 수 있기에 리버싱에 관심만 있다면 보안 초보자도 어렵지 않게 읽을 수 있다.
이 책의 구성
1부, '코드 패턴'
은 책의 절반 이상을 차지하는 주요 부분이다. 스택, 함수 프롤로그와 에필로그, 함수 인자 처리 등의 기본 사항에서부터 리버싱 시 반드시 알고 있어야 할 다양한 코드 패턴에 이르기까지 리버싱 기본의 모든 것을 다룬다. C 언어의 핵심인 포인터, 루프, 문자열 처리, 배열, 구조체 등은 물론이고 SIMD, 64비트, 인라인 함수, ARM 특기 사항, 난독화, 객체지향 언어 C++ 리버싱 등 폭넓은 코드 패턴을 설명하므로 기존 리버스 엔지니어도 배울 수 있는 내용이 많다.2부, '꼭 알아둘 기본 사항'
은 리버싱 세계에 뛰어들기 전에 반드시 이해해야 하는 내용인 컴퓨터의 숫자 표현 방식, 메모리 유형 등을 다룬다.3부, '코드에서 중요하고 흥미로운 부분 찾아내기'
는 아무런 근거 없이 코드를 처음부터 끝까지 분석하는 건 리버싱 공부에는 도움이 될지 몰라도 업무 생산성 측면에서는 매우 비효율적인 작업이다. 다시 말해서 바이너리 분석 시 매우 중요한 작업은 자세히 분석할 부분을 찾아내는 것이다. 3부에서는 바이너리 생성에 사용된 컴파일러, API, 문자열 등 다양한 정보를 활용해서 코드의 주요 부분을 찾아내는 방법을 설명한다.4부, '운영체제 특기 사항'
은 운영체제에 따른 호출 규약과 시스템 호출의 차이, 리눅스의 위치 독립적 코드와 윈도우의 SEH 등 코드 이해에 큰 도움이 되는 사항을 알아본다. 3부와 함께 리버싱 작업의 생산성을 높일 수 있는 내용을 다루는 부분이다.5부, '도구'
에서는 리버싱에 유용한 도구를 소개한다.6부, '실전 예제'
에서는 윈도우 작업 관리자, 게임, 동글 해킹처럼 재밌는 실전 예제부터 SAP이나 오라클 같은 대규모 소프트웨어의 리버싱까지 설명한다. 앞서 공부한 내용을 실제 리버싱 환경에서 어떻게 활용하는지 배울 수 있다.7부, '비공개 파일 포맷 리버싱 예'
에서는 악성코드나 소프트웨어 취약점을 분석하다 보면 실행 바이너리 이외의 파일을 분석해야 하는 경우도 있다. 7부에서는 이런 종류의 파일을 어떻게 리버싱하고 그 내용을 이해할 수 있는지 다룬다.8부, '기타 사항'
에서는 npad, 컴파일러 인트린직 등 한 가지 주제로 묶긴 어렵지만 리버싱 작업 시 알아두면 편리한 내용을 한데 모아 설명한다.9부, '추천 책과 블로그'
에서는 리버싱 공부 시 참고하면 좋은 책과 블로그를 소개한다.10부, '연습문제'
에서는 쉽게 해결할 수 있는 1단계부터 하루 혹은 며칠을 투자해야 풀 수 있는 3단계까지, 책에서 다룬 내용을 몸으로 익힐 수 있는 연습문제를 제공한다. 연습문제를 모두 해결하면 상당한 수준의 리버스 엔지니어 경지에 오를 수 있을 것이다.'부록'
에서는 x86과 ARM에 쓰이는 용어와 꼭 알아두면 좋을 사항, GCC와 MSVC 라이브러리 함수, IDA와 OllyDbg에서 활용할 수 있는 치트시트, 이 책의 연습문제 풀이, 약어집과 용어 정리, 참고 문헌 등을 제공한다.목차
목차
- 1부 코드 패턴
- 1장 간단한 CPU 입문
- 2장 헬로, 월드!
- 3장 함수 프롤로그와 에필로그
- 4장 스택
- 5장 여러 개의 인자를 취하는 printf()
- 6장 scanf()
- 7장 전달된 인자에 접근
- 8장 리턴 결과 더 알아보기
- 9장 포인터
- 10장 GOTO
- 11장 조건부 점프
- 12장 switch()/case/default
- 13장 루프
- 14장 간단한 C 문자열 처리
- 15장 산술 연산 명령어 치환
- 16장 부동소수점 장치
- 17장 배열
- 18장 특정 비트 처리
- 19장 구조체
- 20장 공용체
- 21장 함수 포인터
- 22장 32비트 환경에서의 64비트 값
- 23장 SIMD
- 24장 64비트
- 25장 SIMD로 부동소수점 숫자 처리
- 26장 온도 변환
- 27장 피보나치 수열
- 28장 C99의 restrict
- 29장 인라인 함수
- 30장 부정확한 디스어셈블링된 코드
- 31장 C++
- 32장 난독화
- 33장 ARM 심화 학습
- 34장 윈도우 16비트
- 2부 꼭 알아둘 기본 사항
- 35장 부호 있는 숫자의 표현
- 36장 엔디안
- 37장 메모리
- 38장 CPU
- 3부 코드에서 중요하고 흥미로운 부분 찾아내기
- 39장 실행 파일 식별
- 40장 프로그램 외부와의 통신(Win32)
- 41장 문자열
- 42장 assert() 호출
- 43장 상수
- 44장 특정 명령어 찾아내기
- 45장 의심스러운 코드 패턴
- 46장 추적 중에 매직 숫자 사용
- 47장 기타 사항
- 48장 오래됐지만 흥미로운 기술
- 4부 운영체제 특기 사항
- 49장 인자 전달 방법(호출 규약)
- 50장 스레드 지역 저장소
- 51장 시스템 호출(syscall)
- 52장 리눅스
- 53장 윈도우 NT
- 5부 도구
- 54장 디스어셈블러
- 55장 디버거
- 56장 시스템 호출 추적
- 57장 디컴파일러
- 58장 기타 도구
- 6부 실전 예제
- 59장 작업 관리자 속이기(윈도우 비스타)
- 60장 컬러 라인스 게임 해킹
- 61장 지뢰 찾기(윈도우 XP)
- 62장 수동 디컴파일링과 Z3 SMT 솔버
- 63장 동글
- 64장 QR9: 아마추어 암호화 알고리즘에 기반을 둔 루빅스 큐브
- 65장 SAP
- 66장 오라클 RDBMS
- 67장 손으로 작성한 어셈블리 코드
- 68장 데모
- 7부 비공개 파일 포맷 리버싱 예
- 69장 밀레니엄 게임 저장 파일
- 70장 오라클 RDBMS: .SYM 파일
- 71장 오라클 RDBMS: .MSB 파일
- 8부 기타 사항
- 72장 npad
- 73장 실행 파일 패치
- 74장 컴파일러 인트린직
- 75장 컴파일러 이상 동작
- 76장 OpenMP
- 77장 아이태니엄
- 78장 8086 메모리 모델
- 79장 기본 블록 재배치
- 9부 추천 책과 블로그
- 80장 추천 책
- 81장 추천 블로그
- 82장 기타
- 10부 연습문제
- 83장 1단계 연습문제
- 84장 2단계 연습문제
- 85장 3단계 연습문제
- 86장 크랙미/키젠미
- 87장 질문
- 부록 A x86
- 부록 B ARM
- 부록 C GCC 라이브러리 함수
- 부록 D MSVC 라이브러리 함수
- 부록 E 치트시트
- 부록 F 연습문제 풀이
- 부록 G 약어집
- 부록 H 용어 정리
- 부록 I 참고문헌