-
반응형
오늘은 재미삼아 PE구조를 공부하고 있다. 공부과정에서 정말 정리가 잘되있는 블로그(http://haerakai.tistory.com/18)에서 다루지 않은 일부 내용을 구글링후 정리해 본다. 그리고 다룬내용도 있다. ㅎㅎㅎ
1. IMAGE_FILE_HEADER's Time Date Stamp
이에 관련된 한글 문서가 없었지만, PEView를 설명하는 외국 문서에 있었다.
What is Time Date Stamp? It is a 32-bit value, giving the time and date the PE file was compiled. ... 즉 컴파일한 시점을 기록해 둔 것이다.
2. IMAGE_FILE_HEADER's SizeOfOptionalHeader
IMAGE_NT_HEADER의 IMAGE_FILE_HEADER 다음에 나오는 IMAGE_OPTIONAL_HEADER의 크기를 담은 것이다. 내 분석파일( svr.exe(자작 원격조종해킹툴))은 E0,224바이트이다. 그리고 이 구조체의 크기를 담는 부분이 있다는 의미는 IMAGE_OPTIONAL_HEADER의 크기가 가변적이라는 뜻이다.(왜??)
3. IMAGE_FILE_HEADER's Characteristics
여기에 담겨있는 값은 실행파일의 특성을 나타낸다.
0x0001
- 파일에 대한 재배치 정보가 없으므로, 기본 주소에 로드 되어야한다는 의미입니다.
0x0002
- 확인되지 않은 외부참조가 없고, 파일이 실행가능하다는 의미입니다.
0x0004
- COFF 라인 번호가 파일에서 삭제되었다는 의미입니다.
0x0008
- COFF 심볼 테이블 항목이 파일에서 삭제되었다는 의미입니다.
0x0010
- 적극적으로 워킹 셋을 정리해야한다는 의미입니다.
0x0020
- 응용 프로그램이 2GB보다 큰 주소를 처리할 수 있다는 의미입니다.
0x0080
- 단어의 바이트가 반대로 되어있다는 의미입니다.
0x0100
- 32비트 단어를 지원한다는 의미입니다.
0x0200
- 디버깅 정보가 해당 파일에 없고 다른 파일에 저장되어있다는 의미입니다.
0x0400
- 파일이 이동식 미디어에 있는경우, 그것을 복사하여 스왑파일에서 실행한다는 의미입니다.
0x0800
- 파일이 네트워크상에 있는 경우, 그것을 복사하여 스왑파일에서 실행한다는 의미입니다.
0x1000
- 파일이 시스템 파일임을 의미합니다.
0x2000
- 파일이 DLL 파일이며, 이것이 실행파일이지만 직접 실행할 수는 없다는 의미입니다.
0x4000
- 파일이 단일 프로세서 컴퓨터에서만 실행되어야 한다는 의미입니다.
0x8000
- 0x0080과 같은 의미 입니다.
출처: http://haerakai.tistory.com/18 [Haerakai's Lab]
너무 많아 복붙했다.ㅎㅎ 그리고 이 값들을 다 더한값으로 저장된다고 한다.
일반적으로는 0x101F가 저장되있다고한다.
내 프로그램은 0x102가 저장되었다. 즉 외부참조가 없으며 32비트를 지원한다 이게 끝이다.
4, 이제 아까 SizeOfOfficialHeader가 가리켰던 IMAGE_OFFICIAL_HEADER를 분석해보자.
블로그 저자는 이부분이 PE의 헤더에서 가장 중요하다고 한다.
필드가 많지만 특정부분만 살펴보자.
4.1. MAGIC
헤더의 맨 위 첫 부분에 e_magic이 있었다. 그리고 이것은 그 구조체의 시작을 의미했다. 이와 마찬가지로 이 구조체의 시작을 알리는 것이고 만약 32bit환경이면 0x10B가 저장되고 64bit이면 0x20B가 저장된다.
4.2. AddressOFEntryPoint
즉 요약하면 처음으로 실행 될 소스코드의 RVA(가상메모리(프로그램실행위해 생긴 메모리,32bit환경-> 4byte할당, 64->8byte할당)의 PE파일이 로딩된 주소로부터의 거리)이다. 너무 설명이 길기에 이것도 복붙한다. 해라카이님 감사합니다. ;)
4.3. IMAGEBASE
이 필드는 위에서 말했던 pe파일이 가상메모리에 로드된 첫 주소를 가지고 있다.
즉VA값을 가지며, RVA의 첫 주소를 가지고 있다.
보통 EXE파일은 0x00400000을, DLL은 0x00100000을 가지고 있다.
4.4.SectionAllignment
이건 다시 더 공부하기, 이해안됨 블로그기준 3.3.4이다.
반응형