1장 윈도우, 메시지(Window, Message)
01 윈도우(Window)
02 윈도우 프로시저(Window Procedure)
03 윈도우 메시지(Window Message)
04 모달 윈도우 해제하기(Modal Window Free)
05 데스크톱(Desktop), 세션(Session), 스테이션(Station)
2장 프로세스, 스레드(Process, Thread)
01 프로세스의 구조
02 스레드의 구조
03 스레드 관리 기법
04 스레드 로컬 스토리지(Thread-Local Storage)
3장 커널 객체(Kernel Object)
01 핸들(Handle)과 객체(Object)
02 동기화 객체(Synchronization Object)
03 커널 객체 공유
04 보안 속성(Security Attributes)
4장 디버깅(Debugging)
01 디버거(Debugger)
02 디버기(Debuggee)
03 디버깅 API
04 심볼과 맵(Symbol & Map)
05 디버거 연결
06 특권(Privilege)
07 PEB, TEB 확인하기
5장 어셈블리(Assembly) 언어
01 어셈블리 언어 형식(Instruction Format)
02 레지스터(Register)
03 기본 명령어 이해
6장 해킹 기법(Hacking Techniques)
01 버퍼 오버플로우(Buffer Overflow)
02 포맷 문자열 공격(Format String Attack)
03 코드 케이브(Code Cave)
04...1장 윈도우, 메시지(Window, Message)
01 윈도우(Window)
02 윈도우 프로시저(Window Procedure)
03 윈도우 메시지(Window Message)
04 모달 윈도우 해제하기(Modal Window Free)
05 데스크톱(Desktop), 세션(Session), 스테이션(Station)
2장 프로세스, 스레드(Process, Thread)
01 프로세스의 구조
02 스레드의 구조
03 스레드 관리 기법
04 스레드 로컬 스토리지(Thread-Local Storage)
3장 커널 객체(Kernel Object)
01 핸들(Handle)과 객체(Object)
02 동기화 객체(Synchronization Object)
03 커널 객체 공유
04 보안 속성(Security Attributes)
4장 디버깅(Debugging)
01 디버거(Debugger)
02 디버기(Debuggee)
03 디버깅 API
04 심볼과 맵(Symbol & Map)
05 디버거 연결
06 특권(Privilege)
07 PEB, TEB 확인하기
5장 어셈블리(Assembly) 언어
01 어셈블리 언어 형식(Instruction Format)
02 레지스터(Register)
03 기본 명령어 이해
6장 해킹 기법(Hacking Techniques)
01 버퍼 오버플로우(Buffer Overflow)
02 포맷 문자열 공격(Format String Attack)
03 코드 케이브(Code Cave)
04 화면 정보 구하기
05 비정상 함수 호출(Abnormal Function Call)
06 리플레이 공격(Replay Attack)
07 IPC 스니핑(IPC Sniffing)
08 코드 훔치기(Code Steal)
09 코드 패치(Code Patch)
10 루트킷(Rootkit)
7장 DLL 인젝션(DLL Injection)
01 DLL 인젝션
02 DLL 인젝션 기법
03 DLL 인젝션 방어
8장 API 후킹(API Hooking)
01 IAT(Import Address Table) 후킹
02 인라인 코드 패치(Inline Code Patch)
03 SSDT(System Service Descriptor Table) 후킹
9장 안티디버깅(Anti-debugging)
01 디버깅(Debugging) API
02 디버그 플래그(Debug Flag)
03 중단점(Breakpoint)
04 예외 처리기(Exception Handler)
05 기타
10장 메모리 상의 데이터 변경
01 가상 메모리와 물리적인 메모리의 관계
02 메모리 조작 도구
03 디버거를 통한 메모리 조작
04 API를 통한 메모리 조작
11장 자동 입력 프로그램 제작
01 응용 레벨 자동 입력 프로그램
02 커널 레벨 자동 입력 프로그램
12장 스풀 데이터(Spool Data) 조작
01 스풀(Spool) 동작
02 스풀 가로채기(Spool Hijacking) 소스 코드
13장 디바이스 드라이버(Device Driver) 개발
01 디바이스 드라이버의 기본 구조
02 디바이스 드라이버 로딩하기
03 디바이스 드라이버에 명령 보내기
14장 보안을 고려한 개발
01 보안의 필요성
02 씬 클라이언트(Thin Client)
03 디버그 코드(Debug Code)
04 함수 명명(Function Naming)
05 설정 및 UI(User Interface)
06 데이터(Data)
07 문자열
부록 주요 디버거(Debugger) 소개
01 WinDbg
02 OllyDbg
03 IDA
04 SoftIce
이 책은 여러 가지 보안 영역 중에 애플리케이션 보안 영역을 기본부터 충실하게 다루고 있다. 윈도우즈 운영체제에서 애플리케이션의 동작 원리, 악성코드 분석의 기본이 되는 리버스 엔지니어링, 해커로부터 애플리케이션 디버깅을 방어하는 기술 등을 단계적으로 설명하고 있다. 또한, 저자들이 현업에서 직접 분석하고 대응했던 해킹 기법들도 소개하고 있다. 최근에는 해킹 기법과 보안 기술을 따로 구분하지 않는다. 해킹에 사용되는 기법들이 보안 기술에 적용되고 있으며, 그 반대의 경우도 허다하다. 이런 관점에서 이 책에서 설명하는 해킹 기법들은 독자들이 보다 재미있고 쉽게 최신 보안 기술을 습득하는 데 큰 도움이 될 것이다.--- '감수의 글' 중에서
해킹의 최종 목적은 시스템과 프로그램을 변경해서 해커가 원하는 정보와 결과물을 얻는 것이다. 여기에 직접적으로 이용되는 리버스 엔지니어링은 프로그램의 구조를 전부 바꿔 의도하지 않은 방식으로 동작하게 할 수 있는 강력한 기술이다. 하지만 대부분의 사람들이 흔하게 접하지 못하는 분야이고 보안과 관련된 개발자들도 어렵다는 이유로 나와는 상관없는 분야로 치부하려는 경향이 있다. 리버스 엔지니어링이라는 분야가 위험성과 더불어 강력한 파괴력을 가지고 있는 분야이지만 반대로 보안을 유지할 수 있는 강력한 도구로 사용될 수 도 있다. 자신의 프로그램과 시스템을 지키기 위해서 이 분야에 대한 이해가 필요하지 않을까? 하지만 막상 보안이나 해킹에 대한 공부를 시작하려 해도 어디서부터 손을 대야 하는지 모르는 상황에 놓이게 되는 것이 현실이다.
리버스 엔지니어링을 다루는 서적은 많지 않으며, 그나마 존재하는 해킹 서적들도 대부분 웹이나 네트워크 환경만을 다루고 있다. 리버스 엔지니어링이라는 분야가 관심을 가지고 있는 소수의 마니아나 해커들에 의해서 발전하고 있고 본질적인 폐쇄성 때문에 더욱 접하기 어려운 것이 사실이다. 자료를 찾으려면 외국 서적이나 해외 인터넷 사이트를 힘들게 찾아야만 하고 여기저기 흩어져 있는 정보 속에서 제대로 된 지식을 얻기도 쉽지 않다. 국내와 해외의 해킹 기술 격차의 주요한 원인 중에 하나가 이 분야에 대한 정보와 공유가 부족하기 때문이라 볼 수 있다.