졸업프로젝트

사전 공부 1 & 2

img1244 2026. 1. 2. 19:01

DXE 모듈 구조 학습
UEFI PE/COFF 개요 정리
필요한 샘플 바이너리 수집 (OVMF)

 dxe 모듈 구조

https://www.sentinelone.com/labs/moving-from-manual-reverse-engineering-of-uefi-modules-to-dynamic-emulation-of-uefi-firmware/

DXE (Driver Execution Environment)의 구조 자체는

code, data, reloction section으로 구분된다.( https://patents.google.com/patent/EP2047364A1/en)

 

모듈의 실행 부분은 

PE/COFF 포맷(32비트는 PE32, 64비트는 PE32+)으로 구성되어 있고,

PE는 FV(Firware Volume) 안의 FFS 파일 형태로 들어간다.

FFS는 PE32(64bit에서는 PE32+, 이미지와 출처 같음) + DEPEX( 의존성)으로 구성되어 있다.

 

UEFI PE/COFF

UEFI의 PE(Portable Executable)과 COFF(Common Object File Format)는 기반이 되는 구조로써,

UEFI이미지에는 PE/COFF 헤더가 포함되어 있다.

 

PE는 일반적으로 알고 있는 

.acm.ax.cpl.dll.drv.efi.exe.mui.ocx.scr.sys.tsp 형태의 실행파일들이고, 

COFF는 

none, .o.obj 형태의 파일이다.

 

PE 파일은 동적 링커에게 파일을 메모리에 매핑하는 것을 설명하는 헤더로 구성되어 있다.

https://ko.wikipedia.org/wiki/PE_%ED%8F%AC%EB%A7%B7

 


PE헤더

DXE가 PE로 구성되어 있기에 PE와 PE헤더에 대해서 더 알 필요가 있다고 판단하였다.

(https://soyammou.tistory.com/24 참고)

https://soyammou.tistory.com/24

IMAGE_DOS_HEADERS

e_magic : 4D 5A(MZ)인지 확인하는 파트, 불일치할 시 실행하지 않는다.

... : 파일 마지막 페이지의 크기, 파일의 페이지, 최대/최소 파라그래프 등의 정보가 들어감(e_aaa의 형태)

e_ifanew : PE HEADER의 시작 ~ PE SIGNATURE(위의 e_magic과 동일)까지의 offset 

https://blog.naver.com/nautilus1028/20140523427?photoView=0

WORD == 2byte

DWORD == 4byte

LONG == 4byte(32bit), 8byte(64bit)

MS DOS Stub HEADERS

Dos헤더 바로 아래에 존재하며, 반드시 필수는 아닌 아니다(∴ 크기도 일정하지 않다)

특정 DOS에서는 실행될 수 없다는 내용 등을 알리기 위해서 존재하는 부분이다.

위의 IMAGE_DOS_HEADERS와 합쳐서 DOS header라고 총칭한다.

 

IMAGE_NT_HEADERS

NT헤더는 아래의 두 헤더 외에도 가장 먼저 signature를 가진다.

이때 해당 signature 값은 50 45 (PE)이다.

IMAGE_FILE_HEADERS

구성 요소는 아래와 같다

1. Machine

    cpu 고유 값

2. NumberOfSections

    코드, 데이터, 리소스등이 저장되는 섹션의 개수( > 0)

3. DWORD TimeDateStamp

   IMAGE_OPTIONAL_HEADERS의 크기를 담고 있다. PE로더가 해당 부분을 통해 크기를 추정함

   헤더이름: IMAGE_OPTIONAL_HEADER32(32bit), IMAGE_OPTIONAL_HEADER64(64bit)

4. DWORD PointerToSymbolTable

    파일의 속성을 bit OR로 조합(실행 가능 형태 여부, DLL인지 etc)

IMAGE_OPTIONAL_HEADERS

1. Magic

    0x10B(32bit)

    0x20B(64bit)

2. AddressOfEntryPoint

    EP(Entry Point) 의 RVA(Relative Virtual Address) 값을 가짐

  • RVA값이기 때문에 실제 EP의 VA(실제 주소)는 AddressOfEntryPoint+ImageBase
  • PE로더는 파일을 메모리에 올리고 EIP를 AddressOfEntryPoint+ImageBase로 설정

3. ImageBase

    메모리에 로딩되는 시작 주소

4. SectionAlignment

    메모리에서 섹션 최소 단위를 나타내는것

5. FileAlignment

    파일에서 섹션의 최소 단위를 나타내는것

    파일/메모리의 섹션 크기는 반드시 각각 FileAlignment/SectionAlignment 의 배수가 되어야 함

6. SizeOflmage

    PE파일이 메모리에 로딩됐을 때 가상 메모리(VA)에서 PE Image(PE구조)가 차지하는 크기

7. SizeOfHeader

    PE header 의 전체 크기를 나타냅니다.

8. Subsystem

    파일의 타입을 나타냄

    1 : Driver file

    2 : GUI file

    3 : CUI file

 

.text, .data는 실행 코드와 전역변수를 담고 있는 부분으로 이 정보들이 IMAGE_FILE_HEADERS의  NumberOfSections에 들어가는 것으로 보인다.


PEview

UEFI Tool

https://www.dell.com/support/product-details/ko-kr/product/xps-15-9560-laptop/drivers

'졸업프로젝트' 카테고리의 다른 글

ghidra headless 사용  (0) 2026.02.13
사전공부 6  (0) 2026.02.06
사전공부 5  (0) 2026.01.30
사전공부 4  (0) 2026.01.23
사전공부 3  (0) 2026.01.16