logo
logo
x
바코드검색
BOOKPRICE.co.kr
책, 도서 가격비교 사이트
바코드검색

인기 검색어

실시간 검색어

검색가능 서점

도서목록 제공

리버스 엔지니어링 바이블

리버스 엔지니어링 바이블

(코드 재창조의 미학)

강병탁 (지은이), 김휘강 (감수)
  |  
위키북스
2014-11-20
  |  
35,000원

일반도서

검색중
서점 할인가 할인률 배송비 혜택/추가 실질최저가 구매하기
yes24 로딩중
교보문고 로딩중
영풍문고 로딩중
인터파크 로딩중
11st 로딩중
G마켓 로딩중
쿠팡 로딩중
쿠팡로켓 로딩중
notice_icon 검색 결과 내에 다른 책이 포함되어 있을 수 있습니다.

중고도서

검색중
로딩중

e-Book

검색중
서점 정가 할인가 마일리지 실질최저가 구매하기
로딩중

책 이미지

리버스 엔지니어링 바이블

책 정보

· 제목 : 리버스 엔지니어링 바이블 (코드 재창조의 미학)
· 분류 : 국내도서 > 컴퓨터/모바일 > OS/Networking > 네트워크 보안/해킹
· ISBN : 9788998139728
· 쪽수 : 604쪽

책 소개

C/C++ 코드가 어셈블리 코드로 어떻게 변해가는지에 대한 기초적인 부분에서부터, 실제 악성코드 분석, 보안 프로그램 공격 방법, 소스코드가 없는 상태에서 프로그램을 커스터마이징하는 방법까지, 리버스 엔지니어링에 관련된 모든 사항을 다룬다.

목차

[01부] 리버스 엔지니어링 기본

▣ 01장_리버스 엔지니어링만을 위한 어셈블리

어셈블리의 기본 구조
어셈블리의 명령 포맷
레지스터, 복잡한 설명은 그만
EAX
EDX
ECX
EBX
ESI, EDI
외울 필요가 없는 어셈블리 명령어
- PUSH, POP
- MOV
- LEA
- ADD
- SUB
- INT
- CALL
- INC, DEC
- AND, OR, XOR
- NOP
- CMP, JMP
리버스 엔지니어링에 필요한 스택
함수의 호출
리턴 주소

▣ 02장_C 문법과 디스어셈블링

함수의 기본 구조
함수의 호출 규약
- 1) _cdecl 방식
- 2) 파라미터는 2개
- 3) 리턴 값이 숫자
if 문
반복문
구조체와 API Call
결론

▣ 03장_C++ 클래스와 리버스 엔지니어링

C++ 분석의 난해함
클래스 뼈대
클래스의 수명과 전역변수
객체의 동적 할당과 해제
생성자와 소멸자
캡슐화 분석
다형성 구조 파악

▣ 04장_DLL 분석

DLL의 번지 계산법
재배치를 고려한 방법
- 1) push 문
- 2) 점프문
번지 고정
익스포트 함수
DllAttach/DllDetach 찾기
패킹된 DLL의 DllMain() 찾기
DisableThreadLibraryCalls로 찾기

[02부] 리버스 엔지니어링 중급

▣ 05장_PE 헤더(PE Header)

PE에 대한 상식적인 개념
빌드 과정
PE 파일 구조
- IMAGE_DOS_HEADER
- IMAGE_NT_HEADER
- IMAGE_FILE_HEADER
- Machine
- NumberOfSections
- TimeDateStamp
- SizeOfOptionalHeader
IMAGE_OPTIONAL_HEADER
- Magic
- SizeOfCode
- MajorLinkerVersion, MinorLinkerVersion
- ImageBase
- AddressOfEntryPoint
- BaseOfCode
- SectionAlignment, FileAlignment;
- SizeOfImage
- SizeOfHeaders
- Subsystem- - - - - - - : 0x2 (Windows GUI)
- DataDirectory
IMAGE_SECTION_HEADER
PE와 API 호출의 원리
IAT에서 API를 계산하는 방법
익스포트 테이블 (export table)
마무리

▣ 06장_흔히 사용하는 패턴

