책소개
리버스 엔지니어라면 반드시 소장해야 할 최고의 명저
이 책은 PE 파일 포맷을 완벽하게 분석하여 리버스 엔지니어 필독서로 꼽히던 『Windows 시스템 실행 파일의 구조와 원리』의 확장 개정판이다. 총 2권 구성으로 1권에서는 64비트 PE+의 각 세션에 대해 알아본다. 2권은 1권에서 미처 다루지 못한 PE 세션을 알아보고, 디버거를 만들면서 악성코드 침투에 대응한 메모리 침투 방법을 다룬다. 이 책은 이론과 실전 기법 모두를 제공해주는 리버스 엔지니어링 최고의 바이블이다.
목차
[1부 PE 입문]
01장 윈도우 실행 파일 ? PE의 구조
_1.1 PE 파일 소개
___1.1.1 왜 PE 파일인가?
___1.1.2 PE+란 무엇인가?
_1.2 PE 파일의 전체 구조
_1.3 PE 분석을 위한 개념
___1.3.1 RVA와 섹션
___1.3.2 가상 주소 공간과의 관계
_1.4 PE 분석 툴과 프로젝트 소개
___1.4.1 PE 분석 툴 소개
___1.4.2 구현할 프로젝트 소개
02장 PE 파일 헤더
_2.1 IMAGE_DOS_HEADER 구조와 DOS 스텁
_2.2 IMAGE_NT_HEADERS 구조
___2.2.1 DWOD Signature
___2.2.2 IMAGE_FILE_HEADER 구조
___2.2.3 IMAGE_OPTIONAL_HEADER 구조
_2.3 섹션 헤더와 데이터 디렉터리
___2.3.1 IMAGE_DATA_DIRECTORY 구조체 배열
___2.3.2 IMAGE_SECTION_HEADER
___2.3.3 RVA, 데이터 디렉터리와 섹션 헤더
_2.4 PE Explorer 프로젝트 구조
___2.4.1 PE 구조체 XML 스키마
___2.4.2 PEAnals 클래스
___2.4.3 프로젝트 PE Explorer의 구조
03장 코드와 데이터 섹션
_3.1 프로그램 메모리 구조
_3.2 코드 섹션
___3.2.1 코드 섹션에 대하여
___3.2.2 ImageBase, AddressOfEntryPoint, 그리고 프로그램의 시작
___3.2.3 증분 링크
_3.3 데이터 섹션
___3.3.1 .data 섹션
___3.3.2 .rdata 섹션
_3.4 런타임 시작 함수와 전역 초기화
___3.4.1 C/C++ 런타임 시작 함수 WinMainCRTStartup
___3.4.2 초기화 콜백 함수 호출
___3.4.3 프로그램 종료 처리
04장 기준 재배치 섹션
_4.1 기준 재배치의 의미와 과정
_4.2 기준 재배치 섹션의 구조
___4.2.1 IMAGE_BASE_RELOCATION과 TypeOffset 배열
___4.2.2 .reloc 섹션 분석
___4.2.3 64비트의 .reloc 섹션
_4.3 기준 재배치를 위한 코드
___4.3.1 기준 재배치 의사 코드
___4.3.2 PE Explorer에서의 기준 재배치 섹션 처리
_4.4 기준 재배치 고려사항
___4.4.1 32비트에서의 기준 재배치
___4.4.2 64비트에서의 기준 재배치
[2부 DLL과 PE]
05장 DLL 생성과 내보내기 섹션
_5.1 DLL의 생성
___5.1.1 함수/변수 내보내기
___5.1.2 내보내기 이름 데코레이션의 문제
_5.2 내보내기 섹션
___5.2.1 IMAGE_EXPORT_DIRECTORY 구조체
___5.2.2 내보내기 섹션 구조
_5.3 DllMain의 사용
_5.4 함수 포워딩 및 NONAME, PRIVATE 내보내기
___5.4.1 DLL 함수 포워딩
___5.4.2 PRIVATE와 NONAME 함수
_5.5 내보내기 섹션 분석 코드
06장 DLL 로딩과 가져오기 섹션
_6.1 DLL의 사용
___6.1.1 암시적 로딩
___6.1.2 명시적 로딩
_6.2 가져오기 섹션
___6.2.1 IMPORT 엔트리
___6.2.2 IAT 엔트리
___6.2.3 DLL 선(先) 바인딩
_6.3 가져오기 섹션 분석 코드
___6.3.1 IMPORT 엔트리 분석
___6.3.2 IAT 엔트리 분석
___6.3.3 BOUND_IMPORT 엔트리 분석
_6.4 API 후킹
___6.4.1 후킹 DLL 구현
___6.4.2 DLL 주입기 작성
___6.4.3 DLL 후킹 테스트
07장 DLL 지연 로드 섹션
_7.1 DLL 지연 로드
___7.1.1 지연 로드의 사용
___7.1.2 DLL 언로드 및 바운드 해제
___7.1.3 예외 처리
___7.1.4 지연 로드 훅 설정
_7.2 지연 로드 섹션
___7.2.1 ImgDelayDescr 구조체
___7.2.2 DLL 지연 로드 과정
___7.3 지연 로드 섹션 분석 코드
[3부 나머지 PE 섹션]
08장 TLS, 로드 환경 설정, 보안 및 사용자 정의 섹션
_8.1 TLS와 .tls 섹션
___8.1.1 동적 TLS
___8.1.2 정적 TLS와 섹션
___8.1.3 TLS 관련 분석 코드
_8.2 사용자 정의 섹션
___8.2.1 섹션 지정 관련 #pragma
___8.2.2 사용자 정의 섹션 예
___8.2.3 DLL 데이터 공유
___8.2.4 생성자 지연 호출
_8.3 로드 환경 설정
___8.3.1 IMAGE_LOAD_CONFIG_DIRECTORY
___8.3.2 로드 환경 설정 확인
_8.4 보안 디렉터리
___8.4.1 속성 인증서 엔트리 구조
___8.4.2 PKCS#7 디지털 서명 확인하기
___8.4.3 무결성 체크 관련 요소
_8.5 .NET 런타임 헤더
09장 리소스 섹션
_9.1 리소스
_9.2 리소스 섹션 구조
___9.2.1 IMAGE_RESOURCE_XXXX 구조체
___9.2.2 디렉터리 엔트리의 3단계 구조
_9.3 DlgApp.exe의 리소스 섹션 분석
___9.3.1 루트 RES_DIR
___9.3.2 아이콘 타입 RES_DIR
___9.3.3 대화상자 타입 RES_DIR
___9.3.4 그룹 아이콘 타입 RES_DIR
_9.4 리소스 섹션 분석 코드
___9.4.1 FindResource 함수의 구현
___9.4.2 PE Explorer의 리소스 섹션 분석
10장 리소스 섹션의 개별 리소스
_10.1 샘플 리소스 제작
_10.2 커서, 아이콘 & 비트맵
___10.2.1 비트맵의 구조
___10.2.2 아이콘과 그룹 아이콘
___10.2.3 커서와 그룹 커서
___10.2.4 아이콘, 커서, 비트맵 추출기
_10.3 메뉴, 단축키, 문자열 테이블
___10.3.1 메뉴 리소스
___10.3.2 단축키 테이블
___10.3.3 문자열 테이블
_10.4 대화상자
___10.4.1 대화상자 템플릿 분석
___10.4.2 대화상자 항목 템플릿 분석
_10.5 나머지 리소스
___10.5.1 버전 정보
___10.5.2 매니페스트
___10.5.3 사용자 정의 리소스