홈 > 부모님 > 부모님 > 소설,일반 > 컴퓨터,모바일
The Ghidra Book  이미지

The Ghidra Book
기드라 리버스 엔지니어링 완벽 가이드
에이콘출판 | 부모님 | 2024.07.22
  • 정가
  • 45,000원
  • 판매가
  • 40,500원 (10% 할인)
  • S포인트
  • 2,250P (5% 적립)
  • 상세정보
  • 18.8x23.5 | 1.490Kg | 784p
  • ISBN
  • 9791161756912
  • 배송비
  • 2만원 이상 구매시 무료배송 (제주 5만원 이상) ?
    배송비 안내
    전집 구매시
    주문하신 상품의 전집이 있는 경우 무료배송입니다.(전집 구매 또는 전집 + 단품 구매 시)
    단품(단행본, DVD, 음반, 완구) 구매시
    2만원 이상 구매시 무료배송이며, 2만원 미만일 경우 2,000원의 배송비가 부과됩니다.(제주도는 5만원이상 무료배송)
    무료배송으로 표기된 상품
    무료배송으로 표기된 상품일 경우 구매금액과 무관하게 무료 배송입니다.(도서, 산간지역 및 제주도는 제외)
  • 출고일
  • 품절된 상품입니다.
  • ★★★★★
  • 0/5
리뷰 0
리뷰쓰기
  • 도서 소개
  • 출판사 리뷰
  • 작가 소개
  • 목차
  • 회원 리뷰

  도서 소개

기드라(Ghidra)를 이용한 리버스 엔지니어링을 마스터하고 싶은 사이버 보안 담당자를 위한 바이블이다. 이 책을 읽고 나면 기드라가 리버스 엔지니어링을 위해서 제공하는 모든 기능을 배울 수 있으며, 기드라를 이용해 모든 종류의 소프트웨어와 악성코드를 분석하는 능력을 갖춘 전문가가 될 수 있다.

  출판사 리뷰

◈ 이 책에서 다루는 내용 ◈

◆ 디스어셈블리 코드 탐색 방법
◆ 기드라에 내장된 디컴파일러를 이용한 빠른 분석 방법
◆ 난독화된 바이너리 분석 방법
◆ 새로운 데이터 유형을 인식하도록 기드라 기능 확장 방법
◆ 새로운 기드라 분석기와 로더 생성 방법
◆ 새로운 프로세서와 명령어 셋 추가 방법
◆ 작업 자동화를 위한 기드라 스크립트 작성 방법
◆ 리버스 엔지니어링 협업을 위한 환경 설정 방법

◈ 이 책의 대상 독자 ◈

야심차고 경험이 풍부한 소프트웨어 리버스 엔지니어를 대상으로 한다. 리버스 엔지니어링 경험이 없어도 상관없다. 책의 초반부에서 리버스 엔지니어링을 소개하고, 기드라로 바이너리를 탐색하고 분석하는 데 필요한 배경 지식을 제공하기 때문이다. 자신의 툴킷에 기드라를 추가하고자 하는 숙련된 리버스 엔지니어라면 처음 2개의 부에서 기드라에 대한 기본적인 지식을 빠르게 숙지한 다음 관심 있는 장으로 이동해서 보면 된다. 기드라 사용 경험이 있는 사용자나 개발자라면 새로운 기드라 익스텐션을 만들고 자신의 경험과 지식을 기드라 프로젝트에 기여할 수 있도록 책의 후반부를 집중해서 볼 수도 있다.

◈ 이 책의 구성 ◈

총 5개의 부로 구성돼 있다. 1부에서는 디스어셈블리와 리버스 엔지니어링, 기드라 프로젝트를 소개한다. 2부에서는 기본적인 기드라 사용법을 설명하고, 3부에서는 사용자가 원하는 대로 사용자 지정 방법과 자동화 방법을 설명한다. 4부에서는 특정 유형의 기드라 모듈과 지원 개념을 설명한다. 5부에서는 리버스 엔지니어가 마주치게 되는 몇 가지 실제 상황에 기드라를 적용하는 방법을 설명한다.

1부: 소개
‘1장, 디스어셈블리 소개’에서는 디스어셈블리의 이론과 실행에 대해 소개하고 2가지 일반적인 디스어셈블리 알고리듬의 장단점을 살펴본다.
‘2장, 리버싱과 디스어셈블리 툴’에서는 리버스 엔지니어링과 디스어셈블리에서 사용할 수 있는 툴의 종류를 알아본다.
‘3장, 기드라를 만나다’에서 비로소 기드라를 만나고 그 기원과 기드라 오픈소스 툴을 사용하는 방법을 가볍게 살펴본다.

