메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

리버스 엔지니어링 2권(디버거 편)

윈도우 실행 파일 구조와 원리로 배우는

한빛미디어

집필서

판매중

  • 저자 : 이호동
  • 출간 : 2017-03-01
  • 페이지 : 1396 쪽
  • ISBN : 9788968484810
  • 물류코드 :2481
초급 초중급 중급 중고급 고급
4.6점 (7명)
좋아요 : 1

리버스 엔지니어라면 반드시 소장해야 할 최고 명저의 재래 

리버스 엔지니어링을 진수! 디버거 제작에 도전하라! 

 

이 책은 PE 파일 포맷을 완벽하게 분석하여 리버스 엔지니어 필독서로 꼽히던 『Windows 시스템 실행 파일의 구조와 원리』의 확장 개정판이다. 총 2권 구성으로 1권에서는 64비트 PE+의 각 세션에 대해 알아본다. 2권은 1권에서 미처 다루지 못한 PE 세션을 알아보고, 디버거를 만들면서 악성 코드 침투에 대응하는 메모리 침투 방법을 다룬다. 이론과 실전 기법 모두를 제공하는 리버스 엔지니어링 최고의 바이블이다.

 

* 이 책은 전 2권 세트 중 2권으로 11장에서 21장까지 내용을 다룹니다. 1권(1장~10장)은 별매입니다.

 

undefined

 

 

 

저자

이호동

연세대 전자공학과를 졸업했지만 학창시절 C와 어셈블리어에 빠진 이후 계속 소프트웨어 개발자의 길을 걷고 있다. 학창시절 IT 환경이 무르익기 전부터 IT 월간지에 기사를 연재하면서 정보 공유와 집필 욕구를 키웠다. 16년간의 직장 생활에서 경험한 대용량 서버 사이드 개발, 클라이언트 보안 및 디바이스 드라이버 개발 등을 바탕으로 오랫동안 연구하고 학습하여 고급 개발 영역에서 꼭 필요한 분야를 집필하게 되었다.
주로 어셈블리, C/C++, COM, C#, JAVA를 다루며, 현재는 ㈜허니냅스에서 S/W 개발 팀장으로 생체 신호 관련 임베디드 리눅스 S/W 및 서버 개발을 담당하고 있다.
 
저서_ 『Windows 시스템 실행 파일의 구조와 원리』
저서_ 『IT EXPERT 윈도우 시스템 프로그램을 구현하는 기술』

[4부 코드 분석]

 

11장 어셈블리 언어 개요

__11.1 CPU 개요

__11.2 어셈블리 둘러 보기

 

12장 코드 섹션과 함수

__12.1 32비트에서의 함수

__12.2 64비트에서의 함수

 

13장 코드 섹션 디스어셈블링

__13.1 명령 포맷

__13.2 OP 코드 상세

__13.3 디스어셈블러 구현

__13.4 코드 섹션 함수 구성

 

14장 디버그 섹션과 PDB

__14.1 디버그 섹션

__14.2 PDB 분석

__14.3 PDB와 PE

 

[5부 예외 처리]

 

15장 구조적 예외 처리(SEH)

__15.1 SEH의 개요

__15.2 종료 처리

__15.3 예외 처리

__15.4 처리되지 않은 예외

__15.5 C++와 SEH

 

16장 32비트 SEH

__16.1 Win32에서의 SEH 구조

__16.2 컴파일러 레벨의 SEH 

__16.3 C++ 예외 핸들러 

 

17장 함수, 예외와 .pdata 섹션

__17.1 .pdata 섹션

__17.2 해제 정보

__17.3 예외/종료 핸들러 정보

 

18장 64비트 SEH

__18.1 함수 호출 스택과 해제 처리

__18.2 SEH 관련 64비트 전용 API

__18.3 64비트 SEH 처리 과정

 

19장 메모리 보호

__19.1 스택 오버플로 공격과 GS

__19.2 다양한 메모리 보호 방식

 

[6부 디버거 구현]

 

20장 디버거 기본

__20.1 디버깅 작동 원리

__20.2 디버거 PE Frontier 구성

 

21장 디버거 심화

__21.1 중단점 설정

__21.2 디버거 PE Frontier 심화

★ 윈도우 EXE, DLL, SYS 파일 구조 완벽 분석과 디버거 실전 개발까지!

EXE, DLL, SYS 파일 등의 PE 파일 포맷과, 고급 디버깅 또는 리버스 엔지니어링에 관심이 있는 독자를 대상으로 한다. 총 두 권 구성으로 PE 파일의 구조뿐만 아니라 코드의 구성, 디버거 구현의 원리, 리버스 엔지니어링 기법을 다룬다.

 

