서브메뉴

본문

리버스 엔지니어링 1: 파일 구조 편 (윈도우 실행 파일 구조와 원리로 배우는)
리버스 엔지니어링 1: 파일 구조 편 (윈도우 실행 파일 구조와 원리로 배우는)
저자 : 이호동
출판사 : 한빛미디어
출판년 : 2016
정가 : , ISBN : 9788968484872

책소개


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

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

목차


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