PE Header - EAT (Export Address Table)이전 장에서, DLL에 대한 간략한 내용과, IAT(Import Address Table)및 IID(Image Import Directory)를 이용해,프로그램이 어떻게 dll(라이브러리)를 가져와 import 하여 그 기능을 사용하는지 살펴보았다. 그렇다면, 이번에는 이러한 기능을 제공해주는 dll과 같은 라이브러리(sys 파일과 같은 것도 해당된다)가 어떻게 다른 프로그램에함수 형태로 기능을 제공하는지 알아보자. IMAGE_IMPORT_DIRECTORY 가 프로그램이 어떠한 외부 라이브러리를 사용할 것인지에 대한 정보를 제공한다면,IMAGE_EXPORT_DIRECTORY 는 자신에게서 어떠한 함수를 제공받을 수 있는지를 선언해놓은 테..
PE Header - IAT(IMPORT ADDRESS TABLE) DLL?Dynamic Link Library 의 약자로, "동적 링크 라이브러리" 라고도 불리며, 마이크로소프트에 윈도우에서 구현된 여러 프로그램이 공통으로 필요로 하는 기능을 따로 분리하여, 필요할 때에만 불러내어 쓸 수 있게 만들어 놓은 라이브러리이다. 예를 들어, 크롬에서도 메세지박스를 띄울 수 있고, Windows 탐색기에서도 메시지박스를 띄울 수 있다. 이럴 경우, 각각의 프로그램에 모두 메시지박스를 띄우는 기능의 코드를 내장하는 것이 아니라, 윈도우에서 지원하는 기능(DLL)에서 가져다 씀으로써 각각의 파일들에 해당 기능들을 집어넣을 필요 없이, 원하는 DLL을 사용해 이 기능을 끌어다 쓴다고 선언해놓으면 된다. (이러한 기능..
NT_HEADER -> SECTION_HEADERSection 이란?PE파일(프로그램) 에는 다양한 것들이 들어간다. main 및 각종 프로그램의 동작을 정의하는 함수들의 코드들, 전역 변수로 설정된 데이터나 프로그램 안에 들어가 있는 문자열 (예: 포맷 스트링), 그리고 프로그램 안에 이미지를 같이 포함시켜 리소스 형태로 저장할 수 도 있다. PE에서는 이런 코드와 데이터들을 한꺼번에 모아놓지 않고, 각각 그 특성과 필요에 맞추어 각각의 데이터들을 "섹션" 으로 나누어 따로 따로 저장하며,이러한 섹션에는 Read/Write/Execute 이 세가지의 권한 옵션이 주어진다. IMAGE_SECTION_HEADERtypedef struct _IMAGE_SECTION_HEADER { BYTE Name[IMAG..
PE에서의 VA(Virtual Address), RVA(Relative Virtual Address), RAW(File Offset)PE(Windows)말고, Linux에서도 마찬가지이지만, 각각의 응용 프로그램들은 실행되고 나면 서로 공유되지 않은 메모리 주소를 사용할 수 있다. 0x00000000 ~ 0xFFFFFFFFF 의 공간을 각자의 프로그램들이 자신의 것처럼 사용할 수 있게 된다.다시 말해, 모든 프로세스는 자신만의 가상 주소 공간을 가지고 있고,32비트 프로세스는 최대 4GB(메모리 포인터 - 4바이트) / 64비트 프로세스는 최대 16EB(메모리 포인터 - 8바이트)의 메모리 공간을 가질 수 있다.이러한 기술을 "가상 메모리 기법" 이라고 하는데, 이는 나중에 따로 설명하고, 여기서는 VA..
NT_HEADER -> IMAGE_OPTIONAL_HEADER (x86)이 헤더의 경우 컴파일된 시스템의 아키텍쳐에 따라 구조체의 내용과 크기가 조금씩 달라지므로,가장 범용적인 x86 (32비트) 의 헤더에 대해서만 살펴본다. 이 구조체 역시 "winnt.h" 파일에 정의되어 있다.!! RVA / VA : 다음 포스트에 설명. - 여기서는 해당 데이터 섹션에 대한 설명만 기록한다. typedef struct _IMAGE_OPTIONAL_HEADER { // Standard fields. - Microsoft comment WORD Magic; BYTE MajorLinkerVersion; // file version BYTE MinorLinkerVersion; // file version DWORD Siz..
PE Header _ IMAGE_NT_HEADERSPE 포맷의 실행 파일의 핵심 정보를 담고 있는 구조체이며, PE파일 signiture와 다시 두 개의 구조체로 나뉘어진다.1개의 4바이트 데이터와 2개의 구조체를 담고 있으며, 총 248 바이트로 구성되어 있다. typedef struct _IMAGE_NT_HEADERS { DWORD Signature; // 0x50450000 ("PE"0x00 0x00) IMAGE_FILE_HEADER FileHeader; IMAGE_OPTIONAL_HEADER OptionalHeader; } IMAGE_NT_HEADERS32,*PIMAGE_NT_HEADERS32;1. signature_IMAGE_NT_HEADERS 의 시작(DOS 헤더의 e_lfanew offset..
PE(Portable Executeable)이란?Windows 운영 체제에서 사용되는 실행 파일, DLL(Dynamic Link Library), Object 코드, SYS 드라이버와 같은 파일을 위한 포맷이다. 우리가 흔히 접하는 exe 파일은 다음과 같이 PE File Format의 형태로 구성되어 있고, 크게 보면구조체 형태로 크기가 정해져 있는 실행 파일의 정보를 담고 있는 "PE Header"와,프로그램이 실행되었을 때 메모리로 옮겨져야할 코드들과 데이터들을 담고 있는 섹션인 "PE Body"로 이루어져 있다. PE Header먼저, PE 파일의 다양한 속성과 필수 정보를 담고 있는 PE Header부터 살펴본다. 앞에서 언급 했듯이, PE Header는 구조체 형태로 이루어져 있어 그 크기가 ..