16.12.17 공부

Hacking/System 2016. 12. 18. 00:44
반응형

1. PE파일

종류 

설명 

EXE 

실행 파일 

SCR 

실행 파일(화면보호기) 

DLL 

라이브러리 

OCX 

라이브러리(ActiveX) 

SYS 

시스템 드라이버 

OBJ 

오브젝트 파일 


- PE 파일은 파일에 존재할 때의 구조와 메모리에 로드된 후의 모습이 달라진다.

- 파일에서는 첫 바이트부터의 거리를 뜻하는 offset을 사용하고, 메모리에서는 VA(Virual Address, 가상주소)와 RVA(Relative Virtual Address, 상대적 가상주소)를 사용

- PE 파일이 메모리에 로드될 때 한 주소에 고정적으로 로딩되는 것이 아니기 때문에 상대주소 사용


* Alignment = 여러 내부 연산 등 처리상의 효율성을 위해 특정 단위로 간격을 맞춰주는 것

 - Section Alignment 값이 File Alignment 값보다 커서 메모리에 로드된 PE 파일의 사이즈가 파일 형태일 때보다 크다.

 - PE에서 남는 공간은 널바이트로 채워줌.



1) Image_DOS_Header와 DOS Stub

 = PE포맷의 시작 부분에 위치한 40바이트의 구조체

 = Windows가 아닌 DOS운영체제를 위한 것(DOS에서 PE파일이 실행되는 경우를 위해 만들어진 것)


* e_magic

 = PE파일임을 나타내주는 첫 2개의 바이트

 = MZ(5A4D)로 고정 (MZ가 아니면 PE파일로 인식 X)


* e_lfanew

 = NT Header가 시작되는 위치의 offset을 나타냄


* DOS Stub

 = DOS용 실행 코드 (DOS가 아니면 실행조차 되지 않음)


2) Image_NT_Headers

 = NT헤더임을 나타내는 시그니처인 "P E 0 0" 4바이트로 시작

 = FileHeader와 OptionalHeader를 멤버로 가지는 구조체


* FileHeader

 - Machine : 이 파일의 실행 대상 플랫폼(상수값으로 나타냄)

  ex) Intel386 = 0x014c // Intel64 = 0x0200 // ARM = 0x01c0

 - NumberOfSetions : 파일에 존재하는 섹션의 수(파일에 따라 섹션의 갯수는 달라질 수 있음)

 - SizeOfOptionalHeader : 바로 이어지는 Optional Header의 크기를 알려줌

 - Characteristics : PE 파일의 특성을 알려줌 -> 이를 통해 DLL인지, 실행파일인지 알 수 있음 (마지막 멤버, 최종 값은 해당되는 속성들의 OR 값으로 표시)

  ex) IMAGE_FILE_EXECUTABLE_IMAGE = 0x0002 // IMAGE_FILE_32BIT_MACHINE = 0x0100 // IMAGE_FILE_DLL = 0x2000


* Image_Optional_Header

 - Magic : Image_Optional_Header32인지 64인지 구분 (32 = 0x10B / 64=0x20B)

 - Address of EntryPoint : 파일이 메모리에 매핑된 후 코드 시작 주소를 나타냄 (PE 로더는 ImageBase 값에 이 값을 더해 코드 시작 지점으로 설정)

 - SectionAlignment, FileAlignment : 각각 메모리와 파일 상태에서의 정렬값 (각 섹션은 반드시 Alignment의 배수여야 한다)

 - Subsystem : 동작환경 정의

  ex) 시스템 드라이버 파일인 sys = 0x1

       GUI프로그램 = 0x2

       CLI 프로그램 = 0x3

 - DataDirectory : NumberOfRvaAndSizes를 통해 디렉토리 수를 정해줄 수 있으나 일반적으로 정형화된 16개의 디렉토리를 가짐.


  • Export Directory : DLL 등의 파일에서 외부에 함수를 공개하기 위한 정보들을 가짐
  • Import Directory : 프로그램 실행을 위해 Import하는 DLL 이름과 사용할 함수정보가 담긴 INT(Import Name Table), IAT(Import Address Table)주소 등의 정보가 들어있음.
3) Section Header
 = 실제 파일의 내용들이 존재하는 부분
 = 각 섹션별로 섹션의 정보를 담고 있는 헤더를 가지고 있다.

* VirtualSize, VirtualAddress = 메모리상에서의 크기와 주소
* SizeOfRawData, PointerToRawData = 파일 상에서의 크기와 offset

* Characteristics = 각 섹션의 특징을 알려줌

 ex) IMAGE_SCN_CNT_CODE       = 0x00000020 // 섹션이 코드를 포함

      IMAGE_SCN_MEM_EXECUTE = 0x20000000 // 섹션 실행 권한 존재

      IMAGE_SCN_MEM_READ     = 0x40000000 // 섹션 읽기 권한 존재

      IMAGE_SCN_MEM_WRITE    = 0x80000000 // 섹션 쓰기 권한 존재

반응형

'Hacking > System' 카테고리의 다른 글

PART3 쉘코드 원리와 작성(2)  (1) 2016.12.27
PART3 쉘코드 원리와 작성  (0) 2016.12.21
16.12.19 공부일지  (0) 2016.12.20
블로그 이미지

rootable

,