반응형

Windows 4

IMAGE_DOS_HEADER 구조와 DOS 스텁

PE 파일은 몇십 파이트의 MS-DOS 스텁(Stub)으로 시작한다. MS-DOS 스텁은 예전의 MS-DOS MZ 포맷으로 PE에서는 크게 의미가 없다. 덤프에서 "This program cannot be run in DOS mode."라는 식별 가능한 문자열을 볼 수 있을 뿐이다. PE 프로그램을 예전 MS-DOS나 윈도우 3.1에서 실행하면 바로 이 문자열이 출력된다. 사실 MS-DOS 스텁은 위의 문자열을 출력하기 위한 조그만한 16비트 도스용 애플리케이션에 지나지 않는다. DOS 스텁은 64바이트의 IMAGE_DOS_HEADER 구조체와 해당 스텁 코드로 이루어진다. WinNT.h에는 IMAGE_DOS_HEADER 구조체가 다음과 같이 정의되어 있다. typedef struct _IMAGE_DOS..

리버싱 2021.01.25

RVA와 섹션

RVA는 디스크 상에 파일로 존재하는 PE의 파일 오프셋과 함께 로드되어 메모리의 이미지로 존재하는 PE의 메모리 번지 사이의 간극을 절충시켜주는 중요한 개념이다. 섹션은 PE 파일 전체를 구성하는 파일/메모리 블록의 단위다. RVA(상대적 가상 주소 - Relative Virtual Address) PE 파일 내의 파일 오프셋과 RVA는 관점이 다르다! PE 구조에서 번지에 관계된 값, 즉 가상 주소 공간 상의 번지들은 전부 RVA 개념으로 표현된다. RVA는 이미지가 메모리에 로드되었을 떄, 더 정확히 표현하면 해당 프로세스의 가상 주소 공간 내에 로드되었을 때 그 시작 주소에 대한 상대적 번지를 가리키는 개념으로, 메모리에서 PE의 시작 주소에 대한 상대적인 오프셋 값으로 생각할 수 있다. 파일 상..

PE 파일의 전체 구조

PE 파일 포맷은 COFF(Common Object File Format)라는 포맷을 계승한 파일 포맷으로, COFF의 확장판이라고 보면 된다. COFF 포맷은 MS에서 사용하던 이전 버전의 여러 실행 파일뿐만 아니라 라이브러리 파일, OBJ 파일에 대한 공통 포맷을 제공한다. 이 PE 파일 포맷은 64bit 경우 PE+라고도 하지만, 기본적으로 PE 파일 포맷을 바탕으로 한다. IMAGE_XX_XXXX 형태의 명칭들은 모두 WinNT.h 헤더 파일에 정의된 구조체다. PE 파일은 처음에 MZ로 시작하는 IMAGE_DOC_HEADER 구조체로 시작해서 도스와의 호환을 위한 코드인 도스 스텁을 담고 있다. 이 스텁 다음부터 실제 PE 포맷이 시작된다. 실질적인 PE 포맷의 시작은 IMAGE_NT_HEADE..

디버깅 환경

디버깅 가능한 환경이 6가지 있다. WinDbg Preview Windows Debugger (WinDbg) Kernel Debugger (KD) NTKD Console Debugger (CDB) NT Symbolic Debugger (NTSD) WinDbg Preview WinDbg Preview는 현대적인 비주얼, 빠른 윈도우, 본격적인 스크립팅 경험, 확장 가능한 디버거 데이터 모델 전면 및 중앙으로 구축된 WinDbg의 마지막 버전이다. WinDbg Preview는 WinDbg와 동일한 기본 엔진을 사용하므로 익숙한 모든 명령, 확장 및 워크플로는 이전과 동일하게 작동한다. 더 많은 정보는 Debugging Using WinDbg Preview 에서 보면된다. WinDbg WinDbg는 유저모드,..

반응형