PE구조 분석-메모장
-PE구조 정리 : http://kaekpiteoseu.tistory.com/category/%E3%80%8E%EB%A6%AC%EB%B2%84%EC%8B%B1%E3%80%8F -
PE구조에 대해서 공부했으니 메모장.exe파일을 이용해 확인해 보겠습니다.
DOS Header
DOS Header부분은 색칠된 부분입니다.
PE파일이 exe파일인것을 알 수 있으며
NT Header의 시작주소가 0x000000E8[리틀엔디언방식]인것을 알 수 있습니다.
DOS Stub
NT Header의 시작주소가 000000E8인것으로 보아 이곳까지가 DOS Stub 영역인것을 알 수 있습니다. 내용을 보면 "이 프로그램은 도스모드로 실행할 수 없다" 라고 적혀있습니다. DOS모드[16bit]로 실행할시 저 문장이 출력됩니다.
NT Header
NT Header의 첫번째 멤버입니다. PE파일인 경우 50450000[PE00]으로 고정되어 있습니다.
NT Header의 두번째 멤버입니다.
i386 즉 32bit 에서 동작하며[EC-ED], 섹션이 5개가 존재합니다.[EE-EF] 속성값 부분은 0102인데 32bit 기반이며 실행가능한 파일이라고 해석됩니다.[FE-FF]
NT Header의 3번째 멤버입니다. 값이 좀 많은데 여기는 주소관련 내용이 들어있습니다.
프로그램의 시작주소 : 0001B550
파일로딩시작주소 : 00400000
메모리에서 섹션 최소 단위 : 00001000
파일에서 섹션 최소 단위 : 00000200
메모리에 로딩됬을때 파일 크기 : 0003F000
PE헤더의 크기 : 00000400
Section Table[Section Header]
섹션이름 : .text[1E0-1E7]
메모리에서의 섹션크기 : 0001B0DC
메모리에서의 섹션시작주소 : 00001000
파일에서의 섹션크기 : 0001B200
파일에서의 섹션시작주소 : 00000400
파일속성 : 60000020 = 실행가능하고 읽기가능한 섹션코드를 포함하고 있다라는 의미를 가집니다.
종류가 많으니 .text만 하겠습니다.
Section
Section Table의 정보로 보아 400부터 1B200까지가 .text 섹션의 영역입니다. 안에는 기계어로 된 코드가 담겨있습니다.
DOS Header[메모리 할당시]
Immunity Debugger를 이용했습니다. Memory map에 들어가 Dump를 보면 됩니다.
주소가 바뀌긴 했지만 내용의 변화는 없습니다. 크기도 40 그대롭니다.
DOS Stub[메모리 할당시]
Hex 에디터로 열었을때와 같습니다. 길어서 다출력은 못했지만요.
NT Header[메모리 할당시]
이곳도 똑같습니다.
Section Table[메모리 할당시]
여기도 똑같습니다.
Section[메모리 할당시]
메모리가 할당됬을시에 NT Header의 설정대로 메모리에 올라갔을땐 .text의 시작주소가 400[파일상태일때 .text섹션이 위치한 번호]번이아닌 1000번인걸 확인할 수 있습니다. 그리고 사이즈가 1B0DC[메모리에 올라갔을때 크기]가아닌 1C000인데 이유는 NT Header의 값중 메모리에서 섹션의 최소단위가 1000단위로 끊어지게 셋팅되어 있기 때문입니다.