PC리버싱/PE구조

(05)PE구조 상세

Lamed_Dhhd 2020. 5. 20. 11:15
반응형

PE 헤더(PE Header) 실행 파일을 실행하기 위한 여러가지 정보가 기록이 되어 있으며, PE의 내용을 가지고 DLL를 로드하거나 여러가지 리소스를 할당하는 등 상당히 많은 정보가 PE 헤더에 저장되어 있습니다. 중요한 정보가 담긴 만큼, 이 영역의 일부가 누락되거나 손상되는 경우가 있으면 정상적으로 해당 파일을 실행할 수 없습니다. 파일을 백업해두고 HEX 코드 일부를 수정하시고 저장하셔서 실행을 하여 어떠한 결과를 초래하는지 보세요.

 

PE 구조는 차례대로 DOS Header, Stub Code, PE Header(File Header, Optional Header 포함), Section Header로 나뉘며 그 뒤에는 보통 코드를 포함하는 코드(.text) 섹션, 전역 변수 혹은 정적 변수를 포함하고 있는 데이터(.data) 섹션, 문자열이나 아이콘 같은 리소스 데이터를 포함하는 리소스(.rsrc) 섹션으로 나뉘어 등장합니다. 이러한 섹션은 1개 이상 존재하며, 섹션들 사이에 HEX 코드가 00(NULL)으로 나타나는 부분은 정렬 규칙에 의해 크기를 버리고 처리 효율을 높이기 위해 사용하는 영역으로 패딩(padding) 영역이라고 할 수 있습니다.

e_magic: e_magic 필드는 PE 파일이 맞는지 아닌지 체크할 때 사용되며, PE 파일 처음부터 2바이트까지 보시면 4D 5A(IMAGE_DOS_SIGNATURE)로 시작하는 부분이 e_magic이 차지하는 공간입니다. 여기서 MZ는 DOS의 설계자인 마크 즈비코프스키(Mark Zbikowski)에서 이름을 따온 것이며, 도스 헤더의 시작을 알리는 코드라 할 수 있습니다. PE 파일의 맨 앞에 위치한 e_magic은 MZ(4D 5A)라는 코드로 고정되어 있으며 가장 앞에서 2바이트를 읽어온 후에 IMAGE_DOS_SIGNATURE와 비교를 하여 서로 다르다면 그것은 PE 파일 구조가 아니라고 할 수 있습니다.

 

e_lfanew: e_lfanew 필드는 IMAGE_NT_HEADER의 시작 오프셋을 가지며, 고정되어 있는 값이 아닌 파일에 따라 가변적인 값을 지닙니다. 즉, PE 헤더(NT 헤더)의 주소는 도스 헤더의 e_lfanew 필드를 참조하여 알아낼 수 있다는 것이 됩니다.

stub영역입니다

이것의 용도는

16비트 호환용이면

32비트나 64비트용으로는 파일크기를 줄이기위해

없애도 상관없다

위에 파란줄을 16비트 어셈블리어다

16비트 디버거나 애뮬로 저파일을실행하면 나오는결과는

저뒤에 문자열인 This program cannot be run in DOS mode

이걸이용하면 16비트 32비트등 둘다 쓸수있지만

저걸하는사람이있을까

 

 IMAGE_NT_HEADER

https://dhhd-goldmilk777.tistory.com/136

 

(02)PE구조 설명을위한부가지식들

1 빅엔디안가 리틀엔디안 https://genesis8.tistory.com/37 리틀 엔디안 VS 빅 엔디안 먼저 둘을 비교하기에 앞서 엔디언이란 무엇인가? 엔디언(Endianness)은 컴퓨터의 메모리와 같은 1차원의 공간에 여러 개

dhhd-goldmilk777.tistory.com

이두값의 차이점은 리틀엔디안과 빅엔디안의차이점이다

50 45 00 00 이 signature이고 ascii로 PE이다

Machine

어떤 CPU냐

이것 참고

이제

AddressOFEntryPoint

PE로더가 메모리 매핑후 처음시작할 EP의 RVA값이다

ImageBase

로딩 시작주소로

EP찻는법은

ImageBase+AddressOFEntryPointer다

 

반응형