이때까지 우리나라 역공학 관련 서적은 "역분석의 구조와 원리" 가 유일했었던것으로 알고있다.
그러나 개인적인 소견이지만 이 서적은 저자의 목적이었고 , 많은 사람들이 접근할수 있게끔 너무 기본적인 내용만 다루는터라 ,
고급 기술을 원하는 사람들에게는 뭔가 부족해보이는 서적이었다.

그러나..5월11일?

Reversing: Secrets of Reverse Engineering
리버싱 : 리버스 엔지니어링 비밀을 파헤치다

라는 제목으로 책이 출판되었다.

원래 이 책은 4년전 2005년 4월즈음에 외국에 이미 원서로 출판되었었지만,
우리나라는 드디어!  이제서야 번역이 되어져서 몇일전에 출판된 것이다.

따라서 아마 개인적인 생각으로는  역자가 따로 최신 내용을 추가하지 않는이상 ,
2005년 당시의 기술적인 내용들이 언급되어져 있을것이므로 , 약간 오래된 풍의 내용이 실렸을것으로 추측되지만,
그래도 역시나 제대로 된 서적 하나없는 우리나라 리버싱 정보망에 한줄기 희망의 빛을 주는 서적이 아닌가..하는 생각이 든다.
(실제 책을 받아서 본 결과 , 그리 오래된 내용들도 아니고 , 좋은 내용들이 많은것 같다.)








책에서 다룰 내용 중 , 주인장이 관심가는 부분을 붉은색으로 표시해보았다.


★ 이 책에서 다루는 내용 ★

■ IA-32 호환 프로세서용 컴파일러가 만든 어셈블리 언어 코드를 읽는 방법
> 어셈코드를 아직 어설프게밖에 읽을줄 모르는 관계로 , 개인적으로는 많은 도움이 될듯하다.

■ 문서화되지 않은 파일 포맷이나 네트워크 프로토콜 해석
■ 리버스 엔지니어링이 합법인 경우와 불법인 경우, 그리고 불법일 때의 이유
> 제일 민감하고도 , 중요한 부분이라고 생각되는 부분.

■ 리버싱을 활용해 해커가 복사 방지 기술을 무력화하는 방법
> 유명한 게임제작사들이 적용하는 SafeDisc 라던가 Starforce , SecuROM등을 무력화 하는 방법을 다루는것 같다.

■ 리버스 엔지니어링을 적용해 악성코드를 무력화하는 방법
> 악성코드를 분석하여 , 취약한 프로그램에 수정을 가함으로써  , 악성코드가 그 프로그램에 해를 끼치지 않게 하는건가?

■ 코드 리버싱을 막는 방어책과 효과적인 수행 방법
■ 닷넷 플랫폼 리버싱과 어셈블리 언어인 MSIL
■ 실제 악성코드 프로그램 분석 방법
> 가끔 이슈가 되는 악성프로그램들을 파보곤 하는데 , 역시나 관심이 가는 부분

■ 악성코드 프로그램을 이용해 공격자가 감염된 시스템 제어권을 획득하는 과정
>  크래커가 시스템을 장악하는 수법을 말하는듯.



다음으로 목차를 살펴보자.  목차를 보면 다들 아시겠지만 , 고급적인 내용들을 상당수 다루고 있다.
리버싱에 관심이 있는분께는 큰 도움이 될듯 하다.
주인장 역시 모르는 내용이 엄청나게 많다.
(초보분들이나 , 익숙치 않으신 분들께는 내용이 어려울것이라 생각된다.)


목차
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
정리

2부 리버싱 응용

5장 리버싱 실전
리버싱과 상호운용성
기본 원칙
문서화되지 않은 API를 찾는 방법
- 찾고자 하는 것
사례 연구: NTDLL.DLL의 Generic Table API
- RtlInitializeGenericTable
- RtlNumberGenericTableElements
- RtlIsGenericTableEmpty
- RtlGetElementGenericTable
-- 셋업과 초기화
-- 로직과 구조
-- 검색 루프 1
-- 검색 루프 2
-- 검색 루프 3
-- 검색 루프 4
-- 소스코드 추출
- RtlInsertElementGenericTable
-- RtlLocateNodeGenericTable
-- RtlRealInsertElementWorker
-- Splay 트리
- RtlLookupElementGenericTable
- RtlDeleteElementGenericTable
- 분석한 내용 종합
정리

