SlideShare a Scribd company logo
1 of 20
Download to read offline
05 PE Header
02부 리버스 엔지니어링 중급
최일선
E-mail : isc0304@naver.com Writing by Ilsun Choi 1
Index
1. PE 구조를 알아야 할 필요성
2. PE에 대한 상식적인 개념
3. 빌드 과정
4. PE 파일 구조
5. IMAGE_DOS_HEADER
6. IMAGE_NT_HEADER
•1) Signature
•2) 구조체 구성
•3) IMAGE_FILE_HEADER
•4) IMAGE_OPTIONAL_HEADER
7. IMAGE_SECTION_HEADER
8. PE와 API 호출의 원리
9. IAT에서 API를 계산하는 방법
참고문헌
E-mail : isc0304@naver.com Writing by Ilsun Choi 2
1. PE 구조를 알아야 할 필요성
프로세스 적재
를 위한 정보
API 호출을
위한 IAT
코드 사이즈와
각 섹션의 위치
언패킹
바이러스 분석
안티 디버깅
E-mail : isc0304@naver.com Writing by Ilsun Choi 3
2. PE에 대한 상식적인 개념
 Portable Executable File Format
파일(File)이
+ 이식 가능한 다른 곳에 옮겨져도 (Portable)
+ 실행 가능하도록 (Executable)
+ 만든 포맷(Format)
E-mail : isc0304@naver.com Writing by Ilsun Choi 4
3. 빌드 과정
E-mail : isc0304@naver.com Writing by Ilsun Choi 5
#include <window.h>
void main()
0x18, 0x19, 0x01, 0x02,
0x03
Static Link Library
Import Library
PE Header
0x18, 0x19, 0x01, 0x02,
0x03
Footer
Source.h Source.obj
Binary.exe
compile
Link
모든 헤더파일과 소스
파일을 합쳐 하나의
기계어 코드 생성
DLL, 리소스 데이터,
Import, Export 테이
블을 처리할 수 있는
정보를 윈도우에 약속
된 규약에 맞춰 기입
실행파일 로딩 시 PE
Header 정보를 토대
로 DLL을 로드, 메모
리에 적재될 각종 리
소스 할당
(PE 헤더 정보 오류
시 로딩 불가)
4. PE 파일 구조
 이와 관련된 공부를 하면 자연스럽게 익히게 됨
 PE 구조체
