지은이 : 크리스 이글
40년 경력의 리버스 엔지니어로, 『The IDA Pro Book(한국어판)』(에이콘, 2012)의 저자이며 인기있는 리버스 엔지니어링 교육자다. 수많은 리버스 엔지니어링 툴을 만들었고 블랙햇(Blackhat), 데프콘(Defcon), 쉬무콘(Shmoocon)과 같은 보안 콘퍼런스에서 발표자로 활약했다.
지은이 : 카라 낸스
개인 보안 컨설턴트로, 수년 동안 컴퓨터 공학 교수로 재직했다. 허니넷(Honeynet) 프로젝트의 이사회에서 활동했으며 세계적인 콘퍼런스에서 수많은 강연을 했다. 기드라 익스텐션 만들기를 좋아하며 정기적으로 기드라 교육을 제공한다.
1부. 소개
1장. 디스어셈블리 소개
__디스어셈블리 이론
__디스어셈블리란
__디스어셈블리하는 이유
____악성코드 분석
____보안 취약점 분석
____소프트웨어 상호 운용
____컴파일러 검증
____디버깅 출력
__디스어셈블러의 동작 방식
____기본적인 디스어셈블리 알고리듬
____리니어 스윕 디스어셈블리
____재귀 하강 디스어셈블리
__요약
2장. 리버싱과 디스어셈블리 툴
__유형을 분류하기 위한 툴
____file
____PE Tools
____PEiD
__요약을 위한 툴
____nm
____ldd
____objdump
____otool
____dumpbin
____c++filt
__심층 분석 툴
____strings
____디스어셈블러
__요약
3장. 기드라를 만나다
__기드라 라이선스
__기드라 버전
__기드라 지원 리소스
__기드라 다운로드
__기드라 설치
____기드라 디렉터리 구조
____기드라 시작
__요약
2부. 기본적인 기드라 사용법
4장. 기드라 시작하기
__기드라 실행
__새로운 프로젝트 생성
____기드라 파일 로딩
____Raw Binary 로더
__기드라로 파일 분석
____자동 분석 결과
__초기 분석 과정의 작업 내용
____작업 내용 저장과 종료
__기드라 관련 팁과 트릭
__요약
5장. 기드라 데이터 디스플레이
__CodeBrowser
__CodeBrowser 창
____Listing 창
____추가적인 디스어셈블리 창 열기
____기드라의 Function Graph
____Program Trees 창
____Symbol Tree 창
____Data Type Manager 창
____Console 창
____Decompiler 창
__기타 기드라 창
____Bytes 창
____Defined Data 창
____Defined Strings 창
____Symbol Table 창과 Symbol References 창
____Memory Map 창
____Function Call Graph 창
__요약
6장. 기드라의 디스어셈블리 이해
__디스어셈블리 탐색
____이름과 라벨
____기드라에서 탐색
____Go To 대화상자
____탐색 히스토리
__스택 프레임
____함수 호출 메커니즘
____호출 규약
____스택 프레임에 대한 추가 고려 사항
____지역 변수 레이아웃
____스택 프레임 예
__기드라 스택 뷰
____기드라 스택 프레임 분석
____Listing 창에서의 스택 프레임
____디컴파일러의 스택 프레임 분석
____피연산자로서의 지역 변수
____기드라 스택 프레임 에디터
__검색
____Search Program Text 대화상자
____Search Memory 대화상자
__요약
7장. 디스어셈블리 코드 변경
__이름과 라벨 변경
____파라미터와 지역 변수의 이름 변경
____라벨 이름 변경
____새로운 라벨 추가
____라벨 편집
____라벨 제거
____라벨 탐색
__주석
____줄 끝 주석
____Pre 주석과 Post 주석
____Plate 주석
____Repeatable 주석
____파라미터와 지역 변수 주석
____어노테이션
__기본적인 코드 변환
____코드 표시 옵션 변경
____명령 피연산자의 형식 변경
____함수 변경
____데이터를 코드로 변환(또는 코드를 데이터로 변환)
__기본적인 데이터 변환
____데이터 타입 지정
____문자열 처리
____배열 정의
__요약
8장. 데이터 타입과 데이터 구조체
__데이터 이해하기
__데이터 구조체의 사용 형태 인식
____배열 요소에 대한 접근
____구조체 멤버에 대한 접근
__기드라에서 구조체 만들기
____새로운 구조체 만들기
____구조체 필드 수정
____구조체의 레이아웃 적용
__C++ 리버싱의 기본
____this 포인터
____가상 함수와 Vftable
____객체의 생명주기
____이름 맹글링
____런타임 타입 식별
____상속 관계
____C++ 리버스 엔지니어링 참고 자료
__요약
9장. 상호 참조
__참조에 대한 기본 지식
____상호 참조(역참조)
____참조 예
__상호 참조 관리 창
____XRefs 창
____References To 창
____Symbol References 창
____참조 추가와 변경
__요약
10장. 그래프
__기본 블록
__Function Graph 창
__Function Call Graph 창
__트리 뷰
__요약
3부. 자신을 위한 기드라 만들기
11장. 소프트웨어 리버스 엔지니어링 협업
__팀워크
__기드라 서버 설정
__공유 프로젝트
____공유 프로젝트 생성
____프로젝트 관리
__Project 창 메뉴
____File 메뉴
____Edit 메뉴
____Project 메뉴
__프로젝트 저장소
____버전 관리
____예제 시나리오
__요약
12장. 기드라 사용자 정의
__CodeBrowser
____창 재정렬
____Edit의 Tool Options 메뉴
____Tool 옵션
____특별한 툴 편집 기능
____CodeBrowser 레이아웃 저장
__기드라 Project 창
__Tools 메뉴
__워크스페이스
__요약
13장. 기드라의 세계관 확장
__파일 임포트
__분석기
__워드 모델
__데이터 타입
____새로운 데이터 타입 아카이브 생성
__Function ID
__Function ID 플러그인
____Function ID 플러그인 예제: UPX
____Function ID 플러그인 예제: 정적 라이브러리 프로파일링
__요약
14장. 기드라 스크립트
__Script Manager 메뉴
____Script Manager 창
____Script Manager 툴바
__스크립트 개발
____자바 스크립트 작성(JavaScript가 아님!)
____스크립트 편집 예제: 정규 표현 검색
____파이썬 스크립트
____다른 언어 지원
__Ghidra API 소개
____Address 인터페이스
____Symbol 인터페이스
____Reference 인터페이스
____GhidraScript 클래스
____Program 클래스
____Function 인터페이스
____Instruction 인터페이스
__기드라 스크립트 예제
____예제 1: 함수 나열
____예제 2: 명령 나열
____예제 3: 상호 참조 나열
____예제 4: 함수 호출 찾기
____예제 5: 어셈블리 언어 에뮬레이팅
__요약
15장. 이클립스와 기드라
__이클립스
____이클립스 통합
____이클립스 시작
____이클립스를 이용한 스크립트 편집
__GhidraDev 메뉴
____GhidraDev New
____Package Explorer 탐색
__예제: 기드라 분석기 모듈 프로젝트
____단계 1: 문제 정의
____단계 2: 이클립스 모듈 생성
____단계 3: 분석기 빌드
____단계 4: 이클립스에서 분석기 테스트
____단계 5: 기드라에 분석기 추가
____단계 6: 기드라에서 분석기 테스트
__요약
16장. 기드라 헤드리스 모드
__시작
____단계 1: 기드라 실행
____단계 2와 3: 새로운 기드라 프로젝트를 특정 위치에 생성
____단계 4: 프로젝트에 파일 임포트
____단계 5와 6: 파일을 자동 분석, 저장, 종료
____옵션과 파라미터
__스크립트 작성
____HeadlessSimpleROP
____자동화된 FidDb 작성
__요약
4부. 심층 분석
17장. 기드라 로더
__알려지지 않은 파일 형식 분석
__윈도우 PE 파일을 수동으로 로딩
__예제 1: SimpleShellcode 로더 모듈
____단계 0: 한발 물러나기
____단계 1: 문제를 정의
____단계 2: 이클립스 모듈을 생성
____단계 3: 로더를 빌드
____단계 4: 로더를 기드라에 추가
____단계 5: 기드라에서 로더를 테스트
__예제 2: 간단한 셸코드 소스 로더
____업데이트 1: 임포터에 대한 응답을 수정
____업데이트 2: 소스코드에서 셸코드 찾기
____업데이트 3: 셸코드를 바이트 값으로 변환
____업데이트 4: 바이트 배열을 로드
____결과
__예제 3: 간단한 ELF 셸코드 로더
____준비 작업
____ELF 헤더 형식
____로더의 바이너리 지원 명세 확인
____기드라에 파일 내용 로드
____데이터 바이트 형식 지정 및 엔트리 포인트 추가
____언어 정의 파일
____Opinion 파일
____결과
__요약
18장. 기드라 프로세서
__기드라 프로세서 모듈 이해
____이클립스 프로세서 모듈
____SLEIGH
____프로세서 매뉴얼
__기드라 프로세서 모듈 수정
____문제 설명
____예제 1: 프로세서 모듈에 명령 추가
____예제 2: 프로세서 모듈에 있는 명령 수정
____예제 3: 프로세서 모듈에 레지스터 추가
__요약
19장. 기드라 디컴파일러
__디컴파일러 분석
____분석 옵션
__Decompiler 창
____예제 1: Decompiler 창 편집
____예제 2: 반환하지 않는 함수
____예제 3: 자동화된 구조체 생성
__요약
20장. 컴파일러
__하이레벨 구조
____switch문
____예제: gcc와 마이크로소프트 C/C++ 컴파일러 비교
__컴파일러 빌드 옵션
____예제 1: 나머지 연산자
____예제 2: 삼항 연산자
____예제 3: 함수 인라인
__컴파일러의 C++ 구현
____함수 오버로딩
____RTTI 구현
__main 함수 찾기
____예제 1: 리눅스 x86-64에서 gcc로 _start에서 main 함수로 전환
____예제 2: FreeBSD x86-64에서 clang으로 _start에서 main 함수로 전환
____예제 3: 마이크로소프트 C/C++ 컴파일러로 _start에서 main 함수로 전환
__요약
5부. 실제 분석에 적용
21장. 난독화된 코드 분석
__안티리버스 엔지니어링
____난독화
____정적 분석 방지 기술
____임포트 함수 난독화
____동적 분석 방지 기술
__기드라를 이용한 바이너리의 정적 난독화 해제
____스크립트 기반의 난독화 해제
____에뮬레이션 기반의 난독화 해제
____단계 1: 문제 정의
____단계 2: 이클립스 스크립트 프로젝트 생성
____단계 3: 에뮬레이터 구현
____단계 4: 기드라에 스크립트 추가
____단계 5: 기드라에서 스크립트 테스트
__요약
22장. 바이너리 패치
__패치 계획
__변경 대상 찾기
____메모리 검색
____직접 참조 검색
____명령 패턴 검색
____특정 동작 찾기
__패치 적용
____간단한 패치
____좀 더 복잡한 패치
__파일 익스포트
____익스포트 형식
____바이너리 익스포트 형식
____스크립트 지원 익스포트
__예제: 바이너리 패치
__요약
23장. 바이너리 비교와 버전 추적
__바이너리 비교
____Program Diff 툴
____예제: 분석된 두 파일의 병합
__함수 비교
____Function Comparison 창
____예제: 암호화 루틴 비교
__버전 추적(트래킹)
____버전 추적 개념
__요약
부록. IDA 사용자를 위한 기드라
__기본 지식
____데이터베이스 생성
____기본적인 창과 탐색
__스크립트
__요약
찾아보기
도서 DB 제공 - 알라딘 인터넷서점 (www.aladin.co.kr)