조건문의 기본
심화된 조건문
반복문
break가 들어가는 경우
continue가 들어갈 경우
return이 생기는 경우
문자열 컨트롤
- 1. strcpy
- 2. strcat
- 3. strlwr
정리

▣ 07장_MFC 리버싱

리버스 엔지니어링에 필요한 MFC 구조
MFC로 개발됐는지 여부 확인
MFC 라이브러리 등록
MFC 초기화 루틴 찾기
버튼 핸들러 찾아내기
헤더 파일 활용
그 밖의 MFC 관련 리버싱 접근 방법

[03부] 연산 루틴 리버싱

▣ 08장_시리얼 추출 방법

F-Secure Reverse Engineering 대회
Level 1 문제 풀이
- 1) 사전 정보 획득 첫 번째 - 파일 스캐너로 스캔
- 2) 사전 정보 획득 두 번째 - API 확인
- 3) 사전 정보 획득 세 번째 - 파일의 이미지 베이스 확인
Level 2 문제 풀이
문자열 컨트롤
안티 디버깅 기법
WinMain보다 먼저 가동되는 코드

▣ 09장_코드 속이기

Level 3 문제 풀이
데이터 속에 숨은 코드
리버싱으로 방정식 세우기
바이너리 파싱
재사용이 어려운 코드
디스어셈블러 속이기
정리하며

[04부] 안티 리버스 엔지니어링

▣ 10장_교과서적인 안티 디버깅

프로그램 개발 완료 후 다가올 리버싱의 위험
리버싱에 대항하는 A씨의 반격, 그 후…
안티 디버깅이란?
고전적인 안티 디버깅
API 로 제공되는 안티 디버깅 기능
다중 기능을 보유한 맥가이버칼, NtQueryInformationProcess
Debug Object Handle
또 핸들을 찾아라, NtQueryObject
NoDebugInherit
디버거는 어디에, NtSetInformationThread
int3을 이용한 디버거 감지
SetUnhandledExceptionFilter
0xCC 자체를 탐지하자
소프트아이스 감지
PEB를 이용한 방법
정리

▣ 11장_한 단계 높은 안티 디버깅

생각보다 활용도가 높은 프로세스 체크
버전 체크
부모 프로세스 체크
SeDebugPrivilege 권한 체크
WinDBG 검출
키보드 입력 봉쇄
CloseHandle()을 이용한 안티 리버싱
OutputDebugString이 주는 두 가지 마술
시간차 공격! 타이머를 이용한 방법
PREFIX REP을 통한 예외 처리
API Hook을 이용한 디버깅 감지
리모트 디버깅 감지
생각해 볼 과제

▣ 12장_패커가 사용하는 기술

패커? 대수롭지 않은 개념
패킹된 코드의 암호화/복호화
IAT의 변화
매뉴얼 언패킹(MUP)
파일 스캐너
디버거의 구조
Self Debugging
스택 세그먼트 레지스터
int 0x2d
덤프 방지
디버그 레지스터

▣ 13장_우회 방법

API Hooking을 통한 우회
OllyDBG 옵션을 이용한 우회
플래그 수정으로 우회

[05부] OllyDBG 플러그인

▣ 14장_OllyDBG 플러그인 SDK

최고의 매력 OllyDBG 플러그인
플러그인 가동 원리
플러그인 SDK 사용 규약
초기화 코드
PreInit - ODBG_Plugindata()
초기화 루틴 - ODBG_Plugininit()
메뉴 작성 - ODBG_Pluginmenu()
메뉴 핸들러 작성 - ODBG_Pluginaction()
종료 처리
PDK 활용
t_dump - 덤프 관련 구조체
t_memory - 메모리 관련 구조체
t_disasm - 디스어셈블 구조체
Readmemory
구조체 종합 예제 - Extra Copy

▣ 15장_리버싱 보조 플러그인

IsDebuggerPresent() 무력화
디버거 떼어내기
자동 어태치
단축키 - ODBG_Pluginshortcut()
OllyAdvance 분석
Setbreakpoint()와 TLS CallBack 감지
커맨드라인 실행 바
디버깅 흔적 청소
게임 해킹 플러그인 - Game Invader
Game Invader의 구현 원리
메모리 속성 옵션
암복호화 코드 분석 - Find Crypt
FindCrypt의 구현 원리
남은 과제