E-mail : isc0304@naver.com Writing by Ilsun Choi 6
IMAGE_DOS_HEADER
IMAGE_NT_HEADER
IMAGE_FILE_HEADER
IMAGE_OPTIONAL_HEADER
IMAGE_SECTION_HEADER
IMAGE_IMPORT_DESCRIPTOR
IMAGE_EXPORT_DIRECTORY
IMAGE_IMPORT_BY_NAME
IMAGE_THUNK_DATA32
5. IMAGE_DOS_HEADER
E-mail : isc0304@naver.com Writing by Ilsun Choi 7
PE 가장 첫 번째 값으로
MZ(마크 즈비코프스키가 개발) 헤더를 통해
MS-DOS 헤더의 시작을 알림
(이 바이너리가 PE 파일인지 검사)
IMAGE_NT_HEADER의
구조체 위치를 알림
6. IMAGE_NT_HEADER > 1) Signature
E-mail : isc0304@naver.com Writing by Ilsun Choi 8
Signature : “PE00” : 4바이트
바이러스에 자신의 시그니쳐를 심기도 함
바이러스나 악성코드 감염 표식용으로 사용
6. IMAGE_NT_HEADER > 2) 구조체 구성
E-mail : isc0304@naver.com Writing by Ilsun Choi 9
6. IMAGE_FILE_HEADER > 3) IMAGE_FILE_HEADER[1/2]
E-mail : isc0304@naver.com Writing by Ilsun Choi 10
어떤 CPU에서 실행 가능한지 알림
(일반 Desktop, Labtop에서 사용할 경우, 별로
필요 없음)
이 파일이 가진 세션의 개수를 알림
(일반적으로 .text, .rdata, .data, .rsrc
4개 섹션이 존재)
obj  EXE 파일을 만든 시간을 알림
(델파이로 만들어진 파일은 항상 1992년으로
표시됨)
6. IMAGE_FILE_HEADER > 3) IMAGE_FIEL_HEADER[2/2]
E-mail : isc0304@naver.com Writing by Ilsun Choi 11
IMAGE_OPTIONAL_HEADER32의
구조체 크기를 알림
(PE를 로딩하기 위한 굉장히 중요한 구조체를
담고 있음, 운영체제마다 크기가 다를 수 있어
PE 로더에서는 이 값을 먼저 확인)
이 파일이 어떤 형식인지 알림
Characteristics num Characteristics num
IMAGE_FILE_RELOCS_STRIPPED 0x0001 IMAGE_FILE_LARGE_ADDRESS_AWARE 0x0020
IMAGE_FILE_EXECUTABLE_IMAGE 0x0002 IMAGE_FILE_BYTES_REVERSED_LO 0x0080
IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004 IMAGE_FILE_32BIT_MACHINE 0x0100
IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008 IMAGE_FILE_DEBUG_STRIPPED 0x0200
IMAGE_FILE_AGGRESIVE_WS_TRIM 0x0010 IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400
#define Characteristics
6. IMAGE_FILE_HEADER > 4) IMAGE_OPTIONAL_HEADER [1/3]
E-mail : isc0304@naver.com Writing by Ilsun Choi 12
32bit  0x10B
64bit  0x20b
코드 양의 전체 크기
악성코드 : 이 값을 참고하여 자신의
코드를 복제할 위치 기준을 잡음
보안 솔루션 : 코드 섹션의 무결성 검사
Standard Fields
사용한 컴파일러 버전
파일이 메모리에서 실행되는 시작 지점
실행 코드 위치
(ImageBase와 BaseofCode를
더한 값부터 코드 시작)
6. IMAGE_FILE_HEADER > 4) IMAGE_OPTIONAL_HEADER [2/3]
E-mail : isc0304@naver.com Writing by Ilsun Choi 13
로드할 가상 메모리 주소
각 세션을 정렬하기 위한 정렬 단위
(보통 0x1000)
NT additional feilds
EXE/DLL이 메모리에 로딩되었을 때
전체 크기
PE 헤더의 크기를 알려줌
( 기본값 0x1000 )
구조체: VirtualAddress와 Size 필드
(Export, Import, Rsrc 디렉터리와 IAT 등의 가상
주소와 크기 정보)
6. IMAGE_FILE_HEADER > 4) IMAGE_OPTIONAL_HEADER [3/3]
E-mail : isc0304@naver.com Writing by Ilsun Choi 14
RVA (Relative Virtual Address) : 상대주소
NT Header -> Data Directory
IAT 시작 주소
IMAGEBASE(0x01000000) + RVA(0x7604)
= 0x1007604
7. IMAGE_SECTION_HEADER
 주로 각 섹션에 대한 이름, 시작 주소, 사이즈 등의 정보를 관리하는 구조체
E-mail : isc0304@naver.com Writing by Ilsun Choi 15
MEM_READ, MEM_EXECUTE, MEM_WRITE
는 각 세션의 RWE 속성을 나타냄
8. PE와 API 호출의 원리
E-mail : isc0304@naver.com Writing by Ilsun Choi 16
IAT에는 해당 함수의
실제 주소가 들어있다.
IAT 주소에 쓰인 값을
참조한다.
실제주소를 참고하여
CALL하는 위치이다.
 msvcrt.__set_app_type 함수 호출 과정
9. IAT에서 API를 계산하는 방법
 [Stud_PE] – [Functions] – [ADVAPI32.dll] – [MORE]
E-mail : isc0304@naver.com Writing by Ilsun Choi 17
9. IAT에서 API를 계산하는 방법
 [Stud_PE] – [Functions] – [ADVAPI32.dll] – [RegQueryValueExW]
E-mail : isc0304@naver.com Writing by Ilsun Choi 18
IMAGE_IMPORT
_BY_NAME
0x00007CA2
9. IAT에서 API를 계산하는 방법
 IAT 호출 과정
E-mail : isc0304@naver.com Writing by Ilsun Choi 19
IMAGE_THUNK
_DATA32
0x000076CC
IMAGE_IMPORT
_DESCRIPTION
Name : ADVAPI32.dll
이와 관련된 자세한 사항을 보려면 코드를 직접 분석 해보면 된다.
 http://blog.naver.com/isc0304/220388240818
Export Table은 IAT와 유사하여 IAT를 익히면 자연히 알 수 있다.
참고문헌
 리버싱 엔지니어링 바이블, 강병탁 지음
E-mail : isc0304@naver.com Writing by Ilsun Choi 20

More Related Content

Similar to 05 pe 헤더(pe header)

1. 악성코드 진단 기법 개론
1. 악성코드 진단 기법 개론1. 악성코드 진단 기법 개론
1. 악성코드 진단 기법 개론Youngjun Chang
 
2. windows system과 file format
2. windows system과 file format2. windows system과 file format
2. windows system과 file formatYoungjun Chang
 