_1권 파일 구조 편

『Windows 시스템 실행 파일의 구조와 원리』의 개정판이라고 할 수 있으며, 거기에서 다루지 않았던 PE 파일의 섹션까지 포함하여 64비트 윈도우 실행 파일을 중심으로 설명한다. 총 3부로 구성되어 있으며, 윈도우 실행 파일의 헤더 및 텍스트, 데이터, 내보내기, 가져오기, 지연 로드 섹션 그리고 TLS 섹션, 리소스 섹션 등을 자세히 다룬다.

 

*1부 PE 입문 : PE 구조의 전반적인 이해를 위한 개괄적인 내용을 다룬다.

*2부 DLL과 PE : DLL 작성 및 로딩과 관련된 PE 파일에 대한 분석 내용을 다룬다.

*3부 나머지 PE 섹션 : 리소스 섹션을 포함하여 검토할 만한 기타 PE 섹션을 설명한다.

 

 

_2권 디버거 편

PE의 관점에서 본 리버스 엔지니어링에 초점을 맞추어 간단한 디버깅 툴의 구현을 목적으로 한다. 총 3부로 구성되어 있으며 32비트와 64비트 함수의 구조, 코드 디스어셈블, 디버그 섹션 및 PDB 파일 활용법, 윈도우 32비트 및 64비트 구조적 예외 처리와 64비트 함수 분석에 매우 중요한 역할을 하는 .pdata 섹션 등을 다룬다. 또한 악성 코드의 메모리 침투에 대응하는 메모리 보호 방법과 윈도우 기반의 간단한 디버깅 툴 구현을 소개한다.

 

*4부 코드 분석 : 디스어셈블러 구현을 위해 PE 코드 섹션의 구조를 상세히 다룬다.

*5부 예외 처리 : 디스어셈블러 구현의 중요 요소인 구조체 예외 처리 및 보안 기능을 알아본다.

*6부 디버거 구현 : 디버거 구현 원리를 설명하고 실제 간단한 디버거를 구현한다.

 

★ 이 책의 독자