2부: 기본적인 기드라 사용법
‘4장, 기드라 시작하기’부터는 기드라와 함께하는 본격적인 여정이 시작된다. 프로젝트를 만들고, 파일을 분석하고, 기드라의 그래픽 사용자 인터페이스(GUI, Graphical User Interface)를 이해함으로써 기드라가 작동하는 모습을 처음 엿볼 수 있다.
‘5장, 기드라 데이터 디스플레이’에서는 파일 분석을 위한 기드라의 주요 툴인 CodeBrowser를 설명한다. 또한 CodeBrowser의 창 구성도 경험한다.
‘6장, 기드라의 디스어셈블리 이해’에서는 기드라 디스어셈블리를 이해하고 이용하는 데 필요한 기본적인 개념을 설명한다.
‘7장, 디스어셈블리 코드 변경’에서는 기드라의 분석을 보완하고 자체 분석 과정의 일부로 기드라 디스어셈블리를 조작하는 방법을 알아본다.
‘8장, 데이터 타입과 데이터 구조체’에서는 컴파일된 프로그램에서 발견되는 간단하거나 복잡한 데이터 구조체를 정의하고 변경하는 방법을 살펴본다.
‘9장, 상호 참조’에서는 상호 참조와 상호 참조가 그래프 작성을 어떻게 지원하는지 그리고 프로그램의 동작을 이해하는 데 어떻게 핵심적인 역할을 하는지 자세히 설명한다.
‘10장, 그래프’에서는 기드라의 그래프 기능과 바이너리 분석 툴로 그래프를 이용하는 방법을 설명한다.

3부: 자신을 위한 기드라 만들기
‘11장, 소프트웨어 리버스 엔지니어링 협업’에서는 기드라의 고유한 기능인 기드라를 이용한 협업 지원을 소개한다. 기드라 서버를 설정하는 방법 및 다른 분석가와 프로젝트를 공유하는 방법을 살펴본다.
‘12장, 기드라 사용자 정의’에서는 개별적인 분석 워크플로를 지원하고자 프로젝트와 툴을 설정함으로써 기드라를 사용자 정의하는 방법을 설명한다.
‘13장, 기드라의 세계관 확장’에서는 기드라가 새로운 바이너리 구조를 인식할 수 있게 라이브러리 시그니처 및 기타 특정 콘텐츠를 만들고 적용하는 방법을 알려준다.
‘14장, 기드라 스크립트’에서는 기드라의 인라인 편집기를 사용해 파이썬과 자바로 작성하는 기드라의 스크립트 기능을 소개한다.
‘15장, 이클립스와 기드라’에서는 이클립스를 기드라에 통합시키고 그에 따른 강력한 스크립트 기능으로 기드라 스크립트를 새로운 수준으로 끌러올릴 것이며, 예제를 통해 새로운 분석기를 만들어본다.
‘16장, 기드라 헤드리스 모드’에서는 GUI가 없는 헤드리스 모드에서 기드라를 사용하는 방법을 소개한다. 그리고 대규모의 반복적인 작업에서 헤드리스 모드가 제공하는 장점을 살펴본다.

4부: 심층 분석
‘17장, 기드라 로더’에서는 기드라에서 파일을 임포트하고 로드하는 방법을 자세히 설명한다. 그리고 이전에 인식되지 않은 파일 형식을 처리하기 위한 새로운 로더를 만들어본다.
‘18장, 기드라 프로세서’에서는 프로세서 아키텍처를 정의하기 위한 기드라의 SLEIGH 언어를 소개한다. 기드라에 새로운 프로세서와 명령을 추가하는 과정을 경험한다.
‘19장, 기드라 디컴파일러’에서는 기드라의 매우 인기 있는 기능 중 하나인 기드라 디컴파일러를 자세히 설명한다. 기드라 디컴파일러가 내부적으로 어떻게 동작하고 분석 과정에 어떻게 기여하는지 살펴본다.
‘20장, 컴파일러’에서는 다른 컴파일러로 컴파일되거나 대상 플랫폼이 다른 코드에 대해 설명한다.

5부: 실제 분석에 적용
‘21장, 난독화된 코드 분석’에서는 코드를 실행시키지 않는 정적 분석으로 난독화된 코드를 분석하는 방법을 설명한다.
‘22장, 바이너리 패치’에서는 분석을 수행하는 동안 기드라를 이용해 바이너리를 패치해서 새로운 버전의 패치된 바이너리를 만드는 방법을 설명한다.
‘23장, 바이너리 비교와 버전 추적’에서는 기드라를 이용해 두 바이너리 간의 차이점을 식별하는 방법과 바이너리의 버전을 추적하는 기능을 간단히 소개한다.

‘부록: IDA 사용자를 위한 기드라’에서는 IDA에 익숙한 사용자를 위해 IDA 용어와 사용법을 기드라의 유사한 기능에 매핑시키기 위한 팁과 트릭을 제공한다.

  작가 소개

지은이 : 크리스 이글
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 사용자를 위한 기드라
__기본 지식
____데이터베이스 생성
____기본적인 창과 탐색
__스크립트
__요약
찾아보기

  회원리뷰

리뷰쓰기

    이 분야의 신상품