저자

크리스이글,카라낸스

저자:크리스이글
40년경력의리버스엔지니어로,『TheIDAProBook(한국어판)』(에이콘,2012)의저자이며인기있는리버스엔지니어링교육자다.수많은리버스엔지니어링툴을만들었고블랙햇(Blackhat),데프콘(Defcon),쉬무콘(Shmoocon)과같은보안콘퍼런스에서발표자로활약했다.

저자:카라낸스
개인보안컨설턴트로,수년동안컴퓨터공학교수로재직했다.허니넷(Honeynet)프로젝트의이사회에서활동했으며세계적인콘퍼런스에서수많은강연을했다.기드라익스텐션만들기를좋아하며정기적으로기드라교육을제공한다.

역자:윤우빈
기존의IT기술과새로만들어지고있는최신기술을보안이라는관점에서이해하고새로운기술,비즈니스영역의새로운보안위협과그에대한대응기술을고민하며,에이콘출판사를통해다양한보안관련지식을공유하고자노력하고있다.지금도여전히새로운분야에대한보안기술연구와다양한보안기술개발을위해진땀흘리고있다.

목차

1부.소개

1장.디스어셈블리소개
__디스어셈블리이론
__디스어셈블리란
__디스어셈블리하는이유
____악성코드분석
____보안취약점분석
____소프트웨어상호운용
____컴파일러검증
____디버깅출력
__디스어셈블러의동작방식
____기본적인디스어셈블리알고리듬
____리니어스윕디스어셈블리
____재귀하강디스어셈블리
__요약


2장.리버싱과디스어셈블리툴
__유형을분류하기위한툴
____file
____PETools
____PEiD
__요약을위한툴
____nm
____ldd
____objdump
____otool
____dumpbin
____c++filt
__심층분석툴
____strings
____디스어셈블러
__요약


3장.기드라를만나다
__기드라라이선스
__기드라버전
__기드라지원리소스
__기드라다운로드
__기드라설치
____기드라디렉터리구조
____기드라시작
__요약

2부.기본적인기드라사용법

4장.기드라시작하기
__기드라실행
__새로운프로젝트생성
____기드라파일로딩
____RawBinary로더
__기드라로파일분석
____자동분석결과
__초기분석과정의작업내용
____작업내용저장과종료
__기드라관련팁과트릭
__요약


5장.기드라데이터디스플레이
__CodeBrowser
__CodeBrowser창
____Listing창
____추가적인디스어셈블리창열기
____기드라의FunctionGraph
____ProgramTrees창
____SymbolTree창
____DataTypeManager창
____Console창
____Decompiler창
__기타기드라창
____Bytes창
____DefinedData창
____DefinedStrings창
____SymbolTable창과SymbolReferences창
____MemoryMap창
____FunctionCallGraph창
__요약

6장.기드라의디스어셈블리이해
__디스어셈블리탐색
____이름과라벨
____기드라에서탐색
____GoTo대화상자
____탐색히스토리
__스택프레임
____함수호출메커니즘
____호출규약
____스택프레임에대한추가고려사항
____지역변수레이아웃
____스택프레임예
__기드라스택뷰
____기드라스택프레임분석
____Listing창에서의스택프레임
____디컴파일러의스택프레임분석
____피연산자로서의지역변수
____기드라스택프레임에디터
__검색
____SearchProgramText대화상자
____SearchMemory대화상자
__요약

7장.디스어셈블리코드변경
__이름과라벨변경
____파라미터와지역변수의이름변경
____라벨이름변경
____새로운라벨추가
____라벨편집
____라벨제거
____라벨탐색
__주석
____줄끝주석
____Pre주석과Post주석
____Plate주석
____Repeatable주석
____파라미터와지역변수주석
____어노테이션
__기본적인코드변환
____코드표시옵션변경
____명령피연산자의형식변경
____함수변경
____데이터를코드로변환(또는코드를데이터로변환)
__기본적인데이터변환
____데이터타입지정
____문자열처리
____배열정의
__요약

8장.데이터타입과데이터구조체
__데이터이해하기
__데이터구조체의사용형태인식
____배열요소에대한접근
____구조체멤버에대한접근
__기드라에서구조체만들기
____새로운구조체만들기
____구조체필드수정
____구조체의레이아웃적용
__C++리버싱의기본
____this포인터
____가상함수와Vftable
____객체의생명주기
____이름맹글링
____런타임타입식별
____상속관계
____C++리버스엔지니어링참고자료
__요약

