리버싱 핵심 원리 이승원 pdf 다운로드

리버싱 핵심 원리 이승원 pdf 다운로드를 무료로 제공합니다 악성 코드 분석가의 리버싱 이야기『리버싱 핵심 원리』. 프로그램의 내부를 깊이 들여다보고 조작할 수 있는 기법인 ‘리버싱’에 필요한 핵심 원리를 50여개 장을 통해 꼼꼼하게 설명한 책이다

관련 교재 pdf 모음

세상을 만드는 글자, 코딩 pdf 다운

책 소개

리버싱 기술의 단순한 소개에 그치지 않고, 각 기술의 핵심적인 원리를 깨닫게 하는 데 목표를 두고 있다. 무엇보다 저자 이승원이 안철수 연구소에서의 오랜 경험을 토대로 직접 작성한 다양한 코드는 물론 리버서라면 꼭 알아야 할 다양한 리버싱 기법을 상세하게 소개하여 리버서를 꿈꾸는 개발자는 물론 실무를 경험해본 모두에게 도움을 준다. 이를 통해 기본기를 튼튼하게 다지는 것은 물론, 시간이 흘러도 가치가 변하지 않는 기술의 진수를 얻을 수 있다. 리버싱이란 프로그램의 내부를 깊이 들여다보고 조작할 수 있는 기법이다. 이는 우리가 흔히 사용하는 상용 프로그램 등에도 가능하기 때문에 해킹의 방법으로 응용될 수 있다. 하지만 역시 리버싱은 일명 ‘리버서’라 불리는 악성 코드 분석가들의 특기이기도 하다. 무엇보다 리버싱 기법은 해커와 보안 전문가의 대결로만 이용되는 것은 아니다. 리버싱을 잘 활용하면 개발/테스트 단계에서 미처 발견하지 못한 버그나 취약점도 파악할 수 있고, 파일이나 메모리에 직접 접근하여 문제를 해결할 수 있다. 또한 전혀 새로운 기능을 추가해 프로그램의 기능을 향상시킬 수도 있어 매우 유용하다. 이 책은 이런 마법 같은 일들이 가능한 ‘리버싱’에 필요한 핵심 원리를 50여개 장을 통해 꼼꼼하게 설명한다. 무엇보다 저자가 오랫동안 안철수 연구소에서 경험을 토대로 직접 작성한 다양한 코드는 물론 리버서라면 꼭 알아야 할 다양한 리버싱 기법을 상세하게 소개하기 때문에 리버서를 꿈꾸는 개발자는 물론 실무를 경험해본 모두에게 도움을 준다. 무엇보다 이 책은 리버싱 기술과 그 동작 원리를 설명하는 데 집중한다. 즉 리버싱 기술의 단순한 소개에 그치지 않고, 각 기술의 핵심적인 원리를 깨닫게 하는 데 목표를 두고 있다. 이를 통해 기본기를 튼튼하게 다지는 것은 물론, 시간이 흘러도 가치가 변하지 않는 기술의 진수를 얻을 수 있다.

리버싱 핵심 원리 이승원 pdf 다운

리버싱 핵심 원리 이승원 pdf 다운

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. 마무리

Leave a Comment