본문 바로가기

Reversing

Chapter 8. PE Header III - IAT & EAT Chapter 8. PE Header III - IAT & EAT1. IAT(Import Address Table) - IAT · Windows의 Program이 어떤 Library에서 어떤 함수를 사용하고 있는지를 기술한 Table · PE File 내의 특정 구조체인 'IMAGE_IMPORT_DESCRIPTOR'에 Import에 관한 정보를 저장한다. · PE Header에서 Table은 배열을 의미한다. · 각 Section마다 존재한다. · IAT의 구조체 : IMAGE_IMPORT_DESCRIPTOR ◦ PE File은 자신이 어떤 library에게 함수를 제공(Import)받는지 IMAGE_IMPORT_DESCRIPTOR 구조체에 명시한다. ◦ IMAGE_IMPORT_DESCRIPTOR의 주요.. 더보기
Chapter 7. PE Header II - RVA to RAW Chapter 7. PE Header II - RVA to RAW1. RVA to RAW(Relative Virtual Address to RAW File Offset) - RVA to RAW · Section에서 Memory 주소(RVA)와 File의 Offset(RAW)을 Mapping하는 것 · PE Header를 이용해 Packing과 같은 작업을 진행할 때 내용을 수정 후 RVA와 같은 값이 바뀌면 Mapping을 시켜줘야 한다. · RVA to RAW를 하는 방법 ◦ RVA가 속한 Section 탐색 ◦ 'IMAGE_SECTION_HEADER' 구조체에 의한 비례식을 사용해 File Offset(RAW) 계산 ◦ 비례식 - RVA to RAW 비례식을 이용한 Mapping의 예 · '계산기' .. 더보기
Chapter 6. PE header I - PE Format Chapter 6. PE header I - PE Format 1. PE(Portable Executable) Format - Microsoft Windows에서 지원하는 실행파일의 유형 - 유닉스 COFF(Common Object File Format)를 기반으로 한다. - PE Format을 사용하는 File 확장자 · Execute File ◦ exe ◦ scr · Library File ◦ dll ◦ ocx ◦ cpl ◦ drv · Driver File ◦ sys ◦ vxd · Object File ◦ obj - PE Structure · PE 구조는 PE Header와 Body 부분으로 나뉜다. · 해당 실행 Program이 어떻게 Memory에 쌓이고, 관련 DLL File 등 해당 Progr.. 더보기
Chapter 5. Calling Convention Chapter 5. Calling Convention 1. Calling Convention(함수 호출 규약) - 함수를 호출할 때 Stack(Buffer)에 인자 값(Parameter)을 어떤 식으로 전달할 것인지에 대한 규약을 정의한 것 - 함수 호출 후에 ESP를 어떻게 정리하는지에 대한 규약 - Stack(Buffer)의 특징 · Process 내에서 Stack(Buffer)은 주소가 점점 줄어드는 방향으로 값이 채워진다. · 해당 Process의 PE Header에 Stack의 크기가 명시된다. · Stack(Buffer)에 채워지는 변수 값은 지역변수이며 malloc/new와 같은 함수를 이용해 동적 할당되는 변수와는 다르다. · Stack(Buffer)에 채워지는 변수는 해당 Process가.. 더보기
Chapter 4. Stack Chapter 4. Stack 1. Stack Memory - 지역변수와 매개변수가 할당 되는 공간으로 함수를 빠져나가면 소멸되는 변수를 저장하는 Memory 공간 - 임시저장장소 또는 Buffer라고도 하며 Program이 실행되는 Runtime에 Memory의 Stack Area에 생성된다. - Thread 단위로 Memory에 할당된다. - Stack(Buffer)의 위치는 Memory상에 Random으로 생성된다. - 시작위치는 대체로 비슷하거나 같은 위치에 생성되지만 해제된 Program을 재 시작해 Stack을 재할당한다고해서 같은 위치에서 생성되는 것을 보장할 순 없다. - PUSH 명령어를 Data를 입력하고 POP 명령어를 이용해 제거한다. - Algorithm의 Stack 구조와 같은 .. 더보기
Chapter 3. Memory & Assembly Language Chapter 3. Memory & Assembly Language 1. Memory - Program이 실행되는 동안 Data가 저장되는 공간 - 운영체제에 의해 할당되는 Memory 공간 ‧ Code Area : 실행할 Program의 Code가 저장되는 공간으로 CPU는 코드영역에 저장된 명령문을 하나씩 꺼내 실행한다. ‧ Data Area : 전역변수와 정적 변수가 할당되는 영역으로 Program 시작과 동시에 할당되어 종료 시까지 남아있는 특징의 변수가 저장되는 공간이다. ‧ Heap Area : Programer가 원하는 시점에 Memory 공간에 할당 및 소멸을 하기 위한 공간이다. ‧ Stack Area : 지역변수와 매개변수가 할당 되는 공간으로 함수를 빠져나가면 소멸되는 변수를 저장하는.. 더보기
Chapter 2. Register & Byte Ordering Chapter 2. Register & Byte Ordering 1. Register - CPU Register · CPU 내부에 존재하는 다목적 저장 공간을 말한다. · Intel CPU와 AMD CPU는 IA-32(Intel Architecture-32)구조를 따르며 Register 구성도 같다. · Register의 종류 ◦ 범용 Register(General Purpose Registers) ◦ Segment Registers ◦ Flag Register(EFLAGS) ◦ Instruction Pointer - Register · 범용 Register(General Purpose Registers) ◦ 다양한 용도로 사용되는 Register ◦ 32Bit로 구성되어 있으며 8개(각 4Byte) R.. 더보기
Chapter 1. About Reverse Engineering Chapter 1. About Reverse Engineering 1. Reverse Engineering - Reverse Engineering · Software 역 공학이라고 하며 Software, System 등의 구조, 기능, 동작 등을 분석하여 그 원리를 이해하며 단점을 보완하거나 새로운 아이디어를 추가하는 일련의 작업 · Software적으로는 RCE(Reverse Code Engineering) 또는 Reversing이라고도 한다. · Reversing에서는 Source Code 없이 Software File의 Binary 자체를 분석한다. - Reverse Engineering Method of Analysis · Reversing의 분석방법으로는 정적 분석, 동적 분석이 있다. · 정적.. 더보기