9장.상호참조
__참조에대한기본지식
____상호참조(역참조)
____참조예
__상호참조관리창
____XRefs창
____ReferencesTo창
____SymbolReferences창
____참조추가와변경
__요약

10장.그래프
__기본블록
__FunctionGraph창
__FunctionCallGraph창
__트리뷰
__요약

3부.자신을위한기드라만들기

11장.소프트웨어리버스엔지니어링협업
__팀워크
__기드라서버설정
__공유프로젝트
____공유프로젝트생성
____프로젝트관리
__Project창메뉴
____File메뉴
____Edit메뉴
____Project메뉴
__프로젝트저장소
____버전관리
____예제시나리오
__요약


12장.기드라사용자정의
__CodeBrowser
____창재정렬
____Edit의ToolOptions메뉴
____Tool옵션
____특별한툴편집기능
____CodeBrowser레이아웃저장
__기드라Project창
__Tools메뉴
__워크스페이스
__요약

13장.기드라의세계관확장
__파일임포트
__분석기
__워드모델
__데이터타입
____새로운데이터타입아카이브생성
__FunctionID
__FunctionID플러그인
____FunctionID플러그인예제:UPX
____FunctionID플러그인예제:정적라이브러리프로파일링
__요약

14장.기드라스크립트
__ScriptManager메뉴
____ScriptManager창
____ScriptManager툴바
__스크립트개발
____자바스크립트작성(JavaScript가아님!)
____스크립트편집예제:정규표현검색
____파이썬스크립트
____다른언어지원
__GhidraAPI소개
____Address인터페이스
____Symbol인터페이스
____Reference인터페이스
____GhidraScript클래스
____Program클래스
____Function인터페이스
____Instruction인터페이스
__기드라스크립트예제
____예제1:함수나열
____예제2:명령나열
____예제3:상호참조나열
____예제4:함수호출찾기
____예제5:어셈블리언어에뮬레이팅
__요약


15장.이클립스와기드라
__이클립스
____이클립스통합
____이클립스시작
____이클립스를이용한스크립트편집
__GhidraDev메뉴
____GhidraDevNew
____PackageExplorer탐색
__예제:기드라분석기모듈프로젝트
____단계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++구현
____함수오버로딩
____RTT

출판사 서평

이책의대상독자

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

이책의구성

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

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

2부:기본적인기드라사용법
‘4장,기드라시작하기’부터는기드라와함께하는본격적인여정이시작된다.프로젝트를만들고,파일을분석하고,기드라의그래픽사용자인터페이스(GUI,GraphicalUserInterface)를이해함으로써기드라가작동하는모습을처음엿볼수있다.
‘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,InternetofThings),인공지능(AI,ArtificialIntelligence)등혁신적인기술이주도하고있으며앞으로도새로운IT기술이주도하는방향으로끊임없이진화해갈것입니다.그러한새로운기술들은새로운기회를제공하지만새로운형태의보안위협에직면하게하고있습니다.전통적인보안위협뿐만아니라새로운형태의보안위협에대응하는데기본적으로필요한기술이소프트웨어분석능력입니다.단순한소프트웨어분석역량이아닌보안위협의본질을파악하고그것을역추적할수있는기술과통찰력이필요합니다.이를위해사이버보안전문가에게필요한기본도구중하나가리버스엔지니어링도구입니다.기드라는오픈소스리버스엔지니어링도구중가장강력하고유연합니다.오픈소스이기때문에전세계의사이버보안전문가와연구자들이적극적으로기능을발전시키고있다는장점이있습니다.기드라는강력한디컴파일러와디스어셈블러를포함하고있으며복잡한바이너리분석을손쉽게수행할수있는다양한기능을제공하고있습니다.
기드라의설치부터기본사용법그리고기드라가제공하는다양한기능및활용방법을자세히설명하며,사용자가필요하다면자신만의고유한기능을만들어사용할수있는방법까지자세히다루는것이이책입니다.즉,리버스엔지니어링을수행해야하는사이버보안담당자를위한종합적이고전문적인안내서이자실용적인지침서라고할수있습니다.기드라를활용한리버스엔지니어링의세계를깊이이해하고자신의리버스엔지니어링능력을한단계끌어올리는기회가되길바랍니다.