VirtualAllocEx

VirtualAllocEx는 다른 프로세스 내에서 메모리를 할당하는 함수이며, 이 함수에 의해 할당된 메모리는 자동으로 0으로 초기화됩니다.

이 함수는 주로 인젝션 시 페이로드를 저장할 공간 확보에 사용됩니다.

LPVOID VirtualAllocEx(
  [in]           HANDLE hProcess,
  [in, optional] LPVOID lpAddress,
  [in]           SIZE_T dwSize,
  [in]           DWORD  flAllocationType,
  [in]           DWORD  flProtect
);
인자
설명
보편적인 값

hProcess

대상 프로세스 핸들

lpAddress

할당할 주소

NULL(OS가 자동 선택)

dwSize

할당 크기

flAllocationType

할당 타입

MEM_COMMIT | MEM_RESERVE

flProtect

메모리 보호 속성

PAGE_EXECUTE_READWRITE

Example

#include <windows.h>
#include <tlhelp32.h>
#include <iostream>
using namespace std;

LPVOID allocRemoteMemory(HANDLE hProc, SIZE_T dataSize) {
    LPVOID exec = VirtualAllocEx(
        hProc, NULL, dataSize,
        MEM_COMMIT | MEM_RESERVE,
        PAGE_EXECUTE_READWRITE
    );
    if (!exec) {
        wcout << L"Failed to get Memory buffer" << endl;
    }
    return exec;
}

HANDLE openProcessByPid(DWORD processId) {
    HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processId);
    if (!hProc) {
        wcout << L"Failed to get Process handle" << endl;
    }
    return hProc;
}

int main() {
    int pid = 1234;
    SIZE_T 
    HANDLE hProc = openProcessByPid(pid);
    LPVOID exec = allocRemoteMemory(hProc, dataSize);
    CloseHandle(hProc);
    return 0;
}

References

Last updated