Top

실전 연습으로 완성하는 리버싱 [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에서 활용할 수 있는 치트시트, 이 책의 연습문제 풀이, 약어집과 용어 정리, 참고 문헌 등을 제공한다.

저자/역자 소개

저자 서문

우선, 이 책의 한국어판 출간 작업을 진행한 에이콘출판사와의 작업이 매우 원활해서 대단히 행복했다. 내가 아는 기술 서적 저자에게도 에이콘을 추천해볼 생각이다. 한국어 번역을 맡은 민병호 님에게도 감사의 말을 전한다.

원자력 시설 등 잘 알려진 기관을 대상으로 행해진 악명 높은 공격을 놓고 봤을 때 리버스 엔지니어링은 미래가 아니라 지금 당장 굉장히 중요한 기술이다. 모두 알다시피 사이버전쟁은 현실이며, 보안 전문가들은 전장에서 치열한 전투를 벌이고 있다. 리버스 엔지니어링에 대한 지식 없이 악성코드나 백도어, 취약점 등을 분석하는 건 불가능하다.

리버스 엔지니어링은 소프트웨어와 하드웨어 시스템의 동작을 이해하고 해킹함으로써 시스템을 개선하는 작업처럼 좀 더 평화로운 분야에도 적용할 수 있다. 나는 호기심 많은 해커로 보안 경력을 시작했으며, 이제까지 쌓은 지식의 상당 부분은 이런 보안 개선 작업을 통해 습득한 것이다.

이 책이 독자 여러분의 리버스 엔지니어링 공부에 도움이 되면 좋겠다. 리버스 엔지니어링도 여타 기술처럼 평생 공부해야 하는 분야다. 부디 이 책이 여러분의 끝없는 여행을 돕는 주춧돌이 되기 바란다.

저자 소개

데니스 유리체프 (Dennis Yurichev)

우크라이나 출신의 숙련된 리버스 엔지니어이자 프로그래머로, 오라클 RDBMS 보안 연구가로 알려져 있다. 현재는 VMware에 일부가 된 벤처 기업 블루레인(Bluelane)에서 보안 연구가로 일한 바 있다. 저자의 사이트는 http://yurichev.com/이며, 이메일은 dennis@yurichev.com이다.

역자 서문

'삼국지'라는 게임이 시리즈로 연이어 성공할 때 처음으로 리버싱이란 개념을 들었다. 몇 가지의 삼국지 게임 에디터를 어렵지 않게 구할 수 있는 때였는데, 나는 그 원리가 궁금했고 수소문 끝에 게임 바이너리와 메모리를 분석하고 변조하면 장수의 능력치와 장비를 수정할 수 있다는 사실을 알게 됐다. 장수의 능력치를 수정하는 간단한 에디터를 구현하는 데까지는 성공했지만, 시중의 에디터보다 좋은 점이 없었기에(나중에 안 사실이지만 당시 가장 강력한 에디터는 대학 동기가 개발한 것이었다) 개발을 중단했다. 시간이 흘러 대학생이 된 후 보안 동아리에 가입하면서 리버싱을 다시 접하게 됐다. 이때에는 소스코드가 공개되지 않은 소프트웨어의 동작을 분석하고 보안 취약점을 찾기 위한 목적으로 좀 더 진지하게 리버싱을 공부했다.

독자 여러분도 각자의 동기를 가지고 리버싱 공부를 시작했을 것이다. 지난 몇 년 동안 리버싱 책이 꽤 많이 출간됐지만, 이 책은 여러 측면에서 이제까지 국내에 출간된 책과 분명히 차별화된다. 우선 이 책의 가장 큰 장점은 주로 x86 윈도우 리버싱을 다룬 기존 서적과 달리 다양한 아키텍처와 플랫폼을 다뤘다는 점이다. 단순히 여러 아키텍처를 순차적으로 설명하는 방식이 아니라, 한 프로그램을 여러 아키텍처용으로 컴파일한 후 결과를 비교 설명하기 때문에 윈도우를 비롯해 리눅스와 맥, 모바일 플랫폼용 소프트웨어까지 리버싱해야 하는 독자에게 최고의 선물이 될 수 있다. 특히 윈도우 리버싱에는 익숙하지만 다른 아키텍처는 낯선 독자들은 이 책에서 다른 아키텍처의 리버싱을 정복하는 지름길을 찾을 수 있을 것이다.

엄청난 분량에도 불구하고, 운영체제나 악성코드 등 배경 지식 설명에 상당량을 할당한 기존 서적들과는 달리 책의 대부분이 리버싱과 직접 관련된 내용이라는 점도 놀랍다. 덕분에 초보자에게는 더할 나위 없이 좋은 교과서며, 중급 이상자에게는 저자만의 리버싱 팁을 배울 수 있는 비기가 된다. 또한 바이너리 분석 시 기억해두면 좋은 코드 패턴을 집대성한 부분에서는 리버싱 작업의 시간 절약 노하우까지 배울 수 있다. 리버싱 작업 시 필요한 수많은 명령어와 아키텍처별 특징을 모두 기억하기 어렵다는 점을 잘 이해하는 저자는 이 책을 참고 서적으로도 활용할 수 있게 관련 내용을 한데 모아두고 있다. 이 책은 저자의 공식 문서 사이트인 http://beginners.re/에서 영문판과 러시아어판이 무료로 배포되고 있어서 현재 시점에서 누구나 온라인 문서 파일을 내려받을 수 있다. 저자의 온라인 문서는 세계 최초로 종이책으로 출간된 한국어판에 이어 곧 영문판으로도 공식 출간될 예정이라고 들었다.

옮긴이로서 바라건대, 부디 리버싱을 막 시작한 독자와 자신의 리버싱 능력을 다양한 아키텍처로 확장하고자 하는 독자, 그 밖에 다양한 동기로 책을 구매한 모든 독자가 소기의 목적을 달성하는 데 도움이 된다면 좋겠다. 책을 읽는 데서 그치지 않고 책의 예제와 연습문제를 실제로 해결하다 보면 목표한 바를 반드시 이룰 수 있을 것이다.

역자 소개

민병호

서울대학교 컴퓨터공학부에서 학사와 석사학위를 마치고 정보 보안 연구원으로 활동했으며, 현재는 유학길에 올라 박사 과정을 밟고 있다. 11권의 IT와 보안 전문서를 번역했다.

목차

목차
  • 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 참고문헌

도서 오류 신고

도서 오류 신고

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

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

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

정오표

정오표

2015-02-09

p30. 57 -> 57장