▣ 16장_메모리 스캔 플러그인 개발

아직 세상에 없는 플러그인을 만들어 보자
분석 시간을 줄일 수 있다면?
플러그인 코어 루틴 컨셉
UI 디자인
버튼 핸들러 제작
후킹 탐지 기능
파일과 메모리의 기준 번지를 정하는 방법
IAT가 코드 섹션에 포함된 경우
패킹 체크
후킹 탐지 스캔 결과
암복호화 루틴 탐지
화이트 리스트 처리
OllyMemScan 평가

[06부] 보안 모듈 우회

▣ 17장_바이러스 감지 회피

백신은 과연 바이러스만 감지하는가
기본적인 감지 원리
고전적인 우회 방법
쓰레기 코드를 통한 우회 방법
실행조차 되지 않는 코드
헤더 변조
문자열 패턴 우회
바이너리 패킹의 시대
대체 가능한 어셈블리어
패커의 특성을 고려한 회피
섹션 이름 변경
백신사의 대응

▣ 18장_백신을 공격하는 악성코드

백신을 공격하는 바이러스는 어느 정도 존재하는가
특정 백신 언급 증가
백신 프로세스 종료
트레이 속임
공식적으로 언급된 취약점
업데이트 우회
보안업체 비방
드라이버 공격
몸체가 없는 공격 코드
Conficker
SDT 취약점
벤치마킹의 중요성

▣ 19장_실시간 감시 기능 취약점

바이러스 감지 후 필요한 행위
파일 시스템 필터 드라이버
실시간 감시 기능의 구현 원리
콜백 함수 무력화
콜백 무력화 대응 방법
노티파이 카운트 취약점
화이트리스트 강제 주입
파일 접근 통제
ZIP 취약점
가상 PC 감지
그외 안티바이러스 우회를 위한 다양한 방법

▣ 20장_키보드 보안 솔루션 우회

키보드 취약점이 되는 구간
키보드 보안의 원리
폴링 취약점
IE 의 추가 기능 관리
가장 피해 사례가 많은 ring3 영역
핵심 모듈 공격
언로드 DLL
ring3에서 키보드 보안을 우회하는 이유
키보드 보안의 문제점
가상 키보드 취약점
인터넷 뱅킹 취약점 - 메모리 해킹
키보드 보안이 어려운 이유
클라이언트에서 완전한 보안은?

[07부] 한 차원 높은 바이너리 창조

▣ 21장_코드 후킹

코드 후킹과 공동경비구역
번지 계산의 고통
DLL 인젝션 코드
CreateRemoteThread
DLL 인젝션 테스트
코드 후킹 기본 디자인
여섯 바이트를 변조하는 이유
DLL 번지의 강제 고정과 naked 함수
패킷 버퍼 로깅
하드코딩에서 탈피하자
후킹 코드의 확장
MakeJMP - 후킹 함수의 간결화
마무리

▣ 22장_코드 패칭

동적 접근 방법과 정적 접근 방법
프로세스 검출 루틴 분석
점프문 공격
파일에서 패칭할 때와 메모리에서 패칭할 때
상수값 패칭
스택 해킹
거짓을 리턴
스레드 공격
마무리

▣ 23장_난독화와 더미 코드

디스어셈블러 개론
안티 디스어셈블링
가비지 코드 속에 담긴 진짜 코드
ASPack이 사용하는 안티 디스어셈블링
Themida에서 사용하는 안티 디스어셈블링
ASProtect 의 코드 카피
Themida의 코드 리다이렉트
상수 암호화
API 호출 감추기
난독화 코드 찾아내어 우회하기
마무리

저자소개

