PE(Portable Executable) 파일 - Windows OS에서 사용되는 실행 파일 형식

(Portable : 이식 가능한 / Executable : 실행 가능한)

 

단어의 뜻처럼 처음에는 UNIX 같은 다른 OS에서 옮겨도 실행 가능한 파일을 만들고자 했으나 실제론 Win 버전(XP, 7, 10 등)에서만 사용할 수 있다. 

 

PE(PE32)는 32bit 형태의 실행 파일을 의미 (64bit는 PE+ 또는 PE32+ 로 표기)

 

<PE 파일 종류>실행 계열 - EXE, SCR드라이브 계열 - SYS, VXD라이브러리 계열 - DLL, OCX, CPL, DRV 

 

<PE 구조>

WIN7 메모장 PE구조 (PE View 사용)

 

hwp 파일을 확장자만 exe로 바꾼다해도 PE 구조가 엉망이라 실행 안됨

 

○ IMAGE_DOS_HEADER 

MS에서 PE를 만들 때 DOS 파일에 대한 하위 호환성을 고려해 만든 헤더

IMAGE_DOS_HEADER의 크기는 40으로 Rawdata에서 00000000 ~ 0000003F까지를 나타냄

 

e_magic - IMAGE_DOS_HEADER 헤더 맨 앞 2byte로 DOS Signature 의미 (4D 5A(HEX) - MZ(ASCII))

e_lfanew - 헤더 마지막 4byte로 NT header 의 offset 의미 (Rawdata에서 E0 00 00 00은 실제론 0000000E/리틀 엔디언)

 

 

○ MS-DOS Stub Program 

DOS 환경에서 실행했을 때 읽는 영역

해당 헤더의 존재 여부는 옵션이며 크기 일정하지 않음 (없어도 실행 가능한 헤더)

ㄴ 32bit 및 64bit WIN에서는 해당 영역을 읽지 않고 무시

 

○ IMAGE_NT_HEADERS 

해당 헤더에는 3개의 멤버로 구성 

 

1) Signature

값은 50 45 00 00 (PE 00)을 가짐 

과거에는 악성코드 제작자가 자신의 시그니처를 여기에 마킹하기도 했으나 현재는 불가 (실행 불가)

 

2) IMAGE_FILE_HEADER

Machine - CPU의 고유한 값 (윈도우 실행 파일 대부분 I386으로 확인됨 / 32bit로 32bit,64bit OS에서 다 실행 가능)

NumberOfSections - 해당 파일이 가진 섹션의 개수를 알림 

 * 섹션(Section) : PE 파일의 코드, 데이터, 리소스 등을 저장하는 녀석?

TimeDateStamp - 빌드(obj에서 EXE 파일 변환) 시간을 나타냄

                     - 드물겠지만 만들어진 시간을 확인함으로 비정상 파일 판별 가능

SizeOfOptionalHeader - IMAGE_OPTIONAL_HEADER의 구조체 크기를 나타냄

Characteristics - 파일이 실행 가능한 형태인지 DLLS 파일인지 등의 파일의 속성을 나타냄

 

3) IMAGE_OPTIONAL_HEADER
Magic - 32bit 인지 64bit인지 알려줌 (0x10B 는 32bit / 0x20B는 64bit)
MajorLinkerVersion - 사용한 컴파일러 버전 (ex. VisualCode 몇 버전에서 컴파일 됐다) 
SizeOfCode - 코드 양의 전체 크기 
 * 여기서 이야기하는 코드는 실행 가능한 코드로 악성코드의 경우 이 값을 참고하여 코드를 복제할 위치 기준을 잡음
AddressOfEntryPoint - 코드가 시작되는 지점 (파일에서 어디서부터 시작되는지)
ImageBase - 프로세스의 가상 메모리는 0 ~ FFFFFFFF 범위(32BIT)인데 이 중 어디에서 PE 파일이 로딩되는지 알려줌
SectionAlignment, FileAlignment - 세션을 정렬하기 위한 정렬 단위 (기본 값은 0x1000) 
 * 메모리에 섹션 크기는 단위 기준의 배수가 돼야하며 메모리를 기준 단위로 나눠서 겹치는 부분이 없게 만듬
SizeOfImage - EXE/DLL이 메모리에 로딩됐을 때 PE Image가 차지하는 전체 크기
 * 실제 크기 보다 살짝 커짐 (왜? 정렬 단위에 따라 조금 넉넉하게 넣어줌)
SizeOfHeader - PE 헤더의 크기를 알림(Aligment와 맞추기 위해 1000byte로 맞춤)

참고 - 리버싱 핵심원리 (일명 나뭇잎 책)

 

'보안 > 악성코드 분석' 카테고리의 다른 글

[악성코드 분석] VM 설정  (0) 2024.05.15
[악성코드 분석] 이메일 헤더 분석  (0) 2024.05.08
[악성코드 분석] 패킹  (0) 2022.05.07
[맛보기] 랜섬웨어 감염  (0) 2022.04.20

+ Recent posts