Ssscon forensic pt
Ssscon forensic ptSsscon forensic pt
Ssscon forensic pt윤아 황
 
윈도우 커널 익스플로잇
윈도우 커널 익스플로잇윈도우 커널 익스플로잇
윈도우 커널 익스플로잇Seungyong Lee
 
Data-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSData-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSSukwoo Lee
 
2006 03 15_pe & api hook
2006 03 15_pe & api hook2006 03 15_pe & api hook
2006 03 15_pe & api hook용환 노
 
20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은
20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은
20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은jieun kim
 
보안 위협과 악성코드 분석 기법
보안 위협과 악성코드 분석 기법보안 위협과 악성코드 분석 기법
보안 위협과 악성코드 분석 기법Youngjun Chang
 
Windows reversing study_basic_3
Windows reversing study_basic_3Windows reversing study_basic_3
Windows reversing study_basic_3Jinkyoung Kim
 
JVM_트러블슈팅.pdf
JVM_트러블슈팅.pdfJVM_트러블슈팅.pdf
JVM_트러블슈팅.pdfkwbak
 
Why OpenStack is Operating System?
Why OpenStack is Operating System?Why OpenStack is Operating System?
Why OpenStack is Operating System?유명환 FunFun Yoo
 
3. windows system과 rootkit
3. windows system과 rootkit3. windows system과 rootkit
3. windows system과 rootkitYoungjun Chang
 
Hoons닷넷 좌충우돌 10년, 그리고 새로운 패러다임
Hoons닷넷 좌충우돌 10년, 그리고 새로운 패러다임Hoons닷넷 좌충우돌 10년, 그리고 새로운 패러다임
Hoons닷넷 좌충우돌 10년, 그리고 새로운 패러다임KH Park (박경훈)
 
Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기Dong Chan Shin
 
C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발흥배 최
 
1. 악성코드 진단 기법 개론
1. 악성코드 진단 기법 개론1. 악성코드 진단 기법 개론
1. 악성코드 진단 기법 개론Youngjun Chang
 
리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리Seungyong Lee
 
Egis i 제안서(2014.03) 아이웍스
Egis i 제안서(2014.03) 아이웍스Egis i 제안서(2014.03) 아이웍스
Egis i 제안서(2014.03) 아이웍스세구 강
 

Similar to 05 pe 헤더(pe header) (20)

1. 악성코드 진단 기법 개론
1. 악성코드 진단 기법 개론1. 악성코드 진단 기법 개론
1. 악성코드 진단 기법 개론
 
2. windows system과 file format
2. windows system과 file format2. windows system과 file format
2. windows system과 file format
 
Ssscon forensic pt
Ssscon forensic ptSsscon forensic pt
Ssscon forensic pt
 
윈도우 커널 익스플로잇
윈도우 커널 익스플로잇윈도우 커널 익스플로잇
윈도우 커널 익스플로잇
 
Data-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSData-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTS
 
Pe+file+format
Pe+file+formatPe+file+format
Pe+file+format
 
2006 03 15_pe & api hook
2006 03 15_pe & api hook2006 03 15_pe & api hook
2006 03 15_pe & api hook
 
20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은
20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은
20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은
 
보안 위협과 악성코드 분석 기법
보안 위협과 악성코드 분석 기법보안 위협과 악성코드 분석 기법
보안 위협과 악성코드 분석 기법
 
Windows reversing study_basic_3
Windows reversing study_basic_3Windows reversing study_basic_3
Windows reversing study_basic_3
 
JVM_트러블슈팅.pdf
JVM_트러블슈팅.pdfJVM_트러블슈팅.pdf
JVM_트러블슈팅.pdf
 
Why OpenStack is Operating System?
Why OpenStack is Operating System?Why OpenStack is Operating System?
Why OpenStack is Operating System?
 
3. windows system과 rootkit
3. windows system과 rootkit3. windows system과 rootkit
3. windows system과 rootkit
 
Hoons닷넷 좌충우돌 10년, 그리고 새로운 패러다임
Hoons닷넷 좌충우돌 10년, 그리고 새로운 패러다임Hoons닷넷 좌충우돌 10년, 그리고 새로운 패러다임
Hoons닷넷 좌충우돌 10년, 그리고 새로운 패러다임
 
Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기
 
C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발
 
04 프로세스
04 프로세스04 프로세스
04 프로세스
 
1. 악성코드 진단 기법 개론
1. 악성코드 진단 기법 개론1. 악성코드 진단 기법 개론
1. 악성코드 진단 기법 개론
 
리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리
 
