Profile

youngsouk

youngsouk

PE IMAGE SWITCHING

1. 스위칭 할 exe 파일 전체 읽어오기 - CreateFile(), ReadFile()을 통해서

2. 스위칭 될 exe CreateProcess()를 통해 실행

3. GetThreadContext()로 2번에서 생성한 프로세스의 정보(PEB)를 이용해 IMAGEBASE 구하기

4. 1번에서 얻어온 PE헤더를 바탕으로 IMAGEBASE를 구한다.

5 - 1. 3번과 4번에서 얻어온 IMAGEBASE를 비교해서 같으면 ZwUnmapViewOfSection()을 이용해 2번과정에서 실행된 이미지 언맵핑

6 - 2. 다르면 3번에서 얻은 PEB에 IMAGEBASE를 수정한다.

7. VirtualAllocEx()를 통해 IMAGEBASE로부터 이미지 크기만큼 할당

8. PE 헤더정보 맵핑 - WriteProcessMemory() 이용

9. PE 헤더의 IMAGE_SECTION_HEADER를 통해 섹션을 맵핑 - WriteProcessMemory()이용

10. 다시한번 GetThreadContext()로 메인 스레드의 CONTEXT를 구한다.

ntdll.RtlUserThreadStart() API가 호출이 된 뒤 Eax의 값으로 가게되므로

11. Eax를 스위칭 할 exe의 EP코드로 변경

12. ResumeThread()로 실행

 

 

디버깅 방법은 스위칭 될 exe의 EP의 코드를 무한 반복이 되게 한 후에 attach 해 디버깅한다.

'윈도우' 카테고리의 다른 글

악성코드 분석 도구 모음  (0) 2019.12.08
Debug Blocker  (0) 2019.11.06
자기 자신을 자식 프로세스를 생성시키는 프로그램 디버그  (0) 2019.11.04
Service Process 디버깅  (0) 2019.11.04
SEH 예외 처리  (0) 2019.10.31