간편결제, 신용카드 청구할인
카카오페이 3,000원
(카카오페이 결제시 최대할인 3천원 / 5만원 이상 결제, 기간 중 1회)
삼성카드 6% (40,610원)
(삼성카드 6% 청구할인)
인터파크 롯데카드 5% (41,040원)
(최대할인 10만원 / 전월실적 40만원)
북피니언 롯데카드 30% (30,240원)
(최대할인 3만원 / 3만원 이상 결제)
NH쇼핑&인터파크카드 20% (34,560원)
(최대할인 4만원 / 2만원 이상 결제)
Close

리버싱 핵심 원리

소득공제

2013년 9월 9일 이후 누적수치입니다.

판매지수 646
?
판매지수란?
사이트의 판매량에 기반하여 판매량 추이를 반영한 인터파크 도서에서의 독립적인 판매 지수입니다. 현재 가장 잘 팔리는 상품에 가중치를 두었기 때문에 실제 누적 판매량과는 다소 차이가 있을 수 있습니다. 판매량 외에도 다양한 가중치로 구성되어 최근의 이슈도서 확인시 유용할 수 있습니다. 해당 지수는 매일 갱신됩니다.
Close
공유하기
  • 저 : 이승원
  • 출판사 : 인사이트
  • 발행 : 2012년 09월 30일
  • 쪽수 : 1030
  • ISBN : 9788966260522
정가

48,000원

  • 43,200 (10%할인)

    2,400P (5%적립)