이 책은 고급 디버깅, 리버스 엔지니어링에 관심이 있는 독자를 대상으로 한다. 다소 깊이 있는 주제임을 고려하여 가능한 한 쉽게 설명하고자 많은 예제 덤프와 그림을 제시하였다. 따라서 위에서 언급한 내용에 관심이 있고, C/C++ 언어에 익숙하고, 윈도우 시스템에 대한 어느 정도 배경지식을 갖춘 독자라면, 이 책을 통해서 PE 파일의 구조뿐만 아니라 코드의 구성과 디버거 구현 원리, 리버스 엔지니어링을 이해하게 될 것이다.

  • 최근들어 보안을 공부하면서 계속해서 드는 생각이 있다. 특히 침해사고 대응이나 악성코드 분석을 하려면 궁극적으로 그 원인이 된 바이너리 파일의 행위를 규명해야 한다. 그리고 그것은 리버스 엔지니어링의 영역이다. 바이너리 코드는 컴퓨터가 이해하는 2진수 형식으로 표기되어 있고, 이 기계어를 사람이 직접 이해하기는 무리가 있으므로 그 중간단계인 어셈블리 언어 수준에서 어느정도 해석이 가능해진다.

     

    사실 대부분의 프로그래머들은 어셈블리언어도 잘 모르고, 그저 C언어 또는 Java 수준의 High-Level 언어로만 프로그램을 작성한다. 그러면 컴파일러에 의해 자동으로 어셈블->기계언어로 처리되어 바이너리(실행파일)이 생성된다. 이 실행파일을 거꾸도 되돌릴 수만 있다면, 소스코드가 주어지지 않은 상황에서도 남의 프로그램의 작동원리를 간파할 수 있게 된다. 그래서 "어셈블리 언어를 읽을 수 있다면, 모든 프로그램이 오픈소스처럼 보인다." 라는 명언이 있다. 이러한 분야를 통칭 '리버싱', '리버스 엔지니어링', '역공학' 등의 용어로 표현한다.

     

    1E46S.jpg

     

     

    시중에 리버싱 관련 서적은 내가 아는 것만 10종 가까이 된다. 하지만 안타깝게도 대부분은 너무 어렵거나 지나치게 자세하여 독자의 전의를 상실하게 만든다. 그리고 어떤 것은 국제적인 역작임에도 불구하고 난해한 번역으로 인해 내용파악이 쉽지 않은 현실이다. 이에 최근 한빛미디어에서 출간된 '윈도우 실행파일 구조와 원리로 배우는 - 리버스 엔지니어링'이라는 도서가 굉장히 좋은 것 같아서 읽어보게 되었다.

     

    KakaoTalk_20170811_124524475.jpg

    이 책은 원래 2005년 출간되었던 'Windows 시스템 실행파일의 구조와 원리'가(현재는 절판상태) 확대개정되어 2016년 출간된 것으로, 1권과 2권을 합치면 2000 페이지가 넘는 어마어마한 책이다. 

     

    1권은 '파일구조'편이고, 2권은 '디버거'편이다. 책의 두께를 다른 책과 비교해보자면 아래와 같이 상당함을 알 수 있다. 그리하여 1권은 알라딘에서 E-Book 형태로 구매하였고 추가적으로 카이스트 도서관에 신간서적 구매신청을 통해 하드카피 본으로도 읽을 수 있었다. 2권은 한빛출판의 리뷰어로 선정되어 감사하게도 증정받을 수 있었다.


    이 책을 펼쳤을 때 그간 읽었던 다른 바이블과 같은 리버싱 서적들과 비교되는 가장 큰 장점은, 현시점 최신 운영체제인 Windows 10을 기준으로 작성되었다는 점이다. 다른 서적들은 보통 편의를 위해 Windows XP 환경에서 32bit 바이너리를 분석하는 것에만 그치고 있다. 그러나 요즘은 64bit를 거의 기본으로 채택하고 있음에도 64bit 구조에 맞추어 설명하는 내용이 거의없어서 오히려 독자들이 32bit환경을 구축해서 실험해야 한다는 어려움이 있었다. 그러나 이 책은 Windows 10에서 Visual Studio 2015 와 Win SDK를 사용해서 실습을 진행하므로 굳이 예전의 환경으로 역주행하는 불편은 없을 것이다.


    1편은 파일구조를 다루는데, 이 책이 Windows 환경을 기반으로 하고 있으므로 PE, PE+ 을 중점적으로 설명한다. (참고로 리눅스 바이너리는 ELF, macOS 바이너리는 Mach-O라고 부른다.) 대부분의 윈도우 악성코드들을 정적분석할 때에는 먼저 PE헤더에 포함되어 있을지도 모르는 다양한 정보들을 검사하는 것부터 시작한다. 1편의 대부분의 장에서는 DLL과 PE 내부적 구조를 이해하는 것으로 지면을 할애한다. 사람의 머리로는 언뜻 그려내기 어려운 구조들은 그림으로 시각화하여 아래와 같이 이해를 쉽게 돕는다.

     

    2편인 디버거 편에서는 SEH, DEP, ASLR 등의 메모리 보호기법을 설명하고, 직접 디버거를 구현해보는 단계까지 진행한다. 

     

    알다시피 2편은 1300page가 넘는 분량이므로 책 전체를 읽고 리뷰하는 것이 상당히 힘들었다. 아직은 본인의 내공이 딸려서 내용을 모두 이해한 것은 아닌 듯 싶다. 내용 자체가 깊고 어렵기에 C, C++에 익숙하고 윈도우 시스템에 대해 어느정도 배경지식을 충분히 갖춘 독자가 읽는 것이 좋을 것 같다. 나도 나머지 부분까지 열심을 내어 꼭 정독할 것이다.

     

  • 리버스 엔지니어링이라고 하면 드는 생각이 먼저 '어려워 보인다'가 아닐까 싶다. 실제로도 그럴것 같은게 이미 만들어진 것을 보고 뜯어서 원래의 것을 도출하고 알아내야 하기 때문이지 않을까. 심지어 책이 매우 두껍다!(무려 1396페이지. 토비의 스프링 3.0만큼 두껍다)

    이책은 윈도우 프로그래밍에 대한 리버스 엔지니어링과 고급 디버깅에 관심이 있는 분에게 초점이 맞추어진 중고급이상 레벨의 책이다! 그래서 개발 환경은 윈도우10 + Visual Studio 2013(or 2015), Windows SDK 10이다. 윈도우 프로그래밍에 대해 잘 알지 못해 코드, 덤프등을 봐도 완전히 이해는 못했다.

     

    기본적인 PE(Portable Executable)의 파일구조 등은 1편에서 이미 소개를 했고, 2편에서는 본격적으로 리버스 엔지니어링과 디버거 구현에 대해 설명한다.  초반 어셈블리에 대한 설명에 들어가기 앞서 우리가 사용하는 CPU에 대해 간단히 역사를 훑는다. 32bit에서 64bit 컴퓨터 시대로 넘어올 때 인텔과 AMD의 미묘한 관계는 흥미롭다. 지금도 두 기업의 경쟁이 현재진행형인 점을 보면 둘 다 모두 대단한 기업임이 틀림없다. 어셈블리어에 대한 설명을 보고 있노라니 학부시절 컴퓨터 구조와 임베디드 프로그래밍 하던 시절이 생각이 난다. 레지스터, Accumulator, Program Counter, Stack Pointer 등 중요하면서도 기본적인, 컴퓨터의 근간을 이루는 것들은 다시 한 번 제대로 정리할 필요가 있을 것 같다.

     

    다양한 덤프 코드들과 자세한 그림을 바탕으로 설명이 진행되어 찬찬히 두고 읽으면 꼭 리버스 엔지니어가 아니더라도 많은 도움이 될 책이라 생각이 된다.

     

     

    윈도우 실행 파일 구조와 원리로 배우는 리버스 엔지니어링 2 디버거 편, 한빛미디어(이호동)

     

     

  • 이 책은 x86/x64 어셈블리 학습을 시작으로 어셈블리에 매칭되는 기계어를 표현하는 방법, 예외 처리시의 어셈블리 레벨에서 Windows 응용 프로그램이 동작하는 방법, 악성코드의 메모리 침투에 대한 보호 방법, 그리고 이 모든 것을 바탕으로 간단한  Windows 디버거를 작성하는 내용을 다루고 있습니다.

     

    이전에 이책의 저자인 이호동 님의 Windows 시스템 실행파일의 구조와 원리 책을 잠깐 접하고 Windows PE의 구조를 학습해 본 적이 있어서 비교적 친근하게 읽을 수 있었지만, 다루는 내용이 저수준의 기계어 및 어셈블리 어의 내용인 만큼 학습하는데 일정 수준의 노력이 필요하였습니다.

     

    시중에 나온 책중 Windows PE의 구조 및 예외처리의 과정에 대해 이 책처럼 상세히 다룬 책은 많지 않을 것 같습니다.

    특히 x86과 x64은 어셈블된 파일 및 기계어의 구조가 많이 다른데 이 부분에 대해서도 하나하나 친절하게 상세한 설명이 담겨 있습니다.

     

    개인적으로는 VC++의 try/catch, SEH가 내부적으로 어떻게 동작하는지에 대한 궁금증을 가지고 있었는데 이 책을 통해 해당 부분의 궁금증이 해소가 되었습니다.

     

    Windows 응용프로그램을 어셈블리어/기계어 수준에서 이해하고 예외처리 및 디버거에 대한 학습을 원한다면, 이 책을 통해 학습하실 수 있으리라 생각합니다.

     

    리버스엔저니어링2.jpg

     

  •  

    리버스 엔지니어링 2권 디버거 편 - 1.png

     


     

    이전의 리버싱 관련 서적들은 Windows XP 32bit를 기준으로 작성된 것이 많아 가상환경에서 실습을 진행했어야하는데, 이 책의 기본적인 실습 환경은 Windows 10 64bit로서 최신 환경을 기준으로 책이 작성되었습니다. (상당히 만족스럽습니다!)


    이 책의 1권에서는 PE파일의 구조에 대해서 살펴보고 있으며, 제가 읽고있는 2권은 간단한 디버깅 툴의 구현을 목적으로하여 어셈블리 언어와 예외 처리에 대해서 다루고, 마지막으로 디버거 구현까지 완료하는 순서로 구성되어있습니다.

    물론 C/C++을 어느정도 다룰줄 아는 분들이 봐야 적합한 수준입니만, 각각의 개념들에 대해서도 그림으로 친절하게 잘 설명되어 있어서 중급자정도 수준을 갖추셨다면 충분히 읽을 수 있는 책입니다.

    또한, 리버싱을 공부하는 데에 있어서 겪을 수 있는 어려움 중 하나가 어셈블리 언어에 대한 것인데, 정말 상세한 부분까지 설명되어있어서 처음 어셈블리 언어를 접하는 분들도 쉽게 익힐 수 있어보입니다.

  •  리버스 엔지니어링(Reverse Engineering)이란 뭘까? 임베디드 개발을 얼마 해보진 않았지만, 그냥 나름대로 낸 생각으로는 만들어진 상태에서 어떤 과정을 거쳐 내부 동작 원리를 이해하고 분석하는 것이라고 생각한다. 물론 이게 처음 접하게 되면 무슨 내용인지 하나도 모른다. 그도 그럴게, 진짜 아무 툴도 없는 상태에서 동작원리를 알기란 쉽지 않기 때문이다. 그렇기 때문에 먼저 타겟 디바이스의 데이터 시트나 스펙을 읽고, 분석을 한다. 물론 운영체제와 같이 디바이스 상에서 돌아가는 SW의 형태도 분석하고, 그러고 나서 Trace32같은 하드웨어 디버거를 사용해서 실제 동작이 스펙에 나와있는 것과 같이 이뤄지는지를 확인하고 그 다음 과정을 거치곤 한다. 이런 모든 일련의 과정이 결국 디버깅이라는 게 개인적인 생각이다. 그래서 이 책을 읽고나서도 딱 드는 생각은 "아! 윈도우 환경에서 디버깅을 하기 위해 그 주변 환경을 분석하는 내용이구나" 였다.

     참고로 나는 회사에서 전문적으로 리버스 엔지니어링을 다루지는 않지만, 어느정도 프로세서와 운영체제의 동작원리에 대해서는 숙지하고 있는 상태이다. 이 리뷰도 그런 기준에서 작성되었으므로, 이 점을 참고하고 읽으면 좋을거 같다. 추가로 이번에 수령한 책은 2권만이며, 아쉽게도 1권의 내용은 담고 있지 않다. 그래서 1권에서 주로 다루고 있는 PE 구조에 대한 이해는 없는 상태에서 2권을 읽었다.

     우선 이 책은 2005년에 출시된 windows 시스템 실행파일의 구조와 원리의 개정판이다. 옛날 동아리 책꽂이에 이 책이 항상 꽂아 있었던게 기억이 나는데, 그도 그럴 것이 책 두께가 정말로 두꺼웠서 기억에 많이 남았다. 나는 열심히 듣지 못했지만 그때는 한창 Windows의 Portable Executable(PE) 구조를 스터디하면서 내부 구조를 살펴볼 수 있었던 좋은 책이었는데, 이번에 64 bit 환경에 맞춰 재출간되었다. 추가로 리버스 엔지니어링에 초점이 초점이 맞춰진 2권에서는 디버거를 직접 만드는 과정을 다루고 있다. 그래서 다루는 내용들이 

     - 어셈블리 언어를 분석하고, 
     - 디버거가 처리해야 되는 예외처리들과 이에 다루는 API들을 숙지하고,
     - 그리고 마지막으로 직접 디버깅을 구현하는 과정

    들로 구성되어 있다.

     이 책은 다루는 주제의 특성상 수많은 코드와 코드 테이블, 그리고 내부 구조에 대한 간단한 다이어그램이 담겨져 있다. 그 양의 정도가 좀(?) 많기 때문에, 처음 접하는 독자라면 그 두께에 겁을 먹을 수 있을 듯하다. 실제로 우리 집에도 두께 두꺼운 책들이 여러권 있기는 한데, 이 책이 내가 가진 책중 가장 두꺼운 것 같다. 그래서 한편으로는 챕터별로 분권해서 판매했으면 휴대성이나 보는 관점에서도 조금 좋지 않았을까 하는 생각을 잠깐 가진다. 

     그런데 그렇게 책이 두꺼운 만큼 코드와 다이어그램에 대한 설명이 정말 자세하다.

     특히 코드 진행에 있어 필요한 구조체와 플래그에 대한 설명, 그리고 설명한 필요한 경우 이에 대한 다이어그램와 테이블이 묘사가 되어있어 코드 분석에 있어 조금더 쉽게 이해할 수 있도록 도움을 준다. 글 문맥도 보면 의문을 가질 수 있는 부분에 대해서 질문을 던지고 이에 대한 답변을 서술형으로 풀어놓은 흔적들이 있어, 저자분께서 해당글을 쓰면서 많은 부분을 고민하고 쓴 흔적들이 책 중간중간에 남아있다는 느낌을 많이 받았다. 

     이 책의 기대 독자층은 C/C++에 익숙하면서 리버스 엔지니어링에 관심이 있는 독자라고 명시되어 있는데, 개인적인 생각으로는 단순히 관심보다는 스택 프레임의 섹션이라는 개념이나 어셈블리 언어가 좀 익숙한 사람? 다르게 표현하면 프로세서의 동작 원리를 잘 이해하고 있는 사람이 봐야 읽으면서도 도움이 될듯 싶다. 확실히 내용 자체가 그림이나 코드 설명이 잘 되어 있다고 하더라도, 내적으로 포함하고 있는 방법론이나 기초 지식들은 처음 접하는 사람이 딱 읽기에는 어려움을 느낄 수 있을거란 생각이 많이 들었다. 나름 나도 이런 걸 조금 봤다고 말하면서도 책을 읽으면서 어렵다 느낀 부분이 간간히 나타났다. 물론 부연 설명이나 도식이 잘 나와있다 하더라도, 책 두께에 놀란 입문자가 계속 읽어나가긴 힘들 듯하다. 이때문에 꼭 코드를 반복해서 따라해보고 정독을 하는 과정이 필요하다. 

     개인적으로 좀 응용이 될 수 있는 부분은 디버거를 만드는 제일 마지막 파트가 아닐까 싶다. 물론 이 책의 부제가 디버거를 만드는 것이라고는 되어 있었는데, 정말 마지막 300여장정도만 디버거를 만드는 실제 과정이고, 그 이전까지는 쭉 기반 지식에 대한 설명만 담겨있다. 그래서 지루할 수도 있었는데, 이 디버거를 실제로 만드는 부분은 단순히 윈도우 기반에서만 적용되는 개념뿐만 아닌 디버깅의 개념과 필요한 요소에 대해서 소개해둔 터라, 차후 다른 환경에서 디버깅을 위한 툴을 만들고자 할때 조금 응용해볼 수 있는 여지가 있을거라고 생각한다. 그리고 추가로 어셈블리 언어와 디어셈블리 과정에 대한 설명은 굳이 리버스 엔지니어링이랑 목적을 두지 않더라도 컴퓨터 구조에 대해서 관심이 많은 사람이라면 꼭 읽어보면 좋은 파트일 거라 여겨진다.

     책에서 다루는 내용이나 저자가 원하는 목적상 책 두께가 두꺼워지는 것은 어쩔 수 없었을 듯 했다. 그만큼 책에서는 필요한 내용을 가능한한 자세하게, 더 세밀하게 묘사된 흔적들이 많이 보인다. 정말 책을 읽으면서도 정말 이책을 저자 혼자 쓰셨을까 하는 의심이 들정도로 너무 리버스 엔지니어링이란 분야를 윈도우 환경과 엮어서 너무 자세하게 설명해주셨다. (한권만 1300페이지인데, 두권 합치면 한 2500여 페이지 되지 않을까... 정말 놀랍다). 
     물론 디버깅이란 분야의 한계상 많은 사람들이 접하고 즐기기에는 너무 고급적인 주제를 다루고 있지만, 분명 해당 분야를 접하는 실무자에게는 정말 유용한 책이 아닐까 생각된다. 특히 윈도우를 개발환경으로 두고 디버깅 업무를 해가는 개발자에게는 정말 우리나라에서 몇없는 개발서일것 같다. 

     아 그리고 마지막으로.... 리뷰를 쓰는데 치중한지라 코드 내용을 일일히 따라쳐본다던가 분석하는 과정을 많이 수행하지는 못했지만, 글 맥락을 읽으면서도 "아 정말 이 책을 이해하는데 있어서는 실습이 중요하다" 라는 걸 많이 느꼈다. 다른 개발서 리뷰때도 종종 말하는 내용이지만, 진짜 좋은 개발서는 독자가 쉽게 읽고, 따라하면서 이해할 수 있는 그런 책이라고 생각하고, 이 책도 그런 관점에서는 좋은 개발서라고 본다. 그러니 제발... 두께보고 겁내지 말고 1권부터 보자. 제발~~



    출처: http://talkingaboutme.tistory.com/841 [자신에 대한 고찰]

  • 한빛미디어에서 다시 또 대단한 책이 나왔다. 11년전 출간된 Windows 시스템 실행 파일의 구조와 원리를 64비트 환경에 맞도록 재구성하면서 두 권의 책이 발간되었다.

    1권은 앞서 언급한 책의 개정판 느낌으로 "IT EXPERT 리버스 엔지니어링 (파일 구조 편)"이고, 
    2권은 PE의 관점에서 본 리버스 엔지니어링에 초점을 맞추어 간단한 디버깅 툴의 구현을 목적으로하는 "IT EXPERT 리버스 엔지니어링 (디버거 편)" 되시겠다.

    평소 어셈블이나 BOF같은 war game에도 많은 흥미가 있었기에 이 책은 내 지식을 살찌우기에 안성맞춤인 책이었다. 하지만 책의 두께 자체가 어마어마 했으니....

     

    사실 가볍게 읽을만한 내용의 책은 아니다. 어셈블에 대한 최소한의 지식이나 하물며 C/C++에 대한 배경지식이 없다면 읽는 것을 권하지 않는다. 그만큼 호락호락하지 않다는 의미다.

     

    또한 단숨에 정독하려는 생각보다는 어렷을적 책장에 꼽혀있던 백과사전 같은 느낌으로 파트나 분량을 정해놓고 반복해서 읽으면 좋다. (실제로 많은 용어들에 대한 정리가 되어 있기 때문에 사전같은 느낌으로도 좋다.)

     

    책에는 스택 프레임에 대한 설명이 알차게 되어 있고, 메모리에 대한 깊은 이해를 할 수 있도록 도와준다. 사실 요즘 C/C++ 코드를 구현하면서 어셈블러에서 어떻게 해석될지, 혹은 어떤 것이 효율적인 코드에 대한 부분은 많이 놓치고 개발하게 되는데, 이 책은 그러한 것들을 다시금 정리할 수 있는 시간을 갖을 수 있도록 도와준다.

     

    또한 어셈블이나 디어셈블에 대한 설명과 명령어 포맷에 대한 설명이 상세히 기록되어 있어 다방면으로 학습할 수 있어서 좋다. .pdata에 대한 설명도 그림과 함께 상세하게 제공되는데 개발자라면 꼭 알아야하는 개념이기에 확실하게 알고 넘어가야 한다.

     

    책의 내용은 윈도우를 기반으로하고 있지만 리눅서라도 큰 무리 없이 읽을 수 있다. (물론 위에서 언급한 배경지식은 분명 필요함) 하지만 리버스 엔지니어링이나 어셈/디어셈에 관심이 없다면 이 책은 권하지 않는다. 

    이유는, 일단 내용 자체가 어렵고 한번 읽어보기 위해 구매하기에는 가격 부담도 적지 않다. 하지만 이쪽 분야에 관심 있는 사람이라면 분명 일독을 권한다.

     

    사실 Low level language를 다루는 사람이라면 분명히 알아야 하는 개념이지만, 요즘 많은 초중급 개발자가 놓치고 있는 부분이라 안타깝기도 한데, 많은 사람들이 보고 한 단계 더 성숙해지기를 바라본다. 



  • 리뷰자 김종욱

     

    B7638826095_l.jpg

     

    클로버 리버스 엔지니어링 - 디버거 편

    이호동 지음

     

     본 서는 상당한 두께를 자랑하지만 그만큼 알찬 내용들로 가득차있는 책이다. 더욱이 Windows 시스템 실행 파일의 구조를 자세히 설명함으로써 윈도우 시스템의 구동 방식은 물론, 시스템 실행 파일이 어떤식으로 동작하는지에 대해서 굉장히 잘 술해져있는 책이다. 과히 컴퓨터 계의 명서라 해도 될 것이다. 이러한 본 리버스 엔지니어링 시리즈 중 2번째 책인 디버거 편은 본 서를 읽는 독자가 직접 디버거를 만들어 가면서 실습할 수 있는 환경을 제공해주는 말로다 표현 할 수 없는 훌륭한 도서이다. 따라서 윈도우 프로그래밍을 입문하고 자 하는 사람이라면 반드시 한번 쯤은 정독해 보길 권한다. 만약 마스터의 길을 가고 싶다면, 수십번 다독할 것을 권한다.


    책의 리뷰를 본격적으로 하기에 앞서 어떤 사람들이 본 서적을 읽으면 좋을지 적어보도록 하겠다.

     


    【어떤 독자를 위한 책인가

     

      이 책은 입문자들이 읽기에는 꾀나 어려운 지식들이 있다. 물론 저자가 최대한 자세히 설명하려 하였으나, 본 블로거의 지극히 개인적인 생각으로는 자료구조, 알고리즘, 그리고 리버싱 엔지니어링과 디버깅 방법론과 같은 기초 지식들을 어느정도 쌓은 사람이 읽어야 학습효과가 확실할 것이란 생각이 들었다. 본 블로거의 경우 본 서를 받고 1주일 정도에 걸쳐 1회 독 하고, 틈틈히 쳅터별로 궁금한 내용이 있으면 참조하는 형태로 학습하고 있다. 그럼에도 학습할 양이 무궁무진한 만큼, 기초지식이 없는 독자가 읽기에는 장벽이 있는 도서라 생각된다.

        

    【책의 구성】 '리버스 엔지니어링 - 디버거편책의 구성은 어떠한가.


    망치 본 서는 1권에 이어 2권에 못다한 챕터 내용을 출간한 책이다. 따라서 총21장으로 구성되어있는 책 중에서 본 서에서는 11~21장에걸친 내용들을 다루고 있다. 처음에는 디스 어셈블에 필요한 어셈 코드를 위해서 CPU 와 어셈과 같은 기초 지식들을 다루고, 그 이후에 코드 섹션에 관한 함수, 이에 대한 디스어셈블링 방법, PDB에 관한 설명과 SEH에 대한 설명, 메모리 보호 최종적으로 디버거 구현으로 서가 구성되어 있다. 각 챕터에 대한 자세한 내용은 다음과 같으며 저자가 설명과 함께 구체적인 소스코드를 전부 기제해 두었기 때문에 금방 이해할 수 있는 구조로 되어있다. 거의 대부분의 책들은 단순 글로만 설명하는 경향이 있었는데, 본 서는 그러한 한계점을 과감히 극복해냈다고 볼 수 있었다. 따라서 코드에 대한 울렁증, 어떻게 구현해야할지 막막하여 디버거 쪽은 손도 못대보신 분들이라면 꼭 본 서를 읽어보시길 권한다.


    > 책 목록

    [4부 코드 분석]

     

    11장 어셈블리 언어 개요

    __11.1 CPU 개요

    __11.2 어셈블리 둘러 보기

     

    12장 코드 섹션과 함수

    __12.1 32비트에서의 함수

    __12.2 64비트에서의 함수

     

    13장 코드 섹션 디스어셈블링

    __13.1 명령 포맷

    __13.2 OP 코드 상세

    __13.3 디스어셈블러 구현

    __13.4 코드 섹션 함수 구성

     

    14장 디버그 섹션과 PDB

    __14.1 디버그 섹션

    __14.2 PDB 분석

    __14.3 PDB PE

     

    [5부 예외 처리]

     

    15장 구조적 예외 처리(SEH)

    __15.1 SEH의 개요

    __15.2 종료 처리

    __15.3 예외 처리

    __15.4 처리되지 않은 예외

    __15.5 C++ SEH

     

    16 32비트 SEH

    __16.1 Win32에서의 SEH 구조

    __16.2 컴파일러 레벨의 SEH 

    __16.3 C++ 예외 핸들러 

     

    17장 함수예외와 .pdata 섹션

    __17.1 .pdata 섹션

    __17.2 해제 정보

    __17.3 예외/종료 핸들러 정보

     

    18 64비트 SEH

    __18.1 함수 호출 스택과 해제 처리

    __18.2 SEH 관련 64비트 전용 API

    __18.3 64비트 SEH 처리 과정

     

    19장 메모리 보호

    __19.1 스택 오버플로 공격과 GS

    __19.2 다양한 메모리 보호 방식

     

    [6부 디버거 구현]

     

    20장 디버거 기본

    __20.1 디버깅 작동 원리

    __20.2 디버거 PE Frontier 구성

     

    21장 디버거 심화

    __21.1 중단점 설정

    __21.2 디버거 PE Frontier 심화

     


    【리버스 엔지니어링 - 디버거편을 읽으며…….】

     프로그래밍에 있어서 가장 중요한 것은 자신이 만든 프로그램을 잘 디버깅 할 줄 아냐이다. 왜냐하면 자신이 만든 서비스를 타인에게 제공하는데 있어서 어디가 문제점이고, 어느 부분에서 버그가 발생했는지 찾지 못한다면 그것은 서비스의 실패로 이어지고, 이로 인해 해당 회사의 신용은 바닥으로 곤두박질 치는 것은 불보듯 뻔하기 때문이다. 따라서 본 블로그 글을 읽는 프로그래머 분들이 있다면 리버싱, 디스어셈블리를 꼭 배워 보다 전문화된 프로그래머가 되길 바란다.



     

    【점수…….】

    구성 : ★★★★☆ 내용:★★★★☆  디자인: ★★★★☆ 전문성 : ★★


    #본 리뷰는 리뷰자 김종욱의 저작권에 귀속되므로 참고시 참고 URL과 명시를 저작자에게 알려주시길 바랍니다.

    #본 리뷰의 점수 및 평가 내용은 김종욱 리뷰자의 한정된 것이므로 확정된 답이 안임을 명시합니다.

    #학습과 관련된 질문과 문제에 대한 질문은 일절 받지 않습니다. 스스로 찾아서 학습하는 것 그것이야 말로 진정한 학습자입니다. 



    ######  감사합니다  ######  

부록/예제소스
자료명 등록일 다운로드
예제소스 2017-03-16 다운로드
결재하기
배송료 : 0원배송료란?

배송료 안내

  • 책, 아이템 등 상품을 3만원 이상 구매시 무료배송
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

무료배송 상품을 포함하여 주문하신 경우에는 구매금액에 관계없이 무료로 배송해 드립니다.

닫기

리뷰쓰기

닫기
* 도서명 :
리버스 엔지니어링 2권(디버거 편)
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
리버스 엔지니어링 2권(디버거 편)
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
리버스 엔지니어링 2권(디버거 편)
구입처*
구입일*
부가기호*
부가기호 안내

* 회원가입후 도서인증을 하시면 마일리지 500점을 드립니다.

* 한빛 웹사이트에서 구입한 도서는 자동 인증됩니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한됩니다.

* 절판도서, eBook 등 일부 도서는 도서인증이 제한됩니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?

자료실