Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 시스템해킹
- 워게임
- 알고리즘
- Web
- 소프트웨어
- 드림핵
- 해킹
- ftz
- 소프트웨어보안
- 웹해킹
- Webhaking
- TCP
- 네트워크
- XSS
- WarGame
- CodeEngn
- 모의해킹
- 네트워크보안
- System
- webhacking
- dreamhack
- bee-box
- 웹
- network
- hacking
- 리버싱
- 시스템
- 비박스
- reversing
- 순서도
Archives
- Today
- Total
Without a Break
PE 파일 구조 본문
PE (Portable Excutable) 파일
- Win32 기본파일 형식
- exe, scr, sys, dll, ocx 등
- Process : EXE + DLL
- 실행과정
- PE 파일 실행
- PE 헤더 정보를 메모리에 매핑
- 실제 프로세스를 위한 메모리 할당
- 섹션 정보를 메모리에 복사
- Import 정보 처리
- 기준 재배치 처리
- 실제 프로그램 코드로 분기
https://learn.microsoft.com/ko-kr/windows/win32/debug/pe-format
PE 형식 - Win32 apps
이 사양은 Windows 운영 체제 제품군에 있는 실행 파일(이미지) 파일 및 개체 파일의 구조를 설명합니다. 이러한 파일은 각각 PE(이식 가능한 실행 파일) 및 COFF(공용 개체 파일 형식) 파일이라고 합
learn.microsoft.com
Notepad.exe(win7) 분석
실행 파일을 PEview에서 열면 위와 같다.
VA, RVA
- VA(Virtual Address) : 가상 메모리 주소
- RVA(Relative Virtual Address)
- 가상 메모리 상대 주소
- PE 파일(DLL)이 메모리 상의 어떤 위치에 올라갈지 알 수 없음
- 기준점을 놓고 그 곳으로부터 위치를 계산함
- 기준점이 바뀌더라도 정보 접근이 가능하도록 함
- VA = ImageBase + RVA
IMAGE_DOS_HEADER
이는 winnt.h를 보면 쉽게 분석할 수 있다.
e_magic
- 4D 5A(MZ) : PE 파일 구조
- DO CF 11 E0(OLE), 50 4B(ZIP), 25 50 44 46(PDF), 89 50 4E 47(PNG)
e_lfanew
- 000000E8 : IMAGE_NT_HEADER 시작 주소
notepad.exe는 4D 5A로 PE 파일 구조이며, IMAGE_NT_HEADER 시작 주소가 000000E8임을 알 수 있다.
DOS Stub Code
프로그램이 DOS 모드에서는 실행할 수 없는 파일이므로, 윈도우에서 실행해야 함을 알 수 있다.
NT_HEADER
File_Header
- Machine(CPU) : 0x8664 - AMD64 CPU 호환(0X014c intel CPU)
- 섹션의 개수 : 0x0006
- Time Data : 0x4A5BC9B3 → 1247529395
- 2009년 7월 13일 23시 56분 35초
- Pointer To Symble Table, Number of Symbols
- Size Of Optional Header : 0xE0(32bit), 0xF0(64bit), 0x00(obj)
- Characteristics : 파일형식 정보, OR 연산
이 중, Chracteristics를 winnt.h 보면 다음과 같다.
Optinal_Header
이를 정리하면 밑의 표와 같다.
값 (notepad.exe) |
이름 | 의미 |
0x010b | Magic | 0x10B(32구조체), Ox20B(64구조체) |
0xa800 | Size Of Code | 코드영역(.text)의 크기 |
0x3689 | Address Of Entry Point | 프로그램 시작되는 코드의 주소 RVA값으로 저장 OllyDbg에서 처음 실행되는 주소(악성코드 시작 지점으로 지정할 수 있음) |
0x1000 | Base Of Code | 코드영역이 시작되는 상대 주소(RVA) |
0x1000000 | Image Base | PE파일이 메모리에 로드되는 시작 주소 일반적으로 EXE(0x400000), DLL(0x10000000)번지로 설정(변경가능), RVA 기준 |
0x1000 | Section Alignment | 메모리에서 섹션의 최소 단위, 시작주소는 이 값의 배수 |
0x200 | File Alignment | 파일에서 섹션의 최소 단위, 시작주소는 이 값의 배수 |
0x30000 | Size Of Image | PE 파일이 메모리에 로딩될 때 전체 크기 |
0x400 | Size Of Header | 모든 헤더의 크기 |
0x2 | Sub System | 1(System Driver), 2(GUI), 3(CUI) |
0x10 | Number of RvaAndSizes | Data Directory의 구조체 멤버 개수 |
Data Directory | PE파일에서 중요한 역할을 하는 개체들의 위치 및 크기 |
Section_Header
Section Header의 종류
종류 | 용도 |
.text | 실행 코드 |
.data | 초기화된 전역 변수, static 변수 |
.rdata | Const 변수, 문자열 상수 |
.bss | 전역 변수, static 변수, 문자열, 기타 상수 |
.edata | EAT와 관련된 정보 |
.idata | IAT와 관련된 정보 |
.rsrc | 리소스 정보 |
주요 내용
값 (notepad.exe) |
멤버 | 의미 |
0x747865742E | Name | 섹션 이름 .text |
0xA770 | Virtual Size | 메모리 섹션 크기 정보 |
0x1000 | Virtual Address | 메모리 섹션의 시작 주소. - Image Base가 0x1이므로 실제 주소는 0x1001이 됨, Optional Header의 Base of Code 값과 동일 |
0xA800 | Size Of Raw Data | 파일에서의 섹션 크기 |
0x600 | Pointer To Raw Data | 파일에서의 섹션의 시작 위치 |
0x60000020 | Characteristics | 읽고 쓰기가 가능한 코드 섹션 |
'Reversing > 윈도우즈보안과악성코드기초' 카테고리의 다른 글
기초 정적 분석 - Lab01-01.exe, Lab01-01.dll (1) | 2024.04.12 |
---|---|
PE 파일헤더와 섹션 (1) | 2024.04.06 |
기초 정적 분석 (1) | 2024.04.06 |
문자열 패치, Little Endian 실습 (0) | 2024.03.23 |
리틀 엔디안 표기법, Register 이해, assembly 언어 (0) | 2024.03.23 |