Egis i 제안서(2014.03) 아이웍스
Egis i 제안서(2014.03) 아이웍스Egis i 제안서(2014.03) 아이웍스
Egis i 제안서(2014.03) 아이웍스
 

05 pe 헤더(pe header)

  • 1. 05 PE Header 02부 리버스 엔지니어링 중급 최일선 E-mail : isc0304@naver.com Writing by Ilsun Choi 1
  • 2. Index 1. PE 구조를 알아야 할 필요성 2. PE에 대한 상식적인 개념 3. 빌드 과정 4. PE 파일 구조 5. IMAGE_DOS_HEADER 6. IMAGE_NT_HEADER •1) Signature •2) 구조체 구성 •3) IMAGE_FILE_HEADER •4) IMAGE_OPTIONAL_HEADER 7. IMAGE_SECTION_HEADER 8. PE와 API 호출의 원리 9. IAT에서 API를 계산하는 방법 참고문헌 E-mail : isc0304@naver.com Writing by Ilsun Choi 2
  • 3. 1. PE 구조를 알아야 할 필요성 프로세스 적재 를 위한 정보 API 호출을 위한 IAT 코드 사이즈와 각 섹션의 위치 언패킹 바이러스 분석 안티 디버깅 E-mail : isc0304@naver.com Writing by Ilsun Choi 3
  • 4. 2. PE에 대한 상식적인 개념  Portable Executable File Format 파일(File)이 + 이식 가능한 다른 곳에 옮겨져도 (Portable) + 실행 가능하도록 (Executable) + 만든 포맷(Format) E-mail : isc0304@naver.com Writing by Ilsun Choi 4
  • 5. 3. 빌드 과정 E-mail : isc0304@naver.com Writing by Ilsun Choi 5 #include <window.h> void main() 0x18, 0x19, 0x01, 0x02, 0x03 Static Link Library Import Library PE Header 0x18, 0x19, 0x01, 0x02, 0x03 Footer Source.h Source.obj Binary.exe compile Link 모든 헤더파일과 소스 파일을 합쳐 하나의 기계어 코드 생성 DLL, 리소스 데이터, Import, Export 테이 블을 처리할 수 있는 정보를 윈도우에 약속 된 규약에 맞춰 기입 실행파일 로딩 시 PE Header 정보를 토대 로 DLL을 로드, 메모 리에 적재될 각종 리 소스 할당 (PE 헤더 정보 오류 시 로딩 불가)
  • 6. 4. PE 파일 구조  이와 관련된 공부를 하면 자연스럽게 익히게 됨  PE 구조체 E-mail : isc0304@naver.com Writing by Ilsun Choi 6 IMAGE_DOS_HEADER IMAGE_NT_HEADER IMAGE_FILE_HEADER IMAGE_OPTIONAL_HEADER IMAGE_SECTION_HEADER IMAGE_IMPORT_DESCRIPTOR IMAGE_EXPORT_DIRECTORY IMAGE_IMPORT_BY_NAME IMAGE_THUNK_DATA32
  • 7. 5. IMAGE_DOS_HEADER E-mail : isc0304@naver.com Writing by Ilsun Choi 7 PE 가장 첫 번째 값으로 MZ(마크 즈비코프스키가 개발) 헤더를 통해 MS-DOS 헤더의 시작을 알림 (이 바이너리가 PE 파일인지 검사) IMAGE_NT_HEADER의 구조체 위치를 알림
  • 8. 6. IMAGE_NT_HEADER > 1) Signature E-mail : isc0304@naver.com Writing by Ilsun Choi 8 Signature : “PE00” : 4바이트 바이러스에 자신의 시그니쳐를 심기도 함 바이러스나 악성코드 감염 표식용으로 사용
  • 9. 6. IMAGE_NT_HEADER > 2) 구조체 구성 E-mail : isc0304@naver.com Writing by Ilsun Choi 9
  • 10. 6. IMAGE_FILE_HEADER > 3) IMAGE_FILE_HEADER[1/2] E-mail : isc0304@naver.com Writing by Ilsun Choi 10 어떤 CPU에서 실행 가능한지 알림 (일반 Desktop, Labtop에서 사용할 경우, 별로 필요 없음) 이 파일이 가진 세션의 개수를 알림 (일반적으로 .text, .rdata, .data, .rsrc 4개 섹션이 존재) obj  EXE 파일을 만든 시간을 알림 (델파이로 만들어진 파일은 항상 1992년으로 표시됨)
  • 11. 6. IMAGE_FILE_HEADER > 3) IMAGE_FIEL_HEADER[2/2] E-mail : isc0304@naver.com Writing by Ilsun Choi 11 IMAGE_OPTIONAL_HEADER32의 구조체 크기를 알림 (PE를 로딩하기 위한 굉장히 중요한 구조체를 담고 있음, 운영체제마다 크기가 다를 수 있어 PE 로더에서는 이 값을 먼저 확인) 이 파일이 어떤 형식인지 알림 Characteristics num Characteristics num IMAGE_FILE_RELOCS_STRIPPED 0x0001 IMAGE_FILE_LARGE_ADDRESS_AWARE 0x0020 IMAGE_FILE_EXECUTABLE_IMAGE 0x0002 IMAGE_FILE_BYTES_REVERSED_LO 0x0080 IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004 IMAGE_FILE_32BIT_MACHINE 0x0100 IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008 IMAGE_FILE_DEBUG_STRIPPED 0x0200 IMAGE_FILE_AGGRESIVE_WS_TRIM 0x0010 IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400 #define Characteristics
  • 12. 6. IMAGE_FILE_HEADER > 4) IMAGE_OPTIONAL_HEADER [1/3] E-mail : isc0304@naver.com Writing by Ilsun Choi 12 32bit  0x10B 64bit  0x20b 코드 양의 전체 크기 악성코드 : 이 값을 참고하여 자신의 코드를 복제할 위치 기준을 잡음 보안 솔루션 : 코드 섹션의 무결성 검사 Standard Fields 사용한 컴파일러 버전 파일이 메모리에서 실행되는 시작 지점 실행 코드 위치 (ImageBase와 BaseofCode를 더한 값부터 코드 시작)
  • 13. 6. IMAGE_FILE_HEADER > 4) IMAGE_OPTIONAL_HEADER [2/3] E-mail : isc0304@naver.com Writing by Ilsun Choi 13 로드할 가상 메모리 주소 각 세션을 정렬하기 위한 정렬 단위 (보통 0x1000) NT additional feilds EXE/DLL이 메모리에 로딩되었을 때 전체 크기 PE 헤더의 크기를 알려줌 ( 기본값 0x1000 ) 구조체: VirtualAddress와 Size 필드 (Export, Import, Rsrc 디렉터리와 IAT 등의 가상 주소와 크기 정보)
  • 14. 6. IMAGE_FILE_HEADER > 4) IMAGE_OPTIONAL_HEADER [3/3] E-mail : isc0304@naver.com Writing by Ilsun Choi 14 RVA (Relative Virtual Address) : 상대주소 NT Header -> Data Directory IAT 시작 주소 IMAGEBASE(0x01000000) + RVA(0x7604) = 0x1007604
  • 15. 7. IMAGE_SECTION_HEADER  주로 각 섹션에 대한 이름, 시작 주소, 사이즈 등의 정보를 관리하는 구조체 E-mail : isc0304@naver.com Writing by Ilsun Choi 15 MEM_READ, MEM_EXECUTE, MEM_WRITE 는 각 세션의 RWE 속성을 나타냄
  • 16. 8. PE와 API 호출의 원리 E-mail : isc0304@naver.com Writing by Ilsun Choi 16 IAT에는 해당 함수의 실제 주소가 들어있다. IAT 주소에 쓰인 값을 참조한다. 실제주소를 참고하여 CALL하는 위치이다.  msvcrt.__set_app_type 함수 호출 과정
  • 17. 9. IAT에서 API를 계산하는 방법  [Stud_PE] – [Functions] – [ADVAPI32.dll] – [MORE] E-mail : isc0304@naver.com Writing by Ilsun Choi 17
  • 18. 9. IAT에서 API를 계산하는 방법  [Stud_PE] – [Functions] – [ADVAPI32.dll] – [RegQueryValueExW] E-mail : isc0304@naver.com Writing by Ilsun Choi 18
  • 19. IMAGE_IMPORT _BY_NAME 0x00007CA2 9. IAT에서 API를 계산하는 방법  IAT 호출 과정 E-mail : isc0304@naver.com Writing by Ilsun Choi 19 IMAGE_THUNK _DATA32 0x000076CC IMAGE_IMPORT _DESCRIPTION Name : ADVAPI32.dll 이와 관련된 자세한 사항을 보려면 코드를 직접 분석 해보면 된다.  http://blog.naver.com/isc0304/220388240818 Export Table은 IAT와 유사하여 IAT를 익히면 자연히 알 수 있다.
  • 20. 참고문헌  리버싱 엔지니어링 바이블, 강병탁 지음 E-mail : isc0304@naver.com Writing by Ilsun Choi 20