리버스 엔지니어링 2권 : 디버거 편 - 윈도우 실행 파일 구조와 원리로 배우는
리버스 엔지니어라면 반드시 소장해야 할 최고 명저의 재래
리버스 엔지니어링을 진수! 디버거 제작에 도전하라!
이 책은 PE 파일 포맷을 완벽하게 분석하여 리버스 엔지니어 필독서로 꼽히던 『Windows 시스템 실행 파일의 구조와 원리』의 확장 개정판이다. 총 2권 구성으로 1권에서는 64비트 PE+의 각 세션에 대해 알아본다. 2권은 1권에서 미처 다루지 못한 PE 세션을 알아보고, 디버거를 만들면서 악성 코드 침투에 대응하는 메모리 침투 방법을 다룬다. 이론과 실전 기법 모두를 제공하는 리버스 엔지니어링 최고의 바이블이다.
* 이 책은 전 2권 세트 중 2권으로 11장에서 21장까지 내용을 다룹니다. 1권(1장~10장)은 별매입니다.
★ 윈도우 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 파일의 구조뿐만 아니라 코드의 구성과 디버거 구현 원리, 리버스 엔지니어링을 이해하게 될 것이다.
연세대 전자공학과를 졸업했지만 학창시절 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 심화