본문 바로가기

PE파일 본문

보안/악성코드

PE파일

Seongjun_You 2022. 7. 31. 16:31

PE파일 개요
-Portable Executeable File Format
파일(File)이
+이식 가능한 다른 곳에 옮겨져도(Portable)
+실행 가능하도록(Executable)
+만든 포맷(Format)

윈도우에서 사용하는 실행 파일, DLL 파일 등을 위한 파일 형식
윈도우 로더가 실행 가능한 코드를 관리하는데 필요한 정보를 캘슐화한 데이터 구조체
링킹을 위한 동적 라이브러리 참조, API 익스포트와 임포트 테이블, 자원 관리 데이터 그리고 TLS 데이터를 포함


- 실행 파일 컴파일 과정
Source.h(c언어) -> (compile) -> Source.obj
모든 헤더파일과 소스파일을 합쳐 하나의 기계어 코드 생성

Source.obj -> Link(Static Link Library, Import Library) -> Binary.exe
실행파일 로딩 시 PE Header정보를 토대로 DLL을 로드, 메모리에 적재될 각종 리소스 할당


PE파일 구조
- IMAGE_DOS_HEADER
PE 가장 첫 번째 값으로 MS-DOS헤더의 시작을 알림
(이 바이너리가 PE 파일인지 검사)
LONG e_lfanew;가 PE의 주소(IMAGE_NT_HEADERS)를 가르킴

- IMAGE_NT_HEADER 1
Signature "PE\0\0"
4바이트 바이러스에 자신의 시그니쳐를 심기도 함
바이러스나 악성코드 감염 표식용으로 사용(지금은 ㄴㄴ)

- IMAGE_NT_HEADER 2
  - _IMAGE_FILE_HEADER
  - WORD Machine; - 어떤 cpu에서 실행 가능한지 알림
  - WORD NumberOfSetcions; - 이 파일이 가진 세션의 개수를 알림
(보통 .text, .rdata, .data, .rsrc  4개 섹션이 존재)
   - DWORD TimeDateStamp; - obj->EXE 파일을 만든 시간을 알림
   - WORD SizeOfOptionalHeader; - IMAGE_OPTIONAL_HEADER32의 구조체 크기를 알림
(PE를 로딩하기 위한 굉장히 중요한 구조체를 담고 있음,
운영체제마다 크기가 다를 수 있어 PE 로더에서는 이 값을 먼저 확인)
   - WORD Chracteristics; - 이 파일이 어떤 형식인지 알림

- _IMAGE_OPTIONAL_HEADER
  - WORD Magic; - 32bit->0x10b, 64bit->0x20b
  - BYTE MajorLinkerVersion; - 사용한 컴파일러 버전
  - BYTE MinorLinkerVersion; - 사용한 컴파일러 버전
  - DWORD SizeOfCode; - 코드 양의 전체 크기
(악성코드 : 이 값을 참고하여 자신의 코드를 복제할 위치 기준을 잡음
 보안 솔루션 : 코드 섹션의 무결성 검사)
  - DWORD AddressOfEntryPoint; - 파일이 메모리에서 시작되는 지점
  - DWORD BaseOfCode; - 실행 코드 위치(ImageBase와 BaseOfCode를 더한 값부터 코드 시작)
  - DWORD ImageBase; - 로드할 가상 메모리 주소
  - DWORD SectionAlignment; - 각 세션을 정렬하기 위한 정렬 단위(기본값 0x1000)
  - DWORD FileAlignment; - ==
  - DWORD SizeOfImage; - EXE/DLL이 메모리에 로딩됐을 때 전체크기
  - DWORD SizeOfHeaders; - PE헤더의 크기를 알림(기본값 0x1000)
  - IMAGE_DATA_DIRECTORY구조체 - VirtualAddress와 Size필드 (Export, Import Rsrc 디렉터리와 IAT 등의 가상 주소와 크기 정보)

-Section
PE파일에서 섹션은 프로그램의 실제 내용을 담고 있는 블록
PE가 가상 주소 공간에 로드된 후 섹션 내용이 참고되고 실행

_IMAGE_SECTION_HEADER - 주로 각 섹션에 대한 이름, 시작 주소, 사이즈 등의 정보를 관리
IAT 호출 구조
1. IMPORT Hints/Names & DLL Names - 로드하는 임포트 함수 이름 목록
2. IMPORT Name Table - 임포트 함수 이름 주소 목록
3. IMPORT Address Table - 로드된 실제 함수 주소 목록 

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

악성코드 분석 방법  (0) 2022.08.06
PESTUDIO  (0) 2022.08.06
악성코드 분석 개념과 종류  (0) 2022.07.31
[CodeEngn] Basic RCE L13 보고서  (0) 2022.05.14
[레나 튜토리얼] FINAL  (0) 2022.04.02
Comments