PE IMAGEDOSHEADER 64 byte DOS STUB CODE Size
PE파일의 전체구조 IMAGE_DOS_HEADER 64 byte DOS STUB CODE의 Size는 가변 PE Signature IMAGE_FILE_HEADER IMAGE_NT_HEADER 224 byte or 96 byte IMAGE_OPTIONAL_HEADER IMAGE_SECTION_HEADER Section당 40 byte SECTION 1 Ex). text SECTION … Ex). rdata
IMAGE_DOS_HEADER
IMAGE_NT_HEADERS ü IMAGE_OPTIONAL_HEADER § Magic : IMAGE_OPTIONAL_HEADER를 나타내는 시그너처로서 32 bit PE의 경우 0 x 010 b, 64 bit의 경우 0 x 020 b값을 가진다. § Address. Of. Entry. Point : 로더가 실행을 개시할(최초로 실행될 코드) 주소. 이 주소는 RVA로서 보통. text 섹션의 시작점이다. 디버거로 실행(calc. exe) Peview로 calc. exe open
IMAGE_NT_HEADERS § Image. Base : 해당 PE가 가상주소 공간에 로드될때의 그 시작주소. 기본적으로 EXE파일은 0 x 00400000, DLL파일은 0 x 10000000 Image. Base DOS HEADER PE Signature FILE_HEADER OPTIONAL_HEADER SECTION HEADER Section …. 파일상태 …. 메모리에 로드된 상태
IMAGE_NT_HEADERS § Section. Alignment : 메모리상에서 섹션의 각 섹션이 차지해야 하는 최소의 단위. 각 섹션은 Section. Alignment X n 의 주소에 서 시작해야 한다. 기본값으로 4 K(0 x 1000) § File. Alignment : PE파일 내에서의 섹션들의 정렬단위. Section. Alignment와 같은 개념. 보통 0 x 200 또는 0 x 100 File. Alignment 를 맞춰주기 위한 padding OPTIONAL_HEADER SECTION HEADER Section …. 파일상태 OPTIONAL_HEADER SECTION HEADER Section. Alignment 를 맞춰주기 위 한 padding Section …. 메모리에 로드된 상태
IMAGE_NT_HEADERS DOS HEADER PE Signature FILE_HEADER OPTIONAL_HEADER FILE_HEADER Size. Of. Headers OPTIONAL_HEADER SECTION HEADER Section …. 파일상태 메모리에 로드된 상태 Size. Of. Image
IMAGE_NT_HEADERS § IMAGE_DATA_DIRECTORY Virtual. Address IMAGE_DIRECTORY_ENTRY_EXPORT [00] EXPORT TABLE Size IMAGE_DIRECTORY_ENTRY_IMPORT [01] … 임포트 테이블의 메모리상에서 … 의 시작점과 크기에 대한 정보를 … 가지고 있다. IMAGE_DIRECTORY_ENTRY_TLS [09] IMAGE_DIRECTORY_ENTRY_IAT [12] … IMAGE_DIRECTORY_ENTRY_NULL [15] IMPORT TABLE ……… … Virtual. Address Size
Import_Section ü 임포트 섹션이 존재하지 않을수도 있으며, 다른 섹션에 포함되어 있을 수 있다. ü 임포트 섹션이 존재하지 않을 경우 IMAGE_DATA_DIRECTORY내의 IMAGE_DIRECTORY_ENTRY_IMPORT를 통하여 임포트 테이블의 위치를 알아낼수 있다. ü 임포트 테이블은 IMAGE_IMPORT_DESCRIPTOR라는 구조체의 배열로 구성 되며, 이 구조체는 임포트한 DLL의 정보를 담고 있다. Typedef struct _IMAGE_IMPORT_DESCRIPTOR{ union{ DWORD Characteristics; DWORD Original. First. Thunk; }; DWORD Time. Date. Stamp; DWORD Forwarder. Chain; DWORD Name; DWORD First. Thunk; } IMAGE_IMPORT_DESCRIPTOR;
Import_Section IMAGE_THUNK_DATA Original. First. Thunk Time. Date. Stamp Forwarder. Chain Name …. . <INT> IMAGE_IMPORT_BY_NAME …. . First. Thunk IMAGE_THUNK_DATA …. . 전 바인딩 후 …. . <IAT> 임포트된 DLL내의 실제 함수코드
Import_Section 임포트 테이블의 내용 Original. First. Thunk INT IAT 바인딩 후의 IAT 변경모습
IMAGE_SECTION_HEADER ü IMAGE_SECTION_HEADER는 40 byte로 구성되며 다음과 같이 정의된다. Typedef struct _IMAGE_SECTION_HEADER{ BYTE Name[8]; union{ DWORD Physical. Address; DWORD Virtual. Size; } Misc; DWORD Virtual. Address; DWORD Size. Of. Raw. Data; DWORD Pointer. To. Relocations; DWORD Pointer. To. Linenumbers; WORD Number. Of. Relocations; WORD Number. Of. Linenumbers; DWORD Characteristics; } IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
IMAGE_SECTION_HEADER … Name : . text Virtual. Address Size. Of. Raw. Data Pointer. To. Raw. Data Charcteristics … Pointer. To. Raw. Data가 지정한 곳에서 부 … 터 Size. Of. Raw. Data 만큼의 데이터를 읽 Name : . text 어들여 Virtual. Address가 가르키는 곳 Virtual. Address 에 맵핑한 후에Size. Of. Raw. Data Characteristics에 설정 Pointer. To. Raw. Data 된 속성 정보적용 Charcteristics … . text … … 파일상태 메모리에 로드된 상태
- Slides: 25