리버싱

프로세스의 가상주소공간 VAS 검증을 위한 실습 x64dbg

이둥둥 2025. 2. 18. 14:49

지난 리버싱 포스팅에서 가상주소공간의 이론에 대해 알아보았고,

오늘은 실습을 통해 가상주소공간의 실제 구조가 어떻게 구성되어 있는지 알아보자

 

 

사용할 툴은 x64dbg

계산기 프로그램 calc.exe을 로드해 보자

(경로는 C:\Windows\System32\calc.exe)

 

 

프로세스의 부모자식 관계를 파악하기 위해서는 process explorer64/procexp64.exe를 사용할 수 있다

 

 

 

위에서 x64dbg안에 calc.exe를 실행했기 때문에

procexp64안에서도 x64dbg.exe의 하위에서 calc.exe가 위치해 있는 것이 확인된다.

 

 

 

 

x64dbg의 메모리탭 Memory Tab에 들어가서 calc.exe가 로드된 주소,

DLL 파일 로드 주소, 권한 등을 확인할 수 있음

calc.exe가 로드된 주소가 00007FF77E800000 라는게 확인되고 .text 등의 섹션들도 확인가능

 

 

 

 

각 섹션의 권한(protection)들도 모두 확인가능하고 

프로세스 실행에 필요한 추가 dll 라이브러리도 모두 함께 로드된 것을 알 수 있다.

 

calc.exe가 로드된 주소가 00007FF77E800000 라는것을 확인했는데

두 번째 계산기 프로그램을 실행하면 가상주소공간이 어떻게 되는지 살펴보자!

 


 

 

 

x64dbg와 calc.exe를 각각 실행해 보면 둘 다 vas가 동일하다

그런데

 

 

process explorer를 보면 PID가 전혀 다르고 있으므로 전혀 다른 프로세스이고

가상주소만 동일한 뿐 물리주소는 겹치지 않게 매핑되어 있다!

 

 

 

storage에 있는 calc.exe라는 프로그램이 두 개가 실행되면 같은 vas를 사용해도 

매핑테이블 덕분에 실제로는 메모리 상의 다른 물리주소에 로드되는 것!

 

그리고 두 프로세스가 동일한 라이브러리를 사용할 경우 중복으로 매핑할 필요 없이 

같은 위치를 공유하여 메모리를 효율적으로 사용할 수 있음