본문 바로가기
System Hacking

PE (Portable Executable) 파일 이란?

by zz! 2024. 6. 3.
728x90

시스템 해킹에서 PE(Portable Executable) 파일 형식을 이해하는 것은 여러 가지 이유로 중요합니다. Windows 운영 체제에서 실행 가능한 파일의 표준 형식이므로, 이를 이해하면 시스템 해킹에 많은 도움이 됩니다.

 

PE (Portable Executable) 파일 이란?

PE (Portable Executable) 파일은 Windows 운영 체제에서 프로그램을 실행하는 데 사용되는 파일 형식이다.

쉽게 말해서, Windows에서 돌아가는 프로그램이나 라이브러리(.dll 파일)들이 이 형식을 사용을 한다.

PE 파일은 프로그램이 실행될 때 필요한 모든 정보를 담고 있는 파일이다.

 

PE (Portable Executable) 파일의 종류

더보기

실행 파일 (Executable Files)

확장자 : .exe 

실행 파일은 Windows에서 직접 실행되는 프로그램 파일입니다. 사용자가 더블 클릭하면 실행이 되는 exe 파일입니다.

ex) notepad.exe, calc.exe(계산기)

 

DLL 파일 (Dynamic Link Libraries)

확장자 : .dll

DLL 파일은 동적 링크 라이브러리로, 여러 프로그램에서 공통으로 사용할 수 있는 함수와 리소스를 포함하고 있습니다. 직접 실행되지는 않지만, 다른 실행 파일에서 호출되어 사용이 됩니다.

ex) kernel32.dll , user32.dll

 

시스템 파일 (System Files)

확장자 : .sys

시스템 파일은 운영 체제의 핵심 기능을 담당하는 파일로, 주로 드라이버 파일로 사용이 된다. 하드웨어와 소프트웨어 간의 인터페이스를 제공한다.

ex) ntoskrnl.exe (운영 체제의 커널) , drivers\*.sys (장치 드라이버 파일)

 

OCX 파일 (OLE Control Extension)

확장자 : .ocx

ocx 파일은 ActiveX 컨트롤을 포함하는 파일로, 주로 웹 브라우저나 응용 프로그램에서 특정 기능을 제공하기 위해 사용된다. 본질적으로 DLL 파일의 한 종류이다.

ex) flash.ocx (Adobe Flash Player ActiveX 컨트롤)

 

드라이버 파일 (Driver Files)

확장자 :  .sys

드라이버 파일은 하드웨어 장치가 운영 체제와 상호 작용할 수 있도록 해주는 파일이다. 이는 장치 드라이버로 하드웨어와 소프트웨어 간의 통신을 담당합니다.

ex) nvlddmkm.sys (NVIDIA 그래픽 카드 드라이버)

 

서비스 파일 (Service Files)

확장자 : .exe , .dll

서비스 파일은 Windows 서비스로 실행되는 파일입니다. 이러한 파일은 백그라운드에서 실행되며, 시스템 기능을 지원하거나 네트워크 서비스를 제공합니다.

ex) sychost.exe (여러 Windows 서비스를 호스팅하는 프로세스)

 

드라이버 카탈로그 파일 (Driver Catalog Files)

확장자 : .cat

드라이버 카탈로그 파일은 드라이버의 보안 서명을 포함하는 파일입니다.

Windows는 드라이버 설치 시 파일을 사용하여 드라이버의 무결성과 신뢰성을 검증합니다.
ex) oem*.cat (OEM 제공 드라이버의 카탈로그 파일)

 

리소스 파일 (Resource Files)

확장자 : .res

리소스 파일은 아이콘, 비트맵, 문자열 등과 같은 리소스를 포함하는 파일입니다. 컴파일된 리소스 파일은 PE 파일에 포함될 수 있습니다.

ex) appname.res (어플리케이션의 리소스 파일)

 

시스템 파일과 드라이버 파일은 운영 체제의 핵심 기능을 담당하고, 실행 파일과 DLL 파일은 가장 일반적인 형태입니다. 각 파일 형식은 특정 용도로 설계되어 있으며, PE 파일 구조를 이해하면 이러한 파일들의 역할과 동작 방식을 더 잘 이해할 수 있습니다.

 

PE 파일의 주요 구성 요소

1. DOS Header (DOS 헤더)

옛날 DOS 운영 체제와의 호환성을 위해 존재합니다.

MZ 라는 시그니처로 시작되고, DOS 환경에서 실행될 때 표시할 간단한 메시지를 포함할 수 있습니다.

비유 : 옛날 기계에 맞춰진 시작 버튼, 지금은 잘 사용하지 않지만 여전히 버튼은 존재합니다.

2. PE Header (PE 헤더)

PE 파일의 실제 시작 지점을 나타냅니다.

PE\0\0 이라는 시그니처로 시작하고, 운영 체제가 이 파일이 실행 파일임을 인식하게 합니다.

비유 : 책의 차례나 목차 같은 역할을 합니다. "이 파일의 중요한 정보는 여기서 시작해!" 라고 알려주는 부분입니다.

3. Optional Header (옵셔널 헤더)

실행 파일의 추가 정보를 제공합니다.

실행 파일의 크기, 메모리 레이아웃, 운영 체제 버전 등의 정보가 포함됩니다.

비유 : 여행 가이드북의 상세 페이지 같은 역할입니다. 여행지의 날씨, 문화, 주의 사항 등을 알려주는 부분입니다.

4. Section Table (섹션 테이블)

파일의 다양한 섹션에 대한 정보를 담고 있습니다.

각 섹션의 이름, 크기, 메모리 위치 등을 포함합니다.

비유 : 건물의 층별 안내판 같은 역할이다. "1층은 상점, 2층은 사무실, 3층은 주거 공간" 처럼 각 층의 정보를 제공

5. Sections (섹션)

실제 프로그램의 코드와 데이터가 포함된 부분입니다.

코드, 데이터, 리소스 등이 섹션에 나누어져 있습니다.

비유 : 건물의 실제 방과 사무실, 상점 등이 있는 부분입니다. 각각의 방(섹션)이 고유한 목적을 가지고 있습니다.

 

주요 섹션의 역할

.text

프로그램의 실행 코드가 있는 부분입니다.

.data

프로그램에서 사용되는 초기화된 데이터가 있는 부분입니다.

.rdata

읽기 전용 데이터가 있는 부분입니다.

.bss

초기화되지 않은 데이터가 있는 부분입니다.

.iodata

외부에서 가져온 함수나 라이브러리 정보가 있는 부분입니다.

.edata

외부에서 제공할 수 있는 함수나 데이터가 있는 부분입니다.

.rsrc

아이콘, 이미지, 문자열 등의 리소스가 있는 부분입니다.

 

728x90