[악성코드 분석] PE 공부
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 구조>
○ 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 |