System Hacking/windows

VirtualProtect

zz! 2025. 8. 19. 10:16
728x90

4개의 인자를 가지고, 특정 메모리 영역의 실행 권한을 변경해주는 함수이다.

BOOL WINAPI VirtualProtect (
	_In_ LPVOID lpaddress, # 권한을 변경할 메모리 영역의 시작 주소
    _In _SIZE_T dwSize, # 변경할 크기
    _In_ flNewProtect, # 변경할 속성 값
    _Out_ PDWORD lpflOldProtect, # 이전 값 저장 (쓰기 가능한 영역)
);

 

간단한 예제 코드

#include <Windows.h>
#include <stdio.h>

int main() {
	DWORD old;
	unsigned char code[] = { 1, 2, 3, 4 };

	VirtualProtect(code, sizeof(code), PAGE_EXECUTE_READWRITE, &old);

	printf("실행 완료!\n");
	return 0;
}

PAGE_EXECUTE_READWRITE -> 읽기, 쓰기, 실행 모두 가능하게 하는 설정이다.

 

Windbg로 확인해보면 다음과 같다.

                                     
Mapping file section regions...
Mapping module regions...
Mapping PEB regions...
Mapping TEB and stack regions...
Mapping heap regions...
Mapping page heap regions...
Mapping other regions...
Mapping stack trace database regions...
Mapping activation context regions...

Usage:                  Stack
Base Address:           0092d000
End Address:            00930000
Region Size:            00003000 (  12.000 kB)
State:                  00001000          MEM_COMMIT
Protect:                00000004          PAGE_READWRITE
Type:                   00020000          MEM_PRIVATE
Allocation Base:        00830000
Allocation Protect:     00000004          PAGE_READWRITE
More info:              ~0k

READWRITE 권한만 있었다가 해당 함수가 실행이 된 후 다시 살펴보면

Mapping file section regions...
Mapping module regions...
Mapping PEB regions...
Mapping TEB and stack regions...
Mapping heap regions...
Mapping page heap regions...
Mapping other regions...
Mapping stack trace database regions...
Mapping activation context regions...

Usage:                  Stack
Base Address:           0092f000
End Address:            00930000
Region Size:            00001000 (   4.000 kB)
State:                  00001000          MEM_COMMIT
Protect:                00000040          PAGE_EXECUTE_READWRITE
Type:                   00020000          MEM_PRIVATE
Allocation Base:        00830000
Allocation Protect:     00000004          PAGE_READWRITE
More info:              ~0k

EXECUTE권한이 있다. 쉘코드 실행이 가능하다는 것..

아래처럼 인자값 하고 rop  체인 구성하면 되겠다.

728x90