[Reversing] PE 파일 만들기 ① 제작 과정은 간략한 설명으로 건너뛰고 넘어가는 부분이 많습니다.이전 게시물을 참조 및 PE Format 참조 직접 제작해 보는 것을 추전을 받아 작성합니다.직접 제작하다 보면 자신이 잘 몰랐거나 잘 못 이해하던 부분을 정확히 파악하고 제대로 공부할 수 있다고 생각합니다.CLI 기반, printf문 사용, 'Hello World !' 출력을 목적으로 제작할 것입니다. 1. IMAGE_DOS_HEADER- MZ는 IMAGE_DOS_HEADER의 Signature입니다.(4D5A = ASCII 값 "MZ")- 해당 구조체의 크기는 40h으로(64byte) 고정이며, 여러개의 필드로 구성되어있습니다.- IMAGE_DOS_HEADER의 구조체 중 e_lfanew가 PE ..
[Reversing] 가능한 가장 작은 PE 실행 파일 만들기(Tiny PE) 가능한 가장 작은 PE 실행 파일 만들기(Tiny PE) ① 이전 IMAGE_DOS_Header와 MS-DOS_Stub 수정 후 크기는 변하지 않았습니다. 다음으로는 SECTION.data을 확인해보겠습니다. 그런데 PE구조를 다시 보니 리소스 부분을 먼저 삭제를 해야 될꺼같습니다. 1. SECTION.rsrc 삭제하기 peview를 통해 해당 SECTION.rsrc 영역을 확인 후 Hxd에서 리소스 부분을 삭제를 했습니다. 삭제 후 확인 해보면 SECTION.rsrc 영역이 삭제 된걸 확인 할 수 있습니다. 파일을 실행 하게 되면 실행이 되지 않습니다. 실행이 되도록 만들어야 되겠지요. 이제 리소스를 참조한 부분을 찾아 수정..
[Reversing] 가능한 가장 작은 PE 실행 파일 만들기(Tiny PE) 가능한 가장 작은 PE 실행 파일 만들기(Tiny PE)PE 파일의 전체 구조를 보며, 불필요한 부분을 삭제하고 변경을 통해 크기를 줄이는 목적으로 작성하겠습니다. 파일 최초 크기8,704 바이트 이며, 실행 시 Hello World가 출력됩니다. 파일 전체 구조 1. IMAGE_DOS_HEADER와 MS-DOS_Stub 1.1 IMAGE_DOS_HEADERIMAGE_DOS_Header의 구조체를 확인 했을 때 구조체 중 "e_magic" 필드와 "e_lfanew" 필드가 가장 중요하다고 합니다. e_magic : DOS Signature [4D5A → MZ]e_lfanew : NT Header offset [E0000000 ..
[Reversing] IMAGE_SECTION_HEADER 1. IMAGE_SECTION_HEADER IMAGE_SECTION_HEADER 입니다.IMAGE_SECTION_HEADER는 각각 섹션에 대한 정보가 저장되어 있습니다.typedef struct _IMAGE_SECTION_HEADER { BYTE Name[IMAGE_SIZEOF_SHORT_NAME]; union { DWORD PhysicalAddress; DWORD VirtualSize; } Misc; DWORD VirtualAddress; DWORD SizeOfRawData; DWORD PointerToRawData; DWORD PointerToRelocations; DWORD PointerToLinenumbers; WORD NumberOfR..
[Reversing] PE 포맷(Portable Executable) 참조 - Windows 시스템 실행파일의 구조와 원리 (이해한데로 정리해본다.) PE란?PE 파일은 위도우상에서 실행 가능한 포맷(Common Object File Format)으로 dll, exe, obj, sys 확장자 등이 있다. 또한, 크게 헤더와 섹션으로 나눌수 있으며, 헤더는 파일 실행에 있어 전반적인 정보를 가지고 있다. 섹션은 dll과 api 정보, 어셈블리 코드등 실제 내용을 담고 있다. IMAGE_FILE_HEADER는 PE 파일의 파일 정보를 나타내고 IMAGE_OPTIONAL_HEADER는 PE 파일이 메모리에 로드 될 때 필요한 모든 정보들을 담고 있다. 추가적으로 주요 섹션들과 정보들의 위치와 크기를 나타내는 ..
[Reversing] IMAGE_NT_HEADER IMAGE_NT_HEADERtypedef struct _IMAGE_NT_HEADERS { DWORD Signature; IMAGE_FILE_HEADER FileHeader; IMAGE_OPTIONAL_HEADER32 OptionalHeader; } IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32; 위 그림은 IMAGE_NT_HEADER 구조체입니다. 해당 구조체는 4byte 크기의 Signature 그리고 IMAGE_FILE_HEADER, IMAGE_OPTIONAL_HEADER32이 있습니다. 1.1 Signature가장 먼저 Signature입니다. IMAGE_NT_HEADER 구조체의 시작부분인 Signature는 실행파일이 ..
[Reversing] IMAGE_DOS_HEADER IMAGE_DOS_HEADER typedef struct _IMAGE_DOS_HEADER{ WORD e_magic; WORD e_cblp; WORD e_cp; WORD e_crlc; WORD e_cparhdr; WORD e_minalloc; WORD e_maxalloc; WORD e_ss; WORD e_sp; WORD e_csum; WORD e_ip; WORD e_cs; WORD e_lfarlc; WORD e_ovno; WORD e_res[4]; WORD e_oemid; WORD e_oeminfo; WORD e_res2[10]; LONG e_lfanew;} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER; 위에 보이는 것이 IMAGE_..
[Reversing] PE 파일 구조 찾기 파일을 가지고 직접 찾아 보겠습니다. 파일 전체 구조 설명 1번은 e_magic이며, MZ 입니다. MS-DOS 헤더의 시작이겠죠2번은 e_lfanew이며, IMAGE_NT_HEADER의 구조체 위치를 나타내죠 1번은 IMAGE_NT_HEADER의 Signature 입니다.2번은 IMAGE_FILE_HEADER의 Machine 입니다.3번은 NumberOfSections 부분이며, 파일이 가진 섹션 수를 알려주고 있죠4번은 TimeDateStamp입니다.5번은 MAGE_OPTIONAL_HEADER32의 구조체 크기를 알수 있습니다. 1번은 IMAGE_OPTIONAL_HEADER의 Magic로 "32bit - 0x10B", "64bit - 0x20B" 입니다.2번..
- Total
- Today