-
PE 재배치 (리버싱 핵심원리 따라하기)Hack/Reversing 2020. 4. 6. 09:10
PE 재배치
- PE 파일(EXE/DLL/SYS)이 프로세스 가상 메모리에 로딩될 때 PE 헤더의 ImageBase 주소에 로딩됩니다. DLL(SYS) 파일의 경우 해당 ImageBase 위치에 다른 DLL(SYS)파일이 로딩되어 있다면 비어있는 주소공간에 로딩됩니다.
* EXE : 00400000, DLL : 10000000, SYS : 10000
* Windows Vista 이후부터는 ASLR 기술로 인하여 EXE파일도 실행될 때마다 랜덤한 주소에 로딩됩니다.
- PE 재배치는 하드코딩된 주소를 프로세스에 로딩되어 랜덤하게 생성된 ImageBase주소에 맞추어 변경해주는 작업입니다.
- 간혹 악성코드 중에서 정상 파일의 코드를 패치한 후 해당 영역을 가리키는 Relocation Table을 수정하는 경우가 있습니다. (이해도가 부족하여 아직 잘 모르겠음)
- 실습
.reloc 섹션 삭제하기
: EXE 형식의 PE 파일에서는 Base Relocation Table이 실행에 큰 영향을 끼치지 않습니다. 일반적으로 제거 후 실행시 정상적으로 제거되며 reloc 섹션을 제거함으로써 PE 구조와 Hex editor 툴 사용이 익숙해질 것입니다.
1) reloc 섹션 헤더 정리
reloc 섹션은 1C8에서 시작하며, 섹션헤더 크기는 28이므로 1C8 ~ 1EF을 Hex Editor를 이용해서 0으로 덮어씁니다. (HxD의 'Fill selection...'기능을 이용하면 편리합니다.)
2) reloc 섹션 제거
.reloc 섹션의 시작 오프셋은 22000입니다. 여기서부터 파일 끝까지 .reloc 섹션 영역 입니다.
파일 끝까지 삭제합니다. (HxD의 'Delete' 기능 이용)
3) IMAGE_FILE_HEADER 수정
섹션을 제거했으니 IMAGE_FILE_HEADER의 - Number of Sections 항목을 수정해줘야 합니다.
현재 값이 3인데 하나 줄었으니 2로 바꿔 줍니다.
4) IMAGE_OPTIONAL_HEADER 수정
.reloc 섹션 제거 후 이미지 크기가 줄어들었습니다. 이미지 크기는 IMAGE_OPTIONAL_HEADER - Size of Image 값에 명시되어 있습니다. 이를 수정해줘야 합니다.
reloc 섹션의 virtualsize 값은 C이고, Section Alignment에 맞게 확장하면 2000이 됩니다. 따라서 Size of Image 값을 2000만큼 빼야합니다.
이제 파일은 정상 실행 될 것입니다.
이외에도 빈 섹션을 추가해보는 연습을 수행하면 PE 파일에 대한 지식과 경험이 풍부해집니다. 향후 PE 파일을 마음대로 조작할 수 있습니다.'Hack > Reversing' 카테고리의 다른 글
자식프로세스 디버깅 (0) 2022.02.03 레지스터 (0) 2012.08.03 WinDBG를 사용하여 VMware 커널 디버깅하기 (0) 2012.08.03 시스템 모니터링 툴 (0) 2012.08.03 UnPacker(언 패커) (0) 2012.08.03