할인혜택
적립혜택
  • I-Point 적립은 출고완료 후 14일 이내 마이페이지에서 적립받기한 경우만 적립됩니다.
  • 추가혜택
    배송정보
    •  당일배송을 원하실 경우 주문시 당일배송을 선택해주세요.
    • 서울시 강남구 삼성로 512변경
    • 배송지연보상 안내
    • 무료배송
    • 해외배송가능
    주문수량
    감소 증가
    • 북카트 담기
    • 바로구매
    • 매장픽업
    • 이벤트/기획전

    • 연관도서

    • 사은품(9)

    책소개

    이 책은 리버싱 기술과 그 동작 원리를 설명하는 데 집중한다. 즉 리버싱 기술의 단순한 소개에 그치지 않고, 각 기술의 핵심적인 원리를 깨닫게 하는 데 목표를 두고 있다. 이를 통해 기본기를 튼튼하게 다지는 것은 물론, 시간이 흘러도 가치가 변하지 않는 기술의 진수를 얻을 수 있다.
    여러분이 리버싱 세계를 여행하고 싶다면, 이 책인 친근한 가이드가 되어 줄 것이다!

    출판사 서평

    리버서라면 꼭 알아야 할 핵심 원리를 모두 담았다!

    리버싱이란 프로그램의 내부를 깊이 들여다보고 조작할 수 있는 기법이다. 리버싱은 일명 '리버서'라 불리는 악성 코드 분석가들의 특기이기도 하다. 무엇보다 리버싱 기법은 해커와 보안 전문가의 대결로만 이용되는 것은 아니다. 리버싱을 잘 활용하면 개발/테스트 단계에서 미처 발견하지 못한 버그나 취약점도 파악할 수 있고, 파일이나 메모리에 직접 접근하여 문제를 해결할 수 있다. 또한 전혀 새로운 기능을 추가해 프로그램의 기능을 향상시킬 수도 있어 매우 유용하다.
    이 책은 이런 마법 같은 일들이 가능한 '리버싱'에 필요한 핵심 원리를 50여개 장을 통해 꼼꼼하게 설명한다. 무엇보다 저자가 오랫동안 안철수 연구소에서 일한 경험을 토대로 직접 작성한 다양한 코드는 물론, 리버서라면 꼭 알아야 할 다양한 리버싱 기법을 상세하게 소개하기 때문에 리버서를 꿈꾸는 개발자와 실무를 경험해본 모두에게 도움을 준다.

    보안은 다양한 분야의 폭넓고 깊이 있는 지식과 전문가를 필요로 하는데, 이 책은 보안 분야 전문가로서의 첫걸음을 가볍게 시작 할 수 있도록 도움을 줄 것이다. _안철수연구소 중국 법인 분석 센터장 한창규

    리버서가 되기를 원하는가? '개발자인 내에게도 필요한가?'라는 질문을 가지고 있다면, 이 책은 당신의 확실한 동반자가 될 것이다.
    _안철수연구소 정관진 책임연구원/패킷인사이드(PacketInside.com)블로그운영자

    주요내용
    1A-32Register/디버깅/크랙/PE File Format/실행압축/Base Relocation Table/인라인 패치 실습/Windows 메시지 후킹/DLL 인젝션/DLL 이젝션/Code 인젝션/API 후킹/'스텔스'프로세스/글로벌 API후킹/64 bit Computing/ASLR/Session in Kernel 6/TEB/PEB/SEH/IA-32 Instuction/안티 디버깅

    목차

    1부 기초 리버싱

    1장 Reversing Story
    1.1. Reverse Engineering(RE)
    1.2. Reverse Code Engineering(RCE)
    1.2.1. 리버싱(분석) 방법
    1.2.2. Source Code, Hex Code, Assembly Code
    1.2.3. 패치와 크랙
    1.3. 리버싱 준비물
    1.3.1. 목표
    1.3.2. 열정
    1.3.3. 구글
    1.4. 리버싱 방해물
    1.4.1. 과욕
    1.4.2. 조급함
    1.5. 리버싱의 묘미

    2장 Hello World! 리버싱
    2.1. Hello World! 프로그램
    2.1.1. 디버거와 어셈블리 언어
    2.2. HelloWorld.exe 디버깅
    2.2.1. 디버깅 목표
    2.2.2. 디버깅 시작
    2.2.3. EP
    2.2.4. 40270C 함수 따라가기
    2.2.5. 40104F 점프문 따라가기
    2.2.6. main( ) 함수 찾기
    2.3. 디버거 좀 더 능숙하게 다루기
    2.3.1. 디버거 명령어
    2.3.2. 베이스 캠프
    2.3.3. 베이스 캠프를 설치하는 4가지 방법
    2.4. 원하는 코드를 빨리 찾아내는 4가지 방법
    2.4.1. 코드 실행 방법
    2.4.2. 문자열 검색 방법
    2.4.3. API 검색 방법 (1) - 호출 코드에 BP
    2.4.4. API 검색 방법 (2) - API 코드에 직접 BP
    2.5. “Hello World!” 문자열 패치
    2.5.1. 패치
    2.5.2. 문자열을 패치하는 두 가지 방법
    2.6. 마무리

    3장 Little Endian 표기법
    3.1. 바이트 오더링 49
    3.1.1. 리틀 엔디안 & 빅 엔디안
    3.1.2. OllyDbg에서 리틀 엔디안 확인

    4장 IA-32 Register 기본 설명
    4.1. CPU 레지스터란?
    4.1.1. 레지스터에 대해서 알아야 하는 이유
    4.2. IA-32의 레지스터
    4.2.1. Basic program execution registers
    4.3. 마무리

    5장 Stack
    5.1. 스택
    5.1.1. 스택의 특징
    5.1.2. 스택 동작 예제

    6장 abex crackme #1 분석
    6.1. abex’ crackme #1
    6.1.1. Start debugging
    6.1.2. 코드 분석
    6.2. 크랙
    6.3. 스택에 파라미터를 전달하는 방법
    6.4. 마무리

    7장 Stack Frame
    7.1. 스택 프레임
    7.2. 실습 예제 - stackframe.exe
    7.2.1. StackFrame.cpp
    7.2.2. main( ) 함수 시작 & 스택 프레임 생성
    7.2.3. 로컬 변수 셋팅
    7.2.4. add( ) 함수 파라미터 입력 및 add( ) 함수 호출
    7.2.5. add( ) 함수 시작 & 스택 프레임 생성
    7.2.6. add( ) 함수의 로컬 변수(x, y) 셋팅
    7.2.7. ADD 연산
    7.2.8. add( ) 함수의 스택 프레임 해제 & 함수 종료(리턴)
    7.2.9. add( ) 함수 파라미터 제거(스택 정리)
    7.2.10. printf( ) 함수 호출
    7.2.11. 리턴 값 셋팅
    7.2.12. 스택 프레임 해제 & main( ) 함수 종료
    7.3. OllyDbg 옵션 변경
    7.3.1. Disasm 옵션
    7.3.2. Analysis1 옵션
    7.4. 마무리

    8장 abex crackme #2
    8.1. abex’ crackme #2 실행
    8.2. Visual Basic 파일 특징
    8.2.1. VB 전용 엔진
    8.2.2. N(Native) code, P(Pseudo) code
    8.2.3. Event Handler
    8.2.4. undocumented 구조체
    8.3. Start debugging
    8.3.1. 간접호출
    8.3.2. RT_MainStruct 구조체
    8.3.3. ThunRTMain( ) 함수
    8.4. crackme 분석
    8.4.1. 문자열 검색
    8.4.2. 문자열 주소 찾기
    8.4.3. Serial 생성 알고리즘
    8.4.4. 코드 예측하기
    8.4.5. Name 문자열 읽는 코드
    8.4.6. 암호화 루프
    8.4.7. 암호화 방법
    8.5. 마무리

    9장 Process Explorer - 최고의 작업 관리자
    9.1. Process Explorer
    9.2. 구체적으로 뭐가 좋은 거죠?
    9.3. sysinternals

    10장 Calling Convention
    10.1. Calling Convention
    10.1.1. cdecl
    10.1.2. stdcall
    10.1.3. fastcall

    11장 Lena’s Reversing for Newbies
    11.1. 실행
    11.2. 분석
    11.2.1. 목표(1) - 메시지 박스 제거!
    11.2.2. 패치(1) - 메시지 박스 제거
    11.2.3. 목표(2) - Registration Code 찾기
    11.3. 마무리

    12장 도대체 리버싱을 어떻게 공부해야 하나요?
    12.1. Reverse Engineering(RE)
    12.1.1. 모든 공부에는 ‘목표’가 있어야 합니다.
    12.1.2. ‘긍정적인 마인드’를 가지세요.
    12.1.3. ‘재미’를 느껴야 합니다.
    12.1.4. ‘검색’을 생활화해야 합니다.
    12.1.5. 제일 중요한 건 ‘실천’입니다.
    12.1.6. ‘느긋한 마음’을 가지세요.

    2부 PE File Format

    13장 PE File Format
    13.1. Introduction
    13.2. PE File Format
    13.2.1. 기본 구조
    13.2.2. VA & RVA
    13.3. PE 헤더
    13.3.1. DOS Header
    13.3.2. DOS Stub
    13.3.3. NT Header
    13.3.4. IMAGE_NT_HEADERS - IMAGE_FILE_HEADER
    13.3.5. IMAGE_NT_HEADERS - IMAGE_OPTIONAL_HEADER32
    13.3.6.
    13.4. RVA to RAW
    13.5. IAT
    13.5.1. DLL
    13.5.2. IMAGE_IMPORT_DESCRIPTOR
    13.5.3. notepad.exe를 이용한 실습
    13.6. EAT
    13.6.1. IMAGE_EXPORT_DIRECTORY
    13.6.2. kernel32.dll을 이용한 실습
    13.7. Advanced PE(Portable Executable)
    13.7.1. PEView.exe
    13.7.2. Patched PE
    13.8. 마무리

    14장 실행 압축
    14.1. 데이터 압축
    14.1.1. 비손실 압축
    14.1.2. 손실 압축
    14.2. 실행 압축
    14.2.1. 패커
    14.2.2. 프로텍터
    14.3. 실행 압축 테스트
    14.3.1. notepad.exe와 notepad_upx.exe 파일 비교

    15장 UPX 실행 압축된 notepad 디버깅
    15.1. notepad.exe의 EP Code
    15.2. notepad_upx.exe의 EP Code
    15.3. UPX 파일 트레이싱
    15.3.1. OllyDbg의 트레이스 명령어
    15.3.2. 루프 #1
    15.3.3. 루프 #2
    15.3.4. 루프 #3
    15.3.5. 루프 #4
    15.4. UPX의 OEP를 빨리 찾는 방법
    15.4.1. POPAD 명령어 이후의 JMP 명령어에 BP 설치
    15.4.2. 스택에 하드웨어 브레이크 포인트(Hardware Break Point) 설치
    15.5. 마무리

    16장 Base Relocation Table
    16.1. PE 재배치
    16.1.1. DLL/SYS
    16.1.2. EXE
    16.2. PE 재배치 발생시 수행되는 작업
    16.3. PE 재배치 동작 원리
    16.3.1. Base Relocation Table
    16.3.2. IMAGE_BASE_RELOCATION 구조체
    16.3.3. Base Relocation Table의 해석 방법
    16.3.4. 실습

    17장 실행 파일에서 .reloc 섹션 제거하기
    17.1. .reloc 섹션
    17.2. reloc.exe
    17.2.1. .reloc Section Header 정리
    17.2.2. .reloc 섹션 제거
    17.2.3. IMAGE_FILE_HEADER 수정
    17.2.4. IMAGE_OPTIONAL_HEADER 수정
    17.3. 마무리

    18장 UPack PE 헤더 상세 분석
    18.1. UPack 설명
    18.2. UPack으로 notepad.exe 실행 압축하기
    18.3. Stud_PE 이용
    18.4. PE 헤더 비교
    18.4.1. notepad.exe(원본)의 PE 헤더
    18.4.2. notepad_upack.exe(실행 압축)의 PE 헤더
    18.5. UPack의 PE 헤더 분석
    18.5.1. 헤더 겹쳐쓰기
    18.5.2. IMAGE_FILE_HEADER.SizeOfOptionalHeader
    18.5.3. IMAGE_OPTIONAL_HEADER.NumberOfRvaAndSizes
    18.5.4. IMAGE_SECTION_HEADER
    18.5.5. 섹션 겹쳐쓰기
    18.5.6. RVA to RAW
    18.5.7. Import Table(IMAGE_IMPORT_DESCRIPTOR array)
    18.5.8. IAT(Import Address Table)
    18.6. 마무리

    19장 UPack 디버깅 - OEP 찾기
    19.1. OllyDbg 실행 에러
    19.2. 디코딩 루프
    19.3. IAT 셋팅
    19.4. 마무리

    20장 인라인 패치 실습
    20.1. 인라인 패치
    20.2. 실습 - Patchme
    20.3. 디버깅 - 코드 흐름 살펴보기
    20.4. 코드 구조
    20.5. 인라인 패치 실습
    20.5.1. 패치 코드를 어디에 설치할까?
    20.5.2. 패치 코드 만들기
    20.5.3. 패치 코드 실행하기
    20.5.4. 결과 확인

    3부 DLL Injection

    21장 Windows 메시지 후킹
    21.1. 훅
    21.2. 메시지 훅
    21.3. SetWindowsHookEx ( )
    21.4. 키보드 메시지 후킹 실습
    21.4.1. 실습 예제 HookMain.exe
    21.4.2. 소스코드 분석
    21.5. 디버깅 실습
    21.5.1. HookMain.exe 디버깅
    21.5.2. Notepad.exe 프로세스내의 KeyHook.dll 디버깅
    21.6. 마무리

    22장 악의적인 목적으로 사용되는 키로거
    22.1. 악성 키로거의 목표
    22.1.1. 온라인 게임
    22.1.2. 인터넷 뱅킹
    22.1.3. 기업 정보 유출
    22.2. 키로거의 종류와 향후 발전 방향
    22.3. 키로거에 대처하는 우리의 자세
    22.4. 개인정보

    23장 DLL Injection
    23.1. DLL 인젝션
    23.2. DLL 인젝션 활용 예
    23.2.1. 기능 개선 및 버그 패치
    23.2.2. 메시지 후킹
    23.2.3. API 후킹
    23.2.4. 기타 응용 프로그램
    23.2.5. 악성 코드
    23.3. DLL 인젝션 구현 방법
    23.4. CreateRemoteThread ( )
    23.4.1. 실습 예제 myhack.dll
    23.4.2. 예제 소스코드 분석
    23.4.3. 디버깅 방법
    23.5. AppInit_DLLs
    23.5.1. 예제 소스코드 분석
    23.5.2. 실습 예제 myhack2.dll
    23.6. SetWindowsHookEx ( )
    23.7. 마무리

    24장 DLL Ejection
    24.1. DLL 이젝션 동작 원리
    24.2. DLL 이젝션 구현
    24.2.1. 프로세스에 로딩된 DLL 정보 구하기
    24.2.2. 대상 프로세스 핸들 구하기
    24.2.3. FreeLibrary( ) API 주소 구하기
    24.2.4. 대상 프로세스에 스레드를 실행시킴
    24.3. DLL 이젝션 간단 실습
    24.3.1. 파일 복사 및 notepad.exe 실행
    24.3.2. 인젝션
    24.3.3. 이젝션

    25장 PE Patch를 이용한 DLL 로딩
    25.1. 실습 파일
    25.1.1. TextView.exe
    25.1.2. TextView_patched.exe
    25.2. 소스코드 - myhack3.cpp
    25.2.1. DllMain( )
    25.2.2. DownloadURL( )
    25.2.3. DropFile( )
    25.2.4. dummy( )
    25.3. TextView.exe 파일 패치 준비 작업
    25.3.1. 패치 아이디어
    25.3.2. 패치 사전 조사
    25.3.3. IDT 이동
    25.4. TextView.exe 패치 작업
    25.4.1. IMPORT Table의 RVA 값 변경
    25.4.2. BOUND IMPORT TABLE 제거
    25.4.3. 새로운 IDT 생성
    25.4.4. Name, INT, IAT 셋팅
    25.4.5. IAT 섹션의 Characteristics 변경
    25.5. 검증 (Test)
    25.6. 마무리

    26장 PE Tools
    26.1. PE Tools
    26.1.1. 프로세스 메모리 덤프
    26.1.2. PE Editor
    26.2. 마무리
    쉬어가기 - 리버싱의 참맛

    27장 Code Injection
    27.1. Code 인젝션
    27.2. DLL 인젝션 vs Code 인젝션
    27.2.1. 코드 인젝션을 사용하는 이유
    27.3. 실습 예제
    27.3.1. notepad.exe 실행
    27.3.2. CodeInjection.exe 실행
    27.3.3. 메시지 박스 확인
    27.4. CodeInjection.cpp
    27.4.1. main( )
    27.4.2. ThreadProc( )
    27.4.3. InjectCode( )
    27.5. Code 인젝션 디버깅 실습
    27.5.1. notepad.exe 디버깅
    27.5.2. OllyDbg 옵션 변경
    27.5.3. CodeInjection.exe 실행
    27.5.4. 스레드 시작 코드
    27.6. 마무리

    28장 어셈블리 언어를 이용한 Code Injection
    28.1. 목표
    28.2. 어셈블리 프로그래밍
    28.3. OllyDbg의 Assemble 명령
    28.3.1. ThreadProc( ) 작성
    28.3.2. Save File
    28.4. 인젝터 제작
    28.4.1. ThreadProc( ) 함수의 바이너리 코드 얻기
    28.4.2. CodeInjection2.cpp
    28.5. 디버깅 실습
    28.5.1. notepad.exe 디버깅
    28.5.2. OllyDbg 옵션 변경
    28.5.3. CodeInjection2.exe 실행
    28.5.4. 스레드 시작 코드
    28.6. 상세 분석
    28.6.1. 스택 프레임
    28.6.2. THREAD_PARAM 구조체 포인터
    28.6.3. “user32.dll” 문자열
    28.6.4. “user32.dll” 문자열 파라미터 입력
    28.6.5. LoadLibraryA(“user32.dll”) 호출
    28.6.6. “MessageBoxA” 문자열
    28.6.7. GetProcAddress(hMod, “MessageBoxA”) 호출
    28.6.8. MessageBoxA( ) 파라미터 입력 1 - MB_OK
    28.6.9. MessageBoxA( ) 파라미터 입력 2 - “ReverseCore”
    28.6.10. MessageBoxA( ) 파라미터 입력 3 - “www.reversecore.com”
    28.6.11. MessageBoxA( ) 파라미터 입력 4 - NULL
    28.6.12. MessageBoxA 호출
    28.6.13. ThreadProc( ) 리턴 값 셋팅
    28.6.14. 스택 프레임 해제 및 함수 리턴
    28.7. 마무리

    4부 API Hooking

    29장 API Hooking: 리버싱의 ‘꽃’
    29.1. 후킹
    29.2. API
    29.3. API 후킹
    29.3.1. 정상 API 호출
    29.3.2. 후킹 API 호출
    29.4. 테크 맵
    29.4.1. Method Object(what)
    29.4.2. Location(where)
    29.4.3. Technique(How)
    29.5. API

    30장 메모장 WriteFile ( ) 후킹
    30.1. 테크 맵 - 디버그 테크닉
    30.2. 디버거 설명
    30.2.1. 용어
    30.2.2. 디버거 기능
    30.2.3. 디버거 동작 원리
    30.2.4. 디버그 이벤트
    30.3. 작업 순서
    30.4. 실습
    30.5. 동작 원리
    30.5.1. 스택
    30.5.2. 실행 흐름
    30.5.3. 언훅 & 훅
    30.6. 소스코드 설명
    30.6.1. main( )
    30.6.2. DebugLoop( )
    30.6.3. EXIT_PROCESS_DEBUG_EVENT
    30.6.4. CREATE_PROCESS_DEBUG_EVENT - OnCreateProcessDebug Event( )
    30.6.5. EXCEPTION_DEBUG_EVENT - OnExceptionDebugEvent( )

    31장 디버거 이야기
    31.1. OllyDbg
    31.2. IDA Pro
    31.3. WinDbg

    32장 계산기, 한글을 배우다
    32.1. 테크 맵
    32.2. 대상 API 선정
    32.3. IAT 후킹 동작 원리
    32.4. 실습
    32.5. 소스코드 분석
    32.5.1. DllMain( )
    32.5.2. MySetWindowTextW( )
    32.5.3. hook_iat ( )
    32.6. 인젝션된 DLL의 디버깅
    32.6.1. DllMain( )
    32.6.2. hook_iat ( )
    32.6.3. MySetWindowTextW( )
    32.7. 마무리

    33장 ‘스텔스’ 프로세스
    33.1. 테크 맵
    33.2. API 코드 패치 동작 원리
    33.2.1. 후킹 전
    33.2.2. 후킹 후
    33.3. 프로세스 은폐
    33.3.1. 프로세스 은폐 동작 원리
    33.3.2. 관련 API
    33.3.3. 은폐 기법의 문제점
    33.4. 실습 #1 (HideProc.exe, stealth.dll)
    33.4.1. notepad.exe, procexp.exe, taskmgr.exe 실행
    33.4.2. HideProc.exe 실행
    33.4.3. stealth.dll 인젝션 확인
    33.4.4. notepad.exe 프로세스 은폐 확인
    33.4.5. notepad.exe 프로세스 은폐 해제
    33.5. 소스코드 분석
    33.5.1. HookProc.cpp
    33.5.2. stealth.cpp
    33.6. 글로벌 API 후킹
    33.6.1. Kernel32.CreateProcess ( ) API
    33.6.2. Ntdll.ZwResumeThread ( ) API
    33.7. 실습 #2(HideProc2.exe, stealth2.dll)
    33.7.1. stealth2.dll 파일을 %SYSTEM% 폴더에 복사
    33.7.2. HideProc2.exe -hide 실행
    33.7.3. ProcExp.exe & notepad.exe 실행
    33.7.4. HideProc2.exe -show 실행
    33.8. 소스코드 분석
    33.8.1. HideProc2.cpp
    33.8.2. stealth2.cpp
    33.9. 핫 패치 방식의 API 후킹
    33.9.1. 기존 API 코드 패치 방법의 문제점
    33.9.2. 핫 패치 (7바이트 코드 패치)
    33.10. 실습 #3 - stealth3.dll
    33.11. 소스코드 분석
    33.11.1. Stealth3.cpp
    33.12. 핫 패치 방식의 API 후킹에서 고려사항
    33.12. 마무리

    34.1. 후킹 대상 API
    34.1.1. 검증 ? IE 프로세스 디버깅
    34.2. IE 프로세스 구조
    34.3. 글로벌 API 후킹 개념 정리
    34.3.1. 일반적인 API 후킹
    34.3.2. 글로벌 API 후킹
    34.4. ntdll!ZwResumeThread ( ) API
    34.5. 실습 예제 ? IE 접속 제어
    34.5.1. IE 실행
    34.5.2. DLL 인젝션
    34.5.3. 새로운 탭 생성
    34.5.4. 포털 사이트 접속
    34.5.5. DLL 이젝션
    34.5.6. 추가 실습
    34.6. 예제 소스코드
    34.6.1. DllMain( )
    34.6.2. NewInternetConnectW( )
    34.6.3. NewZwResumeThread( )
    34.7. 마무리

    35장 좋은 분석 도구를 선택하는 5가지 기준
    35.1. 도구
    35.2. Reverse Code Engineer
    35.3. 좋은 분석 도구 선택의 5가지 기준
    35.3.1. 도구 개수를 최소화한다.
    35.3.2. 도구는 기능이 단순하고 사용방법이 편리한 것이 좋다.
    35.3.3. 기능을 철저히 익힌다.
    35.3.4. 꾸준히 업데이트한다.
    35.3.5. 도구의 핵심 동작 원리를 이해한다.
    35.4. 숙련도의 중요성

    5부 64비트 & Windows Kernel 6

    36장 64bit Computing
    36.1. 64비트 컴퓨팅 환경
    36.1.1. 64비트 CPU
    36.1.2. 64비트 OS
    36.1.3. Win32 API
    36.1.4. WOW64
    36.1.5. 실습 - WOW64Test
    36.2. 64비트 빌드
    36.2.1. Microsoft Windows SDK(Software Development Kit)
    36.2.2. Visual C++ 2010 Express 환경 설정

    37장 x64 프로세서 이야기
    37.1. x64에서 추가/변경된 사항
    37.1.1. 64비트
    37.1.2. 메모리
    37.1.3. 범용 레지스터 in x64
    37.1.4. CALL/JMP Instruction
    37.1.5. 함수 호출 규약
    37.1.6. 스택 & 스택 프레임
    37.2. 실습 - Stack64.exe & Stack32.exe
    37.2.1. Stack32.exe
    37.2.2. Stack64.exe
    37.2. 마무리

    38장 PE32+
    38.1. PE32+ (PE+, PE64)
    38.1.1. IMAGE_NT_HEADERS
    38.1.2. IMAGE_FILE_HEADER
    38.1.3. IMAGE_OPTIONAL_HEADER
    38.1.4. IMAGE_THUNK_DATA
    38.1.5. IMAGE_TLS_DIRECTORY64

    39장 WinDbg
    39.1. WinDbg
    39.1.1. WinDbg 특징
    39.1.2. WinDbg 실행
    39.1.3. 커널 디버깅
    39.1.4. WinDbg 기본 명령어

    40장 64bit Debugging
    40.1. x64 환경에서의 디버거 선택 627
    40.2. 64비트 디버깅 628
    40.2.1. 실습 예제 ? WOW64Test
    40.3. PE32 : WOW64Test_x86.exe
    40.3.1. EP 코드
    40.3.2. Startup 코드
    40.3.3. main( ) 함수
    40.4. PE32+ : WOW64Test_x64.exe
    40.4.1. System Breakpoint
    40.4.2. EP 코드
    40.4.3. Startup 코드
    40.4.4. main( ) 함수
    40.5. 마무리

    41장 ASLR
    41.1. Windows Kernel Version
    41.2. ASLR
    41.3. Visual C++
    41.4. ASLR.exe
    41.4.1. 섹션 정보
    41.4.2. IMAGE_FILE_HEADER \ Characteristics
    41.4.3. IMAGE_OPTIONAL_HEADER \ DLL Characteristics
    41.5. 실습 - ASLR 기능 제거
    41.5.1. ASLR 기능 제거

    42장 Session in Kernel 6
    42.1. 세션
    42.2. Session 0 Isolation
    42.3. 보안 강화

    43장 DLL Injection in Kernel 6
    43.1. DLL 인젝션 실패 재현
    43.1.1. 소스코드
    43.1.2. 인젝션 테스트
    43.2. 원인 분석
    43.2.1. 디버깅 #1
    43.2.2. 디버깅 #2
    43.3. 실습 - CreateRemoteThread ( ) 성공시키는 방법
    43.3.1. 방법 #1 - CreateSuspended 파라미터 변경
    43.3.2. 방법 #2 - 조건 분기 조작
    43.4. 간단 정리
    43.5. InjectDll_new.exe
    43.5.1. InjectDll_new.cpp
    43.5.2. 인젝션 실습

    44장 InjDll.exe - DLL Injection 전용 도구
    44.1. InjDll.exe
    44.1.1. 사용방법
    44.1.2. 사용 예
    44.1.3. 주의사항

    6부 고급 리버싱

    45장 TLS Callback Function
    45.1. 실습 #1 - HelloTls.exe
    45.2. TLS
    45.2.1. IMAGE_DATA_DIRECTORY[9]
    45.2.2. IMAGE_TLS_DIRECTORY
    45.2.3. 콜백 함수 주소 배열
    45.3. TLS 콜백 함수
    45.3.1. IMAGE_TLS_CALLBACK
    45.4. 실습 #2 - TlsTest.exe
    45.4.1. DLL_PROCESS_ATTACH
    45.4.2. DLL_THREAD_ATTACH
    45.4.3. DLL_THREAD_DETACH
    45.4.4. DLL_PROCESS_DETACH
    45.5. TLS 콜백 디버깅
    45.6. 수작업으로 TLS 콜백 함수 추가하기
    45.6.1. 실습 재료
    45.6.2. 설계
    45.6.3. PE 헤더 편집
    45.6.4. IMAGE_TLS_DIRECTORY 구성
    45.6.5. TLS 콜백 함수 프로그래밍
    45.6.6. 최종 완성
    45.7. 마무리

    46장 TEB
    46.1. TEB
    46.1.1. TEB 구조체 정의
    46.1.2. TEB 구조체 내용
    46.1.3. 중요 멤버
    46.2. TEB 접근 방법
    46.2.1. Ntdll.NtCurrentTeb ( )
    46.2.2. FS 세그먼트 레지스터
    46.3. 마무리

    47장 PEB
    47.1. PEB
    47.1.1. PEB 접근 방법
    47.1.2. PEB 구조체 정의
    47.1.3. PEB 구조체 내용
    47.2. PEB 중요 멤버 설명
    47.2.1. PEB.BeingDebugged
    47.2.2. PEB.ImageBaseAddress
    47.2.3. PEB.Ldr
    47.2.4. PEB.ProcessHeap & PEB.NtGlobalFlag
    47.3. 마무리

    48장 SEH
    48.1. SEH
    48.1.1. 기본 설명
    48.2. SEH 예제 실습 #1
    48.2.1. 일반 실행
    48.2.2. 디버거에서 실행
    48.3. OS의 예외 처리 방법
    48.3.1. 일반 실행의 경우 예외 처리 방법
    48.3.2. 디버깅 실행의 경우 예외 처리 방법
    48.4. 예외
    48.4.1. EXCEPTION_ACCESS_VIOLATION(C0000005)
    48.4.2. EXCEPTION_BREAKPOINT(80000003)
    48.4.3. EXCEPTION_ILLEGAL_INSTRUCTION(C000001D)
    48.4.4. EXCEPTION_INT_DIVIDE_BY_ZERO(C0000094)
    48.4.5. EXCEPTION_SINGLE_STEP(80000004)
    48.5. SEH 상세 설명
    48.5.1. SEH Chain
    48.5.2. 함수 정의
    48.5.3. TEB.NtTib.ExceptionList
    48.5.4. SEH 설치 방법
    48.6. SEH 예제 실습 #2 (seh.exe)
    48.6.1. SEH 체인 확인
    48.6.2. SEH 추가
    48.6.3. 예외 발생
    48.6.4. 예외 처리기 파라미터 확인
    48.6.5. 예외 처리기 디버깅
    48.6.6. SEH 제거
    48.7. OllyDbg 옵션 설정
    48.7.1. KERNEL32 예외 무시
    48.7.2. 예외를 디버기에게 전달
    48.7.3. 기타 예외 처리
    48.7.4. 간단 실습
    48.8. 마무리

    49장 IA-32 Instruction
    49.1. IA-32 Instruction
    49.2. 용어 정리
    49.2.1. Disassembler
    49.2.2. Decompiler
    49.2.3. Decompile 간단 소개
    49.3. IA-32 Instruction Format
    49.3.1. Instruction Prefixes
    49.3.2. Opcode
    49.3.3. ModR/M
    49.3.4. SIB
    49.3.5. Displacement
    49.3.6. Immediate
    49.4. Instruction 해석 매뉴얼
    49.4.1. IA-32 Manuals 다운로드
    49.4.2. Instruction 해석 메뉴얼 출력
    49.5. Instruction 해석 실습
    49.5.1. Opcode Map
    49.5.2. Operand
    49.5.3. ModR/M
    49.5.4. Group
    49.5.5. Prefix
    49.5.6. 2바이트 Opcode
    49.5.7. Displacement & Immediate
    49.5.8. SIB
    49.6. Instruction 해석 추가 연습
    49.7. 마무리

    7부 Anti-Debugging

    50장 Anti-Debugging
    50.1. 안티 디버깅 기법
    50.1.1. 의존성
    50.1.2. 다양한 기법
    50.2. 안티 안티 디버깅 기법
    50.3. 안티 디버깅 분류
    50.3.1. Static Anti-Debugging
    50.3.2. Dynamic Anti-Debugging

    51장 Static Anti-Debugging
    51.1. Static Anti-Debugging의 목적
    51.2. PEB
    51.2.1. BeingDebugged(+0x2)
    51.2.2. Ldr (+0xC)
    51.2.3. Process Heap(+0x18)
    51.2.4. NtGlobalFlag(+0x68)
    51.2.5. 실습 - StaAD_PEB.exe
    51.2.6. 회피 방법
    51.3. NtQueryInformationProcess ( )
    51.3.1. ProcessDebugPort(0x7)
    51.3.2. ProcessDebugObjectHandle(0x1E)
    51.3.3. ProcessDebugFlags(0x1F)
    51.3.4. 실습 - StaAD_NtQIP.exe
    51.3.5. 회피 방법
    51.4. NtQuerySystemInformation ( )
    51.4.1. SystemKernelDebuggerInformation(0x23)
    51.4.2. 실습 - StaAD_NtQSI.exe
    51.4.3. 회피 방법
    51.5. NtQueryObject ( )
    51.5.1. 실습 - StaAD_NtQO.exe
    51.6. ZwSetInformationThread ( )
    51.6.1. 실습 - StaAD_ZwSIT.exe
    51.6.2. 회피 방법
    51.7. TLS Callback Function
    51.8. ETC
    51.8.1. 실습 - StaAD_FindWindow.exe
    51.8.2. 회피 방법
    51.9. 마무리

    52장 Dynamic Anti-Debugging
    52.1. Dynamic Anti-Debugging 코드의 목적
    52.2. Exceptions
    52.2.1. SEH
    52.2.2. SetUnhandledExceptionFilter( )
    52.3. Timing Check
    52.3.1. 시간 간격 측정 방법
    52.3.2. RDTSC
    52.4. Trap Flag
    52.4.1. Single Step
    52.4.2. INT 2D
    52.5. 0xCC Detection
    52.5.1. API Break Point
    52.5.2. Checksum 비교
    52.6. 마무리

    53장 Advanced Anti-Debugging
    53.1. 고급 안티 디버깅 기법
    53.2. 가비지 코드
    53.3. Breaking Code Alignment
    53.4. Encryption/Decryption
    53.4.1. 간단한 디코딩 코드의 경우
    53.4.2. 복잡한 디코딩 코드의 경우
    53.4.3. 특수한 경우 - 코드 재조합
    53.5. Stolen Bytes(Remove OEP)
    53.6. API Redirection
    53.6.1. 원본 코드
    53.6.2. API Redirection 예제 #1
    53.6.3. API Redirection 예제 #2
    53.7. Debug Blocker(Self Debugging)
    53.8. 마무리

    8부 디버깅 실습

    54장 디버깅 실습1 - 서비스
    54.1. 서비스 프로세스 동작 원리
    54.1.1. 서비스 제어기
    54.1.2. 서비스 시작과정의 이해
    54.2. DebugMe1.exe 예제 설명
    54.2.1. 서비스 설치
    54.2.2. 서비스 시작
    54.2.3. 소스코드
    54.3. Service 프로세스의 디버깅 이슈
    54.3.1. 문제는 SCM
    54.3.2. 디버거로 안 되는 것은 없다
    54.3.3. 정석대로 해보자
    54.4. 서비스 디버깅 실습
    54.4.1. 그냥 디버깅 - EIP 강제 셋팅
    54.4.2. 서비스 디버깅의 정석 - Attach 방식
    54.5. 마무리

    55장 디버깅 실습2 - Self Creation
    55.1. Self-Creation
    55.2. 동작 원리
    55.2.1. Create Child Process(SUSPEND mode)
    55.2.2. Change EIP
    55.2.3. Resume Main Thread
    55.3. 예제 소스코드 설명
    55.4. 디버깅 실습
    55.4.1. 고려 사항
    55.4.2. JIT(Just-In-Time) Debugging
    55.4.3. DebugMe2.exe
    55.5. 마무리

    56장 디버깅 실습3 - PE Image Switching
    56.1. PE Image
    56.2. PE Image Switching
    56.3. 예제 파일 - Fake.exe, Real.exe, DebugMe3.exe
    56.4. 디버깅 1
    56.4.1. Open - 실행 파라미터 입력
    56.4.2. main( )
    56.4.3. SubFunc_1 ( )
    56.4.4. CreateProcess(“fake.exe”, CREATE_SUSPENDED)
    56.4.5. SubFunc_2 ( )
    56.4.6. SubFunc_3 ( )
    56.5. 디버깅 2
    56.5.1. 아이디어
    56.5.2. EP에 무한루프 설치하기
    56.6. 마무리

    57장 디버깅 실습4 - Debug Blocker
    57.1. Debug Blocker
    57.2. 안티 디버깅 특성
    57.2.1. 부모 - 자식 관계
    57.2.2. 디버기 프로세스는 다른 디버거(예: OllyDbg)에서 디버깅을 할 수 없습니다.
    57.2.3. 디버거 프로세스를 종료하면 동시에 디버기 프로세스도 종료됩니다.
    57.2.4. 디버거에서 디버기의 코드를 조작합니다.
    57.2.5. 디버기의 예외(Exception)를 디버거에서 처리합니다.
    57.2. 디버깅 실습 - DebugMe4.exe
    57.3. 1차 시도
    57.3.1. 디버깅 시작 위치 선정
    57.3.2. main( )
    57.4. 2차 시도
    57.5. 3차 시도
    57.6. 4차 시도
    57.7. 5차 시도
    57.7.1. System Break Point
    57.7.2. EXCEPTION_ILLEGAL_INSTRUCTION (1)
    57.7.3. EXCEPTION_ILLEGAL_INSTRUCTION (2)
    57.8. 6차 시도
    57.8.1. 40121D (첫 번째 예외)
    57.8.2. 401299 (두 번째 예외)
    57.9. 7차 시도
    57.9.1. Static 방법
    57.9.2. Dynamic 방법
    57.10. 마무리

    책을 마치며
    1. 창의성과 경험(바둑과 장기 - 프로그래밍과 리버싱)
    바둑과 장기
    프로그래밍과 리버싱
    2. 독자님들께

    저자소개

    생년월일 -
    출생지 -
    출간도서 0종
    판매수 0권

    저 [리버싱 핵심 원리]

    이 책과 내용이 비슷한 책 ? 내용 유사도란? 이 도서가 가진 내용을 분석하여 기준 도서와 얼마나 많이 유사한 콘텐츠를 많이 가지고 있는가에 대한 비율입니다.

      리뷰

      10.0 (총 0건)

      구매 후 리뷰 작성 시, 북피니언 지수 최대 600점

      리뷰쓰기

      기대평

      작성시 유의사항

      평점
      0/200자
      등록하기

      기대평

      9.8

      교환/환불

      교환/환불 방법

      ‘마이페이지 > 취소/반품/교환/환불’ 에서 신청함, 1:1 문의 게시판 또는 고객센터(1577-2555) 이용 가능

      교환/환불 가능 기간

      고객변심은 출고완료 다음날부터 14일 까지만 교환/환불이 가능함

      교환/환불 비용

      고객변심 또는 구매착오의 경우에만 2,500원 택배비를 고객님이 부담함

      교환/환불 불가사유

      반품접수 없이 반송하거나, 우편으로 보낼 경우 상품 확인이 어려워 환불이 불가할 수 있음
      배송된 상품의 분실, 상품포장이 훼손된 경우, 비닐랩핑된 상품의 비닐 개봉시 교환/반품이 불가능함

      소비자 피해보상

      소비자 피해보상의 분쟁처리 등에 관한 사항은 소비자분쟁해결기준(공정거래위원회 고시)에 따라 비해 보상 받을 수 있음
      교환/반품/보증조건 및 품질보증 기준은 소비자기본법에 따른 소비자 분쟁 해결 기준에 따라 피해를 보상 받을 수 있음

      기타

      도매상 및 제작사 사정에 따라 품절/절판 등의 사유로 주문이 취소될 수 있음(이 경우 인터파크도서에서 고객님께 별도로 연락하여 고지함)

      배송안내

      • 인터파크 도서 상품은 택배로 배송되며, 출고완료 1~2일내 상품을 받아 보실 수 있습니다

      • 출고가능 시간이 서로 다른 상품을 함께 주문할 경우 출고가능 시간이 가장 긴 상품을 기준으로 배송됩니다.

      • 군부대, 교도소 등 특정기관은 우체국 택배만 배송가능하여, 인터파크 외 타업체 배송상품인 경우 발송되지 않을 수 있습니다.

      • 배송비

      도서(중고도서 포함) 구매

      2,000원 (1만원이상 구매 시 무료배송)

      음반/DVD/잡지/만화 구매

      2,000원 (2만원이상 구매 시 무료배송)

      도서와 음반/DVD/잡지/만화/
      중고직배송상품을 함께 구매

      2,000원 (1만원이상 구매 시 무료배송)

      업체직접배송상품 구매

      업체별 상이한 배송비 적용