ollydbg에서 점프할 주소에 빨간 줄 그어져 있는 것은 옵션 - cpu 탭 - Show jump path’, ‘Show grayed path jf jump is not taken’ , ‘Show jumps to selected command' 항목 체크
*PE(pe32) 파일은 window os에서 사용하는 실행파일 형식 32bit 형태를 의미, 64bit는 pe+ , pe32+
pe header(dos header ~ section header)에는 실행되기 위해 필요한 모든 정보가 담겨있다 어떻게 메모리에 적재되고 어디서부터 실행되어야 하고 어떤 dll이 로드되어야 하고 stack/heap의 크기 수많은 정보가 pe header에 구조체 형식으로 저장되어 있다.
pe는 파일로 저장되어있을 때와 메모리에 적제 되었을 때 주소 체계가 다른데 파일일 때는 오프셋을 사용하고 메모리에 있을 때는 VA(virtual address)를 사용한다.
섹션 헤더에 각 섹션에 대한 파일/메모리 에서의 크기, 위치, 속성, 등이 정의되어 있다.
pe헤더 내의 정보는 RVA로 된 것 이 많은데 pe파일(주로 dll)이 프로세스 가상 메모리에 로딩되는 순간 해당 위치에 다른 dll이 로딩되어 있을 수 있어 재배치가 일어나는데 그때 기준 위치만(image base)만 바꾸어 주면 문제없기 때문이다.
DOS Header
dos 파일 호환성 고려해 만들어서 pe 헤더 앞부분에는 기존 dos exe header를 확장시킨 image dos header구조체가 존재한다. 구조체 크기는 40이며 중요 멤버는 모든 PE 파일 시작 부분에 MZ라고 존재하는 e_magic과 NT header 구조체의 위치를 가리키는 e_lfanew 멤버이다.
DOS Stub
존재 여부는 옵션이며 크기도 일정하지 않다(없이도 실행 가능), 코드와 데이터의 혼합으로 이루어져 있다. dos에서 실행하면 해당 코드가 실행된다.
NT Header (NT Header 구조체 이름은 IMAGE_NT_HEADERS)
3개 멤버가 있다.
signature PE(0x50450000 "PE"00)
FileHeader와 Optional Header
FileHeader 주요 멤버는
machine //cpu별 고유값 intel x86 호환칩은 14c의 값을 같는다.(winnt.h) 파일에 정의되어있음.
NumberOfSection //섹션의 개수를 나타냄(PE 파일은 코드, 데이터, 리소스 등이 각각의 섹션에 나뉘어 저장됨)
SizeOfOptionalHeader //optional header 구조체 크기를 나타냄
Characteristics // 파일의 속성정보를 나타냄, 실행이 가능한지 DLL 파일인지 등의 정보들이 bit or 형식 2000h,0002h
TimeDateStamp //해당 파일의 빌드 시간
Optional Header(구조체 이름 image_optioanl_header32) 주요 멤버는
magic //magic 넘버는 10B(32bit) 값을 가짐 64bit은 20B
AddressOfEntryPoint //EP(entry point)의 RVA값을 가지고 있다.(프로그램 최초 실행 코드 시작 주소)
ImageBase //메모리에서 PE 파일이 로딩되는 시작 주소
SectionAlignment, FileAlignment // 파일과 메모리에서의 최소 단위 파일/메모리에서 섹션의 크기는 최소단위 배수
SizeOfImage //가상 메모리에서 PE IMAGE가 차지하는 크기를 나타냄
SizeOfHeader //PE헤더의 전체 크기 FileAlignment의 배수. 파일 시작에서 sizeofheader 옵셋 이후 첫 번째 섹션 위치
Subsystem //. sys,. exe,. dll 구분할 값(1. sys/2 Gui/ 3 Cui)
NumberOfRvaAndSize //optional header 마지막 멤버 datadirectory배열 개수 저장 #define으로 16으로 되었어도..
DataDirectory //iamge data directory 구조체의 배열로 각 항목마다 정의된 값을 가진다.
//datadirectory [0] = export directory, [1] import directory, [2] resource directory, [9] tls directory