6장 파일 포맷 분석
Cryptex
Cryptex 사용
Cryptex 리버싱
패스워드 검증 과정
- "Bad Password" 메시지 잡아내기
- 패스워드 변환 알고리즘
- 패스워드 해싱
디렉터리 구조
- 디렉터리 처리 코드 분석
- 파일 엔트리 분석
디렉터리 구조 덤프
파일 추출 과정
- 파일 목록 검색
- 파일 복호화
- 부동소수점 연산
- 복호화 루프
- 해시 값 검증
정리
좀 더 자세히
결론

7장 프로그램 바이너리 감사
문제점 정의
보안 취약점
- 스택 오버플로우
-- 간단한 스택 보안 취약점
-- 내부 구현
-- 스택 검사
-- 비실행 가능 메모리
- 힙 오버플로우
- 문자열 필터
- 정수 오버플로우
-- 사용자 입력 정수에 대한 산술 연산
- 형 변환 에러
사례: IIS 인덱싱 서비스 보안 취약점
- CVariableSet::AddExtensionControlBlock
- DecodeURLEscapes
정리

8장 악성코드 리버싱
악성코드의 종류
- 바이러스
- 웜
- 트로이 목마
- 백도어
- 모바일 코드
- 애드웨어/스파이웨어
스틱키 소프트웨어
미래의 악성코드
- 정보 탈취 웜
- 바이오스/펌웨어 악성코드
악성코드의 목적
악성코드 취약점
다형성
변종
안전한 리버싱 환경 구축
Backdoor.Hacarmy.D
- 실행 파일 언패킹
- 최초 실행
- 설치
- 네트워크 연결
- 서버에 연결
- 채널에 접속
- 백도어와 통신
- SOCKS4 서버 실행
- 자체 제거
Backdoor.Hacarmy.D: 명령 레퍼런스
정리

3부 크래킹

9장 저작권 침해와 불법 복사 방지
저작권
사회적 측면
소프트웨어 저작권 침해
- 문제 정의
- 보안 결함
- 필요 조건
- 이론적으로 크랙이 불가능한 모델
보호 유형
- 매체 기반 보호
- 시리얼 번호
- 질의 응답과 온라인 인증
- 하드웨어 기반의 보호
- 서비스로서의 소프트웨어
진보된 보호 개념
- 크립토 프로세서
디지털 저작권 관리
- DRM 모델
-- 윈도우 미디어 저작권 관리자
-- 시큐어 오디오 패스
워터 마크
신뢰 컴퓨팅
복사 방지 기술 공격
정리

10장 안티 리버싱 기술
안티 리버싱이 필요한 이유
기본적인 안티 리버싱 방법
심볼 정보 제거
코드 암호화
안티 디버거 기술
- 디버거 기본
- IsDebuggerPresent API
- SystemKernelDebuggerInformation
- 싱글 스텝 인터럽트를 이용한 SoftICE 탐지 ...

목차를 쭉 살펴보면 ,  어셈블리 언어부터 시작해서 ,   윈도우 운영체제 , 컴퓨터 구조 ,  전반적인 언어론 , 컴파일러 등
모든 내용을 다루고 있다.  (아마 리버싱이라는 관점에 입각해서 내용을 다룰것으로 추측된다.)
따라서 모르는 부분이 생기면 , 언제든지 간단하게 찾아볼 수 있을것으로 생각된다.

원판이 발행된지 오래된것이 약간 마음에 걸리지만 , 크게 개의치 않고..
일단 내용이 매우 알차보인다


SAMSUNG TECHWIN | NV24HD, VLUU NV24HD, LANDIAO NV106HD | Normal program | Pattern | 1/3sec | F/2.8 | 0.00 EV | 4.3mm | ISO-200 | Off Compulsory | 2009:05:22 23:47:59
SAMSUNG TECHWIN | NV24HD, VLUU NV24HD, LANDIAO NV106HD | Normal program | Pattern | 1/25sec | F/2.8 | 0.00 EV | 4.3mm | ISO-200 | Off Compulsory | 2009:05:22 23:48:18


오늘 책을 받아보았는데 ,  내용이 많아서 좋지만  좀 딱딱한 감이 없잖아 있다. (그림같은것이 별로 없다)
그리고 좀 어려운 편인것 같아서 , 초보분들께서 보기에는 다소 무리가 있는것 같다.


C언어 , 컴퓨터구조 , 어셈블리언어 , 운영체제 등을 대충이나마 미리 알고 책을 보는게 좋을듯..
저작자 표시 비영리 변경 금지
신고
by Sone 2009.05.22 02:55