이미 소장하고 있다면 판매해 보세요.
|
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 사용자를 위한 기드라 __기본 지식 ____데이터베이스 생성 ____기본적인 창과 탐색 __스크립트 __요약 찾아보기 |
Chris Eagle
Kara Nance
윤우빈의 다른 상품
|
◈ 이 책에서 다루는 내용 ◈
◆ 디스어셈블리 코드 탐색 방법 ◆ 기드라에 내장된 디컴파일러를 이용한 빠른 분석 방법 ◆ 난독화된 바이너리 분석 방법 ◆ 새로운 데이터 유형을 인식하도록 기드라 기능 확장 방법 ◆ 새로운 기드라 분석기와 로더 생성 방법 ◆ 새로운 프로세서와 명령어 셋 추가 방법 ◆ 작업 자동화를 위한 기드라 스크립트 작성 방법 ◆ 리버스 엔지니어링 협업을 위한 환경 설정 방법 ◈ 이 책의 대상 독자 ◈ 야심차고 경험이 풍부한 소프트웨어 리버스 엔지니어를 대상으로 한다. 리버스 엔지니어링 경험이 없어도 상관없다. 책의 초반부에서 리버스 엔지니어링을 소개하고, 기드라로 바이너리를 탐색하고 분석하는 데 필요한 배경 지식을 제공하기 때문이다. 자신의 툴킷에 기드라를 추가하고자 하는 숙련된 리버스 엔지니어라면 처음 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 용어와 사용법을 기드라의 유사한 기능에 매핑시키기 위한 팁과 트릭을 제공한다. ◈ 지은이의 말 ◈ 현재와 미래의 리버스 엔지니어에게 기드라를 소개하는 것이 이 책의 목표다. 숙련된 리버스 엔지니어의 손에서 기드라는 분석 과정을 유연하게 만들고, 리버스 엔지니어의 분석 작업을 개선하고 각자의 요구 사항에 맞게 사용자 정의와 기능이 확장될 수 있다. 리버스 엔지니어라면 기드라를 쉽게 사용 가능하다. 특히 이진 바이너리 분석을 시작할 때 내장된 디컴파일러는 디스어셈블리 코드와 하이레벨 언어 간의 관계를 명확히 이해할 수 있게 해준다. 기드라에 대한 책을 쓰는 일은 쉽지 않다. 기드라는 지속적으로 진화하고 있는 복잡한 오픈소스 리버스 엔지니어링 툴이다. 기드라 커뮤니티는 계속해서 기드라의 기능을 개선하고 확장해 나가고 있다. 새로운 많은 오픈소스 프로젝트와 마찬가지로 기드라는 빠른 속도로 진화돼 릴리스되고 있다. 이 책을 집필하는 동안 가졌던 주요 목표는, 기드라가 진화함에 따라 현재와 미래의 기드라 버전을 이해하고 당면한 리버스 엔지니어링 문제를 해결하는 데 기드라를 효과적으로 활용할 수 있도록 광범위하고 깊은 지식 기반을 제공하는 것이었다. 가능한 한 기드라 버전을 가리지 않으려고 노력했다. 다행스럽게도 새로운 버전의 기드라가 나오더라도 문서화가 잘돼 있으며, 책에서 설명한 기드라 버전과 새로운 버전 간에 차이가 발생할 경우 버전별로 자세한 가이드를 제공하는 변경 사항 목록이 있다. ◈ 옮긴이의 말 ◈ 리버스 엔지니어링은 전통적으로 소프트웨어 보안과 디지털 포렌식, 악성코드 분석, 보안 취약점 연구 등 사이버 보안 영역에서 필요한 중요 기술로 자리 잡고 있습니다. 오늘날의 IT 환경은 클라우드 컴퓨팅, 사물인터넷(IoT, Internet of Things), 인공지능(AI, Artificial Intelligence) 등 혁신적인 기술이 주도하고 있으며 앞으로도 새로운 IT 기술이 주도하는 방향으로 끊임없이 진화해갈 것입니다. 그러한 새로운 기술들은 새로운 기회를 제공하지만 새로운 형태의 보안 위협에 직면하게 하고 있습니다. 전통적인 보안 위협뿐만 아니라 새로운 형태의 보안 위협에 대응하는 데 기본적으로 필요한 기술이 소프트웨어 분석 능력입니다. 단순한 소프트웨어 분석 역량이 아닌 보안 위협의 본질을 파악하고 그것을 역추적할 수 있는 기술과 통찰력이 필요합니다. 이를 위해 사이버 보안 전문가에게 필요한 기본 도구 중 하나가 리버스 엔지니어링 도구입니다. 기드라는 오픈소스 리버스 엔지니어링 도구 중 가장 강력하고 유연합니다. 오픈소스이기 때문에 전 세계의 사이버 보안 전문가와 연구자들이 적극적으로 기능을 발전시키고 있다는 장점이 있습니다. 기드라는 강력한 디컴파일러와 디스어셈블러를 포함하고 있으며 복잡한 바이너리 분석을 손쉽게 수행할 수 있는 다양한 기능을 제공하고 있습니다. 기드라의 설치부터 기본 사용법 그리고 기드라가 제공하는 다양한 기능 및 활용 방법을 자세히 설명하며, 사용자가 필요하다면 자신만의 고유한 기능을 만들어 사용할 수 있는 방법까지 자세히 다루는 것이 이 책입니다. 즉, 리버스 엔지니어링을 수행해야 하는 사이버 보안 담당자를 위한 종합적이고 전문적인 안내서이자 실용적인 지침서라고 할 수 있습니다. 기드라를 활용한 리버스 엔지니어링의 세계를 깊이 이해하고 자신의 리버스 엔지니어링 능력을 한 단계 끌어올리는 기회가 되길 바랍니다. |