저자소개
저자 : 조성문
저자 조성문은 16년 경력의 정보시스템 전문가이자 화이트 해커다. 삼성SDS에서 주식 거래 시스템을 개발하면서 IT 경력을 시작했으며, KTH에서 인터넷 포털시스템을 운영하면서 해킹과 보안에 대한 많은 경험을 쌓았다. 현재 공공기관에서 정보보안과 시스템 운영 업무를 담당하고 있다.
정보시스템을 운영하면서 DDoS, SQL Injection, BOF 등 수많은 해킹 공격을 경험했다. 그때마다 시스템을 복구하고 취약점을 보완하기 위해 밤을 지새웠지만, 기존의 지식을 가지고는 누가 어떻게 해킹에 성공했는지 알아내기가 쉽지 않았다. 정보시스템을 안전하게 운영하려면 해킹 기술이 필요했고 리버싱, 침투 테스트, 파이썬 해킹 기술에 대한 연구를 시작했다. 지금은 그동안 얻은 경험을 바탕으로 후배들이 해킹의 기본 원리를 좀 더 쉽게 익힐 수 있도록 저술 활동에 힘쓰고 있다.
'컴퓨터시스템응용 기술사'와 '정보시스템 수석감리원' 자격증을 가지고 있으며, 저서로는 《파이썬 해킹 입문》과 《전설의 해커》가 있다. 또한, 국내에 몇 안 되는 정보시스템 운영 경험과 해킹 지식을 겸비한 전문가이기도 하다.
목차
01 리버싱을 위한 기초 지식
1. 리버싱을 위한 프로그램 실행 구조
2. 레지스터
3. 스택과 스택 프레임
3.1 스택
3.2 스택 프레임
4. PE 파일
4.1 PE 파일 기본 개념
4.2 주소 지정 방법
4.3 IAT
5. OllyDbg 기본 기능
5.1 OllyDbg란?
5.2 OllyDbg 기본 설정
6. 어셈블러 기초 지식
6.1 어셈블러의 개요
6.2 어셈블러 기본 구조
7. 리버싱에 필요한 도구
7.1 리버싱 기초 예제 abex crackme
7.2 리버싱의 바이블 Lena의 강의
7.3 PE 파일 분석 프로그램 PEView와 Detect It Easy
7.4 메모리 덤프를 위한 OllyDbg 플러그인 OllyDumpEx
7.5 손상된 IAT를 복구하는 LoadPE
02 리버싱 시작하기
1. abex crackme 첫 번째 예제
1.1 프로그램 동작 방식
1.2 엔트리 포인트
1.3 스텝 오버(F8)와 스텝 인투(F7)
1.4 브레이크포인트(F2)와 프로그램 실행(F9)
1.5 전진과 후진 기능 사용하기
1.6 프로그램 다시 시작( + )
1.7 MessageBox( ) 함수 구조
1.8 서브루틴과 스택 프레임
1.9 프로그램 구조 분석
1.10 문제 해결
2. abex crackme 두 번째 예제
2.1 프로그램 동작 방식
2.2 프로그램 실행(Paused & Running)
2.3 문자열 검색
2.4 코드 분석
2.5 스택 분석하기
2.6 리틀 엔디안과 빅 엔디안
2.7 메모리 분석하기
2.8 프로그램 구조 분석
2.9 문제 해결
03 리버싱에 익숙해지기
1. abex crackme 세 번째 예제
1.1 프로그램 동작 방식
1.2 함수 호출 규약
1.3 부호 있는 숫자의 표현
1.4 프로그램 구조 분석
1.5 문제 해결
2. abex crackme 네 번째 예제
2.1 프로그램 동작 방식
2.2 API 검색
2.3 프로그램 구조 분석
2.4 문제 해결
3. abex crackme 다섯 번째 예제
3.1 프로그램 동작 방식
3.2 GetVolumeInformation( ) 함수
3.3 반복문을 통한 문자열 변경
3.4 프로그램 구조 분석
3.5 문제 해결
04 리버싱, 좀 더 깊숙이
1. Lena의 초보자를 위한 리버싱 강의
1.1 TUTS4YOU에서 Lena의 강의 소개
1.2 Lena의 강의 구성
2. Nag 창 없애기
2.1 프로그램 동작 방식
2.2 콜 스택
2.3 코드 캐이브
2.4 메모리 맵
2.5 어셈블
2.6 실행 파일로 복사
3. 일련번호 생성 로직의 이해
3.1 프로그램 동작 방식
3.2 프로그램 구조 분석
3.3 일련번호 생성 로직 분석
3.4 ASCII 코드 값 추출
05 리버싱의 어려운 문제들
1. 패킹과 언패킹
1.1 패킹과 언패킹의 개요
1.2 패킹 도구
2. 대표적인 패커 UPX
2.1 UPX 개요
2.2 패킹
2.3 PE 파일 확인하기
2.4 언패킹과 OEP
2.5 메모리 덤프
2.6 IAT 복구
3. 매뉴얼 언패킹 사례
3.1 ESP 레지스터를 활용한 OEP 찾기
3.2 하드웨어 브레이크포인트
3.3 OEP 찾기와 언패킹된 프로그램 저장
3.4 MUP 결과 확인하기
4. 코드 인젝션
4.1 코드 인젝션의 개요
4.2 셸코드 입력
06 지뢰 찾기 게임 해킹
1. 시간 설정 변경
1.1 디버깅 시작하기
1.2 SetTimer( ) 함수 호출 영역에 브레이크포인트 설정
1.3 SetTimer( ) 호출 부분 코드 분석
1.4 타이머 조작
2. 지뢰 찾기 맵핵 만들기
2.1 맵핵 방법론
2.2 GetKeyState( ) 함수에 브레이크포인트 걸기
2.3 브레이크포인트 확인하기
2.4 비교 함수 분석하기
2.5 스텝 인투(F7) 기능을 활용한 서브루틴 분석
2.6 세 번째 서브루틴 분석
2.7 세 번째 서브루틴 - 폭탄 위치를 찾는 로직 발견
2.8 맵핵 코드 작성
2.9 맵핵 코드 분석
07 맺음말
1. 공부해야 할 고급 기술들
1.1 64비트 아키텍처
1.2 IDA Pro
1.3 언패킹 기술
2. 리버싱 기술 활용 분야
2.1 악성코드 분석
2.2 버그 헌팅
2.3 해킹
2.4 해킹 방어 대회
3. 집필을 마치며
A1 OllyDbg 기본 기능
1. OllyDbg 개요
1.1 OllyDbg란?
1.2 OllyDbg 구성
1.3 OllyDbg 기본 설정
2. 뷰
2.1 CPU
2.2 메모리 맵(Memory map)
2.3 실행 모듈(Executable modules)
2.4 콜 스택(Call stack)
3. 플러그인
4. 브레이크포인트
5. 코드 영역 메뉴
5.1 수정
5.2 주석 달기
5.3 어셈블
5.4 New origin here 메뉴
5.5 Follow in Dump 메뉴
5.6 이동하기
5.7 Search for 메뉴
5.8 참조 위치 찾기
A2 어셈블러
1. 어셈블러의 개요
1.1 단순한 언어 어셈블러
1.2 어셈블러의 개요
1.3 간단한 어셈블러 테스트 방법
2. 어셈블러 기본 구조
2.1 2개의 인자를 사용하는 명령어
2.2 1개의 인자를 사용하는 명령어
2.3 인자가 없는 명령어
3. 어셈블러 명령어 종류
3.1 데이터 이동
3.2 산술 연산자
3.3 부울 연산자