강병탁 (지은이)    정보 더보기
현재 에이아이스페라(AI Spera)의 대표이사로 사이버 위협 인텔리전스(CTI) 프로젝트를 진행하고 있으며 고려대학교 정보보호대학원 산학협력중점교수를 역임하고 있다. 이전에는 네오플 인프라기술실 실장으로 시스템/보안/DB/인프라개발 등 인프라 기술을 총괄했으며, 넥슨 아메리카에서는 InfoSec Team 팀장으로 미국 지사의 보안조직을 설립, 보안프로세스구축/침입탐지/컴플라이언스 업무를 해 왔고, 넥슨 코리아에서는 게임보안팀을 설립, 팀장으로 라이브 게임의 보안성 향상과 침해대응 업무를 해 왔다. 월간 마소에서 해킹/보안을 주제로 약 3년간 테크니컬 라이터로 활동했고, 각종 대학교와 기관 등에서 해킹/보안을 주제로 한 정기/특별 강의를 다년간 진행했다. 저서로는 《인프라 보안》 《리버스 엔지니어링 바이블》이 있다.
펼치기
김휘강 (감수)    정보 더보기
2018년 현 고려대학교 정보보호대학원(대학원), 사이버국방학과 (학부) 교수 현 카카오 프라이버시정책 자문위원회 현 삼성전자 소프트웨어/보안 부문 자문단 현 KISA ISMS 인증위원회 위원 현 한국정보보호학회 이사 전 엔씨소프트 정보보안실장 전 A3 Secuity 창업자, 대표
펼치기

책속에서

정보보안의 태동기에는 네트워크 보안, 시스템 보안 두 영역에서 방화벽과 같은 네트워크 단에서의 필터링 기술과, OS 단에서의 아주 기본적인 요소기술이 발전했었다. 그 뒤 나온 보안기술들을 보더라도 네트워크 기반 침입탐지시스템(N-IDS), 침입방지시스템(IPS), 웹애플리케이션방화벽(WAF)과 같이 주로 이미 발생해서 인스턴스화된 공격에 대해 탐지와 예방을 하는 것들이 주류를 이뤘다. 예전부터 개념 역시 존재했고 소수 기업 및 인원들에 의해 이뤄지고는 있었지만, 이미 개발된 프로그램 그 자체에 대한 취약점을 발견해 내기 위해 시큐어코딩이나 개발보안에 사람들이 관심을 갖고 노력을 하기 시작한 것은 사실 10년도 채 되지 않았다고 볼 수 있다.

보안산업 역시 고도화 되어가는 과정에서 나타나는 현상 중 하나로, 일단 기본적인 기술들이 먼저 발전한 뒤에야, 특화된 영역에 대한 요소기술로 깊이 연구가 이뤄지게 된다. 전통적인 네트워크 보안 영역에 쏠렸고(Firewall, N-IDS), 그 후 OS 영역(H-IDS, SecureOS)에 주 초점이 맞춰져 있었다가, DB/Application 영역 (DB보안, 웹보안 및 시큐어코딩 등의 개발보안)으로 관심사가 옮겨가면서 리버스 엔지니어링 기술의 중요성은 두말할 나위 없이 보안 분야 종사가 반드시 갖춰야 할 기술로 자리 잡았다.

다양한 보안직군 가운데 모의해킹, 취약점분석을 주로 하거나 또는 악성코드 분석 또는 안티 리버스 엔지니어링(Anti-Reverse Engineering)을 통해 보안을 강화하고자 한다면 리버스 엔지니어링 관련 지식을 꼭 쌓을 것을 권하고 싶다. 리버스 엔지니어링 지식과 더불어 Solaris, HP-UX, AIX, Linux, FreeBSD와 같은 다양한 OS를 다뤄보고 각 환경에서의 프로그래밍 스킬을 함께 익힌다면 보안 분야에서 "자신만의 고유한(unique) 능력을 갖춘 대체 불가능한(irreplaceable) 인재"로 성장하리라 확신한다.

이 책은 리버스 엔지니어링에 대해 충실히 다룰 뿐 아니라, 익힌 리버스 엔지니어링 기법을 실제로 어떤 곳에 활용할 수 있는지에 대해서도 상세히 다룬다. 그간 저자가 오랜 기간 동안 시행착오를 겪으면서 익힌 소중한 지식을, 그다음에 배우는 사람들은 실수와 시행착오를 최소한으로 하고 배울 수 있게 여기저기에 배려하고 있으며, 복잡하고 어렵기만 한 내용을 편안하게 전달하는 저자 특유의 노하우가 담겨 있다.
- 감수자의 글 중에서


추천도서

이 포스팅은 쿠팡 파트너스 활동의 일환으로,
이에 따른 일정액의 수수료를 제공받습니다.
도서 DB 제공 : 알라딘 서점(www.aladin.co.kr)
최근 본 책