알쓸전컴(알아두면 쓸모있는 전자 컴퓨터)

[reversing] PE 헤더 분석 (1) 본문

리버싱

[reversing] PE 헤더 분석 (1)

백곳 2018. 5. 3. 22:40

PE 헤더 분석 (1)


PE (Portable Excutable) 포맷은 윈도우에서 사용되는 실행 가능한파일 형식을 말합니다. 하나의 실행파일을 다양한 운영체제에서 실행할 수 있다는 의미로 ‘이식 가능한 실행파일(PE)’라는 이름이 붙었습니다. 일반적으로 잘 알려진 exe, dll, obj,sys 등의 확장자를 가진 파일들이 여기에 해당되구요. 유닉스의 실행파일 형식인 COFF(CommonObject File Format)을 기반으로 만들어졌습니다.


PE를 구성하는 요소들은 각각 구조체의 형태를 가지고 있습니다. 이런 요소들은 크게묶어 두 부분으로 볼 수 있습니다. 하나는 헤더, 하나는 섹션입니다.


PE 구조에서 헤더에는 파일을 실행할 때 맨 처음 시작해야 할 코드의 시작부분에 대한 정보, 프로그램이 구동 될 수 있는 플랫폼에 대한 정보 등 파일을 실행하는데 있어서 필요한 전반적인 정보들을 담고있습니다.


PE 구조에서 섹션에는 실제 프로그램을 구성하는 어셈블리 코드, 그리고 소스코드 내에서 선언한 전역변수나 static 변수들 등을 담고 있습니다. 


 ReverseMe1.zip


헤더 분석툴은  아래 툴을 사용 하였습니다. 


PEview.exe


참고 사항으로는 PEview 는 리틀 에디안으로 보기어려운것을 빅 에디안으로 바꿔 줍니다. 

또한 보기 좋게 PE 헤더를 파싱해 줍니다. 


일단 원본 데이터를 열어 보면 




위와 같은 HAX 코드가 보입니다. 


먼저 IMAGE_DOS_HEADER 부터 알아 보겠습니다. 



보면 보기 좋게 HEX 를 잘라 줍니다 .


IMAGE_DOS_HEADER 은 아래와 같은 구조체를 가지게 됩니다. 

winnt.h 라는 헤더파일로 부터 가지고 왔습니다. winnt.h라는 헤더에는 PE 구조에 있는 구조체들이 정의 되어있습니다.



설명을 하게 되면 


IMAGE_DOS_HEADER라는 구조체에서 우리가 눈여겨 봐야할 것은 'e_magic'이라는 필드와 'e_lfanew'라는 필드입니다. 


 'e_magic'  은 DOS 실행 파일 이라는것을 알려줍니다. 


e_lfanew 필드는 IMAGE_NT_HEADER의 시작 offset 값을 가지고 있습니다.


IMAGE_DOS_HEADER 은 과거 운영체제의 호환성 때문에 지금까지 헤더가 남아 있습니다. 

그 이후에 IMAGE_NT_HEADER 가 나오는데 해당 해더가 지금 사용 하는 운영체제가 프로그램 실행시 사용하게 되는 헤더 입니다. 


Comments