소스코드를 분석하라! 역공학 리버싱의 이론부터 IDA Pro 실전 활용까지 세트
- 원서명The IDA Pro Book: The Unofficial Guide to the World's Most Popular Disassembler, Reversing: Secrets of Reverse Engineering (ISBN 9781593271787)
- 지은이크리스 이글, 엘다드 에일람
- 옮긴이고현영, 윤근용
- ISBN : 9788960773356
- 79,000원
- 2012년 08월 30일 펴냄 (절판)
- 페이퍼백 | 1,440쪽 | 188*250mm
- 시리즈 : 해킹과 보안
판매처
- 현재 이 도서는 구매할 수 없습니다.
책 소개
[ 세트 구성: 전2권 ]
1) 『The IDA Pro Book (2nd Edition) 한국어판: 리버스 엔지니어링에 날개를 달다』
2) 『리버싱: 리버스 엔지니어링 비밀을 파헤치다』
『The IDA Pro Book (2nd Edition) 한국어판』 소개
IDA Pro를 사용해보고 싶은데 어떻게 시작해야 할지 잘 모른다면 이 책으로 시작해보길 바란다. 이 책은 IDA Pro에 대한 훌륭한 가이드로, IDA Pro의 구성부터 기본적인 기능, 스크립트와 SDK를 활용한 당면한 문제를 쉽게 해결할 수 있는 방법 등 IDA의 모든 것을 알려준다. 이 책을 보고 나면 IDA Pro를 이용한 리버스 엔지니어링의 마스터가 되어 있을 것이다.
이 책에서 다루는 내용
■ 내비게이션, 주석, 디스어셈블리를 수정할 수 있다.
■ 라이브러리 루틴 파악으로 사용자 코드에 좀 더 집중할 수 있다.
■ 코드 그래프 기능으로 상호 참조와 함수 호출 관계를 쉽게 파악할 수 있다.
■ SDK로 신규 프로세서와 파일 타입을 지원 가능하게 한다.
■ IDA 스크립트를 좀 더 쉽게 만들 수 있는 플러그인을 찾는다. 공동으로 리버스 엔지니어링 작업 등을 할 수 있다.
■ IDA의 내장 디버거로 어렵고 난해한 코드를 파헤칠 수 있다.
『리버싱』 소개
소프트웨어를 해부해서 설계와 구현 내용, 심지어 소스코드까지도 알아낼 수 있어서 최근 보안업계의 화두로 떠오른 리버싱. 복제방지기술 무력화와 상용보안대책 무력화로 무장한 해커들의 리버싱 공격 패턴을 파악하기 위한 최신 기술을 담은 해킹 보안 업계 종사자의 필독서. 소프트웨어의 약점을 찾아내 보완하고, 해커의 공격이나 악성코드를 무력화하며, 더 좋은 프로그램을 개발할 수 있도록 프로그램의 동작 원리를 이해하는 데도 효율적인 리버스 엔지니어링의 비밀을 파헤친다.
이 책에서 다루는 내용
■ IA-32 호환 프로세서용 컴파일러가 만든 어셈블리 언어 코드를 읽는 방법
■ 문서화되지 않은 파일 포맷이나 네트워크 프로토콜 해석
■ 리버스 엔지니어링이 합법인 경우와 불법인 경우, 그리고 불법일 때의 이유
■ 리버싱을 활용해 해커가 복사 방지 기술을 무력화하는 방법
■ 리버스 엔지니어링을 적용해 악성코드를 무력화하는 방법
■ 코드 리버싱을 막는 방어책과 효과적인 수행 방법
■ 닷넷 플랫폼 리버싱과 어셈블리 언어인 MSIL
■ 실제 악성코드 프로그램 분석 방법
■ 악성코드 프로그램을 이용해 공격자가 감염된 시스템 제어권을 획득하는 과정
1) 『The IDA Pro Book (2nd Edition) 한국어판: 리버스 엔지니어링에 날개를 달다』
2) 『리버싱: 리버스 엔지니어링 비밀을 파헤치다』
『The IDA Pro Book (2nd Edition) 한국어판』 소개
IDA Pro를 사용해보고 싶은데 어떻게 시작해야 할지 잘 모른다면 이 책으로 시작해보길 바란다. 이 책은 IDA Pro에 대한 훌륭한 가이드로, IDA Pro의 구성부터 기본적인 기능, 스크립트와 SDK를 활용한 당면한 문제를 쉽게 해결할 수 있는 방법 등 IDA의 모든 것을 알려준다. 이 책을 보고 나면 IDA Pro를 이용한 리버스 엔지니어링의 마스터가 되어 있을 것이다.
이 책에서 다루는 내용
■ 내비게이션, 주석, 디스어셈블리를 수정할 수 있다.
■ 라이브러리 루틴 파악으로 사용자 코드에 좀 더 집중할 수 있다.
■ 코드 그래프 기능으로 상호 참조와 함수 호출 관계를 쉽게 파악할 수 있다.
■ SDK로 신규 프로세서와 파일 타입을 지원 가능하게 한다.
■ IDA 스크립트를 좀 더 쉽게 만들 수 있는 플러그인을 찾는다. 공동으로 리버스 엔지니어링 작업 등을 할 수 있다.
■ IDA의 내장 디버거로 어렵고 난해한 코드를 파헤칠 수 있다.
『리버싱』 소개
소프트웨어를 해부해서 설계와 구현 내용, 심지어 소스코드까지도 알아낼 수 있어서 최근 보안업계의 화두로 떠오른 리버싱. 복제방지기술 무력화와 상용보안대책 무력화로 무장한 해커들의 리버싱 공격 패턴을 파악하기 위한 최신 기술을 담은 해킹 보안 업계 종사자의 필독서. 소프트웨어의 약점을 찾아내 보완하고, 해커의 공격이나 악성코드를 무력화하며, 더 좋은 프로그램을 개발할 수 있도록 프로그램의 동작 원리를 이해하는 데도 효율적인 리버스 엔지니어링의 비밀을 파헤친다.
이 책에서 다루는 내용
■ IA-32 호환 프로세서용 컴파일러가 만든 어셈블리 언어 코드를 읽는 방법
■ 문서화되지 않은 파일 포맷이나 네트워크 프로토콜 해석
■ 리버스 엔지니어링이 합법인 경우와 불법인 경우, 그리고 불법일 때의 이유
■ 리버싱을 활용해 해커가 복사 방지 기술을 무력화하는 방법
■ 리버스 엔지니어링을 적용해 악성코드를 무력화하는 방법
■ 코드 리버싱을 막는 방어책과 효과적인 수행 방법
■ 닷넷 플랫폼 리버싱과 어셈블리 언어인 MSIL
■ 실제 악성코드 프로그램 분석 방법
■ 악성코드 프로그램을 이용해 공격자가 감염된 시스템 제어권을 획득하는 과정
목차
목차
- 『The IDA Pro Book (2nd Edition) 한국어판』
- 1부 IDA 소개
- 1장 디스어셈블리 소개
- 디스어셈블리 이론
- 디스어셈블리란?
- 디스어셈블리가 필요한 이유
- 디스어셈블리의 방법
- 2장 리버싱과 디스어셈블리 툴
- 분류 툴
- 요약 툴
- 심층 조사 툴
- 3장 IDA 프로 배경 지식
- 헥스레이 사의 저작권 침해 대책
- IDA Pro의 획득
- IDA 지원 사이트
- IDA 설치
- IDA 사용자 인터페이스 고찰
- 2부 IDA 기본 사용법
- 4장 IDA 시작
- IDA 시작
- IDA 데이터베이스 파일
- IDA 데스크탑 소개
- 초기 분석 과정 중 데스크탑의 진행 상황
- IDA 데스크탑 팁과 트릭
- 버그 보고
- 5장 IDA 데이터 디스플레이
- 기본 IDA 디스플레이
- 보조 디스플레이 화면
- 기타 IDA 디스플레이
- 6장 디스어셈블리 살펴보기
- 기본 탐색 기능
- 스택 프레임
- 데이터베이스 검색
- 7장 디스어셈블리 다루기
- 이름과 이름 지정
- IDA의 주석
- 기본 코드 변환
- 8장 데이터 타입과 데이터 구조
- 데이터 구조 파악
- IDA 구조체 생성
- 구조체 템플릿 활용
- 신규 구조체 가져오기
- 표준 구조체 활용
- IDA TIL 파일
- C++ 리버스 엔지니어링 기초
- 9장 상호 참조와 그래프
- 상호 참조
- IDA 그래프
- 10장 여러 가지 IDA
- 콘솔 모드 IDA
- IDA 일괄처리 모드 사용
- 3부 IDA 고급 사용법
- 11장 IDA 커스터마이징
- 환경설정 파일
- 기타 IDA 환경설정 파일 옵션
- 12장 FLIRT 시그니처로 라이브러리 인식
- 고속 라이브러리 식별과 인식 기술
- FLIRT 시그니처 적용
- FLIRT 시그니처 파일 생성
- 13장 IDA 심층 탐구
- 추가된 함수 정보
- loadint로 미리 정의된 주석 보강
- 14장 바이너리 패칭과 IDA 제약 사항
- 혼란을 야기하는 메뉴
- IDA 출력 파일과 패치
- 15장 IDC 스크립팅
- 기본적인 스크립트 실행
- IDC 언어
- IDC 스크립트 단축키
- 유용한 IDC 함수
- IDC 스크립트 예제
- IDAPython 스크립트 예제
- 16장 IDA SDK
- SDK 소개
- IDA API
- 17장 IDA 플러그인 아키텍처
- 플러그인 개발
- 플러그인 작성
- 플러그인 설치
- 플러그인 환경설정
- IDC 확장
- 플러그인 사용자 인터페이스 옵션
- 스크립트 플러그인
- 18장 바이너리 파일과 IDA 로더 모듈
- 알지 못하는 파일 분석
- 수작업으로 PE 파일 로딩
- IDA 로더 모듈
- IDA 로더 작성
- 다른 로더 전략
- 스크립트 로더 작성
- 19장 IDA 프로세서 모듈
- 파이썬 바이트 코드
- 파이썬 인터프리터
- 프로세서 모듈 빌드
- 프로세서 모듈 아키텍처
- 프로세서 모듈 스크립트
- 5부 실제 애플리케이션
- 20장 다양한 컴파일러
- 점프 테이블과 switch문
- RTTI 구현
- 디버그 바이너리와 릴리스 바이너리
- 기타 호출 규약
- 21장 난독화된 코드 분석
- 안티정적 분석 기법
- 안티동적 분석 기법
- IDA를 이용한 정적 바이너리 역난독화
- 가상 머신 기반 난독화
- 22장 취약점 분석
- 신규 취약점 발견
- IDA로 취약점을 발견한 후
- IDA와 취약점 개발 절차
- 셸코드 분석
- 23장 실제 IDA 플러그인
- IDAPython
- collabREate
- ida-x86emu
- MyNav
- 6부 IDA 디버거
- 24장 IDA 디버거
- 디버거 시작
- 디버거 디스플레이
- 프로세스 제어
- 디버깅 자동화
- 25장 디스어셈블러/디버거 통합
- 배경
- IDA 데이터베이스와 디버거
- 난독화 코드 디버깅
- IdaStealth
- 예외 처리
- 26장 추가 디버거 기능
- IDA를 이용한 원격 디버깅
- Bochs 활용 디버깅
- Appcall
- 부록 A IDA 5.0 무료 버전 사용
- IDA 무료 버전 제약 사항
- IDA 무료 버전 사용
- 부록 B IDC/SDK 상호 참조
- 『리버싱』
- 1부 리버싱 101
- 1장 기초
- 리버스 엔지니어링
- 소프트웨어 리버스 엔지니어링: 리버싱
- 리버싱 적용
- 보안 관련 리버싱
- 악성코드 소프트웨어
- 암호 알고리즘 리버싱
- 디지털 저작권 관리
- 프로그램 바이너리 감사
- 소프트웨어 개발에서의 리버싱
- 소프트웨어 간의 상호 운용
- 경쟁 제품 분석
- 소프트웨어의 품질과 안정성 측정
- 보안 관련 리버싱
- 로우레벨 소프트웨어
- 어셈블리 언어
- 컴파일러
- 가상 머신과 바이트 코드
- 운영체제
- 리버싱 절차
- 시스템 레벨 리버싱
- 코드 레벨 리버싱
- 사용 툴
- 시스템 모니터링 툴
- 디스어셈블러
- 디버거
- 디컴파일러
- 리버싱은 합법적인 작업인가
- 상호 운용성
- 경쟁
- 저작권법
- 영업 비밀과 특허권
- 디지털 밀레니엄 저작권법
- DMCA 사례
- 사용권 계약
- 예제 코드와 툴
- 정리
- 2장 로우레벨 소프트웨어
- 하이레벨 관점
- 프로그램 구조
- 모듈
- 공통 구성 요소
- 데이터 처리
- 변수
- 사용자 정의 데이터 구조체
- 리스트
- 제어 흐름
- 하이레벨 언어
- C
- C++
- 자바
- C#
- 프로그램 구조
- 로우레벨 관점
- 로우레벨 데이터 처리
- 레지스터
- 스택
- 힙
- 실행 데이터 섹션
- 제어 흐름
- 로우레벨 데이터 처리
- 어셈블리 언어 입문
- 레지스터
- 플래그
- 명령 포맷
- 기본 명령
- 데이터 이동
- 산술 연산
- 비교 연산
- 조건 분기
- 함수 호출
- 코드 예
- 컴파일러 기초
- 컴파일러란
- 컴파일러 아키텍처
- 프런트엔드
- 중간 표현
- 최적화기
- 백엔드
- 리스팅 파일
- 사용 컴파일러
- 실행 환경
- 소프트웨어 실행 환경(가상 머신)
- 바이트 코드
- 인터프리터
- Just-in-Time 컴파일러
- 리버싱 전략
- 최신 프로세서에서의 하드웨어 실행 환경
- Intel NetBurst
- μops(Micro-Ops)
- 파이프라인
- 분기 예측
- 소프트웨어 실행 환경(가상 머신)
- 정리
- 하이레벨 관점
- 3장 윈도우 기초
- 컴포넌트와 기본 아키텍처
- 간략한 역사
- 특징
- 지원 하드웨어
- 메모리 관리
- 가상 메모리와 페이징
- 페이징
- 페이지 폴트
- 워킹 셋
- 커널 메모리와 유저 메모리
- 커널 모드 공간
- 섹션 객체
- VAD 트리
- 유저 모드 메모리 할당
- 메모리 관리 API
- 가상 메모리와 페이징
- 객체와 핸들
- 네임드 객체
- 프로세스와 스레드
- 프로세스
- 스레드
- 컨텍스트 스위칭
- 동기화 객체
- 프로세스 초기화 과정
- 애플리케이션 프로그래밍 인터페이스
- Win32 API
- 네이티브 API
- 시스템 콜 메커니즘
- 실행 포맷
- 기본 개념
- 이미지 섹션
- 섹션 정렬
- 동적 링크 라이브러리
- 헤더
- 임포트와 익스포트
- 디렉터리
- 입력과 출력
- I/O 시스템
- Win32 서브시스템
- 객체 관리자
- 구조화된 예외 처리
- 정리
- 컴포넌트와 기본 아키텍처
- 4장 리버싱 툴
- 다양한 리버싱 방법
- 오프라인 코드 분석(Dead-Listing)
- 라이브 코드 분석
- 디스어셈블러
- IDA Pro
- ILDasm
- 다양한 리버싱 방법
- 디버거
- 유저 모드 디버거
- OllyDbg
- WinDbg를 이용한 유저 모드 디버깅
- IDA Pro
- PEBrowse Professional Interactive
- 커널 모드 디버거
- WinDbg를 이용한 커널 모드 디버깅
- Numega SoftICE
- 가상 머신에서의 커널 디버깅
- 유저 모드 디버거
- 디컴파일러
- 시스템 모니터링 툴
- 패치 툴
- Hex Workshop
- 기타 리버싱 툴
- 실행 이미지 덤프 툴
- DUMPBIN
- PEView
- PEBrowse Professional
- 실행 이미지 덤프 툴
- 정리
- 리버싱과 상호운용성
- 기본 원칙
- 문서화되지 않은 API를 찾는 방법
- 찾고자 하는 것
- 사례 연구: NTDLL.DLL의 Generic Table API
- RtlInitializeGenericTable
- RtlNumberGenericTableElements
- RtlIsGenericTableEmpty
- RtlGetElementGenericTable
- 셋업과 초기화
- 로직과 구조
- 검색 루프 1
- 검색 루프 2
- 검색 루프 3
- 검색 루프 4
- 소스코드 추출
- RtlInsertElementGenericTable
- RtlLocateNodeGenericTable
- RtlRealInsertElementWorker
- Splay 트리
- RtlLookupElementGenericTable
- RtlDeleteElementGenericTable
- 분석한 내용 종합
- 정리
- Cryptex
- Cryptex 사용
- Cryptex 리버싱
- 패스워드 검증 과정
- “Bad Password” 메시지 잡아내기
- 패스워드 변환 알고리즘
- 패스워드 해싱
- 디렉터리 구조
- 디렉터리 처리 코드 분석
- 파일 엔트리 분석
- 디렉터리 구조 덤프
- 파일 추출 과정
- 파일 목록 검색
- 파일 복호화
- 부동소수점 연산
- 복호화 루프
- 해시 값 검증
- 정리
- 좀 더 자세히
- 결론
- 문제점 정의
- 보안 취약점
- 스택 오버플로우
- 간단한 스택 보안 취약점
- 내부 구현
- 스택 검사
- 비실행 가능 메모리
- 힙 오버플로우
- 문자열 필터
- 정수 오버플로우
- 사용자 입력 정수에 대한 산술 연산
- 형 변환 에러
- 스택 오버플로우
- 사례: IIS 인덱싱 서비스 보안 취약점
- CVariableSet::AddExtensionControlBlock
- DecodeURLEscapes
- 정리
- 악성코드의 종류
- 바이러스
- 웜
- 트로이 목마
- 백도어
- 모바일 코드
- 애드웨어/스파이웨어
- 스틱키 소프트웨어
- 미래의 악성코드
- 정보 탈취 웜
- 바이오스/펌웨어 악성코드 331
- 악성코드의 목적
- 악성코드 취약점
- 다형성
- 변종
- 안전한 리버싱 환경 구축
- Backdoor.Hacarmy.D
- 실행 파일 언패킹
- 최초 실행
- 설치
- 네트워크 연결
- 서버에 연결
- 채널에 접속
- 백도어와 통신
- SOCKS4 서버 실행
- 자체 제거
- Backdoor.Hacarmy.D: 명령 레퍼런스
- 정리
- 저작권
- 사회적 측면
- 소프트웨어 저작권 침해
- 문제 정의
- 보안 결함
- 필요 조건
- 이론적으로 크랙이 불가능한 모델
- 보호 유형
- 매체 기반 보호
- 시리얼 번호
- 질의 응답과 온라인 인증
- 하드웨어 기반의 보호
- 서비스로서의 소프트웨어
- 진보된 보호 개념
- 크립토 프로세서
- 디지털 저작권 관리
- DRM 모델
- 윈도우 미디어 저작권 관리자
- 시큐어 오디오 패스
- DRM 모델
- 워터 마크
- 신뢰 컴퓨팅
- 복사 방지 기술 공격
- 정리
- 안티 리버싱이 필요한 이유
- 기본적인 안티 리버싱 방법
- 심볼 정보 제거
- 코드 암호화
- 안티 디버거 기술
- 디버거 기본
- IsDebuggerPresent API
- SystemKernelDebuggerInformation
- 싱글 스텝 인터럽트를 이용한 SoftICE 탐지
- 트랩 플래그
- 코드 체크섬
- 안티 디스어셈블러
- 선형 스윕 디스어셈블러
- Recursive Traversal 디스어셈블러
- 적용
- 코드 난독화
- 제어 흐름 변환
- Opaque Predicates
- 안티 디컴파일러
- Table Interpretation
- 인라인닝과 아웃라이닝
- 인터리빙 코드
- 순서 변환
- 데이터 변환
- 변수 인코딩
- 배열 재구성
- 정리
- 패치
- Keygen
- 키 생성 알고리즘 추출
- 고급 크래킹: Defender
- Defender의 초기화 루틴 리버싱
- 복호화된 코드 분석
- 사라진 SoftICE
- 스레드 리버싱
- “Killer” 스레드 무력화
- KERNEL32.DLL 로딩
- 함수 재암호화
- 엔트리 포인트로 다시 돌아가서
- 프로그램 파라미터 파싱
- 사용자 이름 처리
- 사용자 정보 검증
- 코드 복호화
- Defender에 대한 무작위 대입
- Defender의 보호 기술
- 함수 레벨의 암호화
- 상대적으로 강력한 암호 블록 체인
- 재 암호화
- 애플리케이션/운영체제와의 인터페이스 난독화
- 프로세서 타임 스탬프 검증 스레드
- 실행 시에 복호화 키 생성
- 상호 의존 키
- 사용자 입력 기반의 복호화 키
- 인라이닝
- 함수 레벨의 암호화
- 정리
- 기반 지식
- 닷넷 기본
- 매니지드 코드
- 닷넷 프로그래밍 언어
- 공통 타입 시스템
- 중간 언어
- 평가 스택
- 활성화 레코드
- IL 명령
- IL 코드 샘플
- Counting Items
- 링크드 리스트 샘플
- 디컴파일러
- 난독기
- 심볼 이름 변경
- 제어 흐름 변경
- 디컴파일과 디스어셈블리 차단
- 난독화된 코드 리버싱
- XenoCode
- Preemptive Solutions의 DotFuscator
- Remotesoft 난독기와 링커
- Remotesoft Protector
- 어셈블리 프리컴파일
- 어셈블리 암호화
- 정리
- 네이티브 코드 디컴파일
- 전형적인 디컴파일러의 구조
- 중간 표현
- 표현식과 표현식 트리
- 제어 흐름 그래프
- 프론트엔드
- 의미 분석
- 제어 흐름 그래프 생성
- 코드 분석
- 데이터 흐름 분석
- 단일 정적 할당
- 데이터 전달
- 레지스터 변수 구별
- 데이터 타입 전달
- 타입 분석
- 기본 데이터 타입
- 복잡한 데이터 타입
- 제어 흐름 분석
- 라이브러리 함수의 구별
- 데이터 흐름 분석
- 백엔드
- 실제 IA-32 디컴파일러
- 정리