공부해요/리버싱_핵심원리

56. 디버깅 실습3 - PE Image Switching

yenas0 2025. 3. 22. 11:45
반응형

PE Image란?

PE 파일이 프로세스 메모리에 매핑된 모습

 

PE파일을 실행하면 유저부분에 프로세스가 올라간다.. 가상메모리에..

PE 이미지에 대해서PE 파일이랑 해서 파일이랑 메모리 이미지해서 사진이 교재에 있는데 이건 앞부분에서도 했고.. 운체때도 맨날 공부했던 내용이라 그거 보는게 나을 듯

 

아무튼 PE 파일은 파일 할당이랑 섹션할당이 다르고 각 섹션에서의 raw data size랑 가상 사이즈랑 달라서 형태가 달라짐

 

PE Image Switching

어떤 프로세스를 SUSPEND 모드로 실행한 후 다른 PE 파일의 PE 이미지를 매핑시켜 다른 프로레스 메모리 공가네서 실행하는 기법

알맹이를 바꾸는 느낌.. 껍데기 냅두고. 

 

 

예제파일

https://github.com/reversecore/book/tree/master/%EC%8B%A4%EC%8A%B5%EC%98%88%EC%A0%9C/08_%EB%94%94%EB%B2%84%EA%B9%85_%EC%8B%A4%EC%8A%B5/56_%EB%94%94%EB%B2%84%EA%B9%85%EC%8B%A4%EC%8A%B5_3_PE_Image_Switching/bin

 

book/실습예제/08_디버깅_실습/56_디버깅실습_3_PE_Image_Switching/bin at master · reversecore/book

리버싱 핵심원리 - 소스 코드 및 실습 예제. Contribute to reversecore/book development by creating an account on GitHub.

github.com

여기서 세개 다 다운받았다.

 

각각 실행시키면 이렇게 나온다. 이제 PE Image Switching 해서 fake안에 real을 넣을 거임.

 

일단 디버그미 어쩌구 해봄

첫번째 파라미터가 껍데기 될거 경로, 두번째 파라미터가 알맹이 될 경로임

일케 하면 되는디

 

안됨.

 오류뜸....

윈도우 11이라 안되는거같음. 아마 xp에서 해야 될 것 같다. 일단 지금없으니 패슷..

일케하고 process explorer에서 fake 프로세스를 확인해보면 실행되고 있는건 fake인걸로 나오는데 실제 화면은 real이 나옴. DebugMe3에서 fake의 PE 이미지를 제거하고 real의 PE image를 매핑시켜 실행한거인것!

 

디버깅1

PE image switching 기법 보기 위해서 올리디버거로 디버그미3.exe를 열어준다.

 

main함수를 확인해서 구조를 보면됨.

간단하게 보면

SubFunc_1() -> CreateProcess("fake.exe, CREATE_SUSPEND) -> subFunc_2() -> SubFunc_3() -> ResumeThread()이렇게 흘러간다. 그래서 API들 동작은 이미 있으니까 서브함수들만 디버깅 하면 된다.

 

SubFunc_1(): Win32 API 호출, real.exe파일을 통째로 메모리에 읽어들이기

SubFunc_2(): fake.exe 프로세스의 실제 매핑 주소 구하기, real.exe파일의 ImageBase구하기

SubFunc_3(): real.exe의 PE Image를 위한 메모리 할당, PE 헤더 매핑, EP 변경, 

 

 

디버깅2

PE Image Switching 기법이 적용된 fake.exe 프로세스를 디버깅하는 방법

어떻게? fake.exe프로세스에 real.exe파일이 매핑도기 전에 real.exe의 EP코드에 무한루프를 설치하는것. 그렇게 하면 real이 매핑된 fake가 resume될 때 EP 코드가 실행되면서 이미 설치된 무한 루프에 빠지고 이때 디버거의 attach기능으로 디버깅을 하면됨.

반응형

'공부해요 > 리버싱_핵심원리' 카테고리의 다른 글

54. 디버깅 실습1 - 서비스  (0) 2025.02.28
53. 고급 안티 디버깅  (0) 2025.02.09
52. Dynamic 안티 디버깅  (0) 2025.01.29
51. Static 안티 디버깅  (0) 2025.01.22
50. 안티 디버깅  (0) 2025.01.12