Advertisement
Guest User

Untitled

a guest
Jun 10th, 2023
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.34 KB | None | 0 0
  1. #include <Windows.h>
  2.  
  3. #include <array>
  4. #include <iostream>
  5.  
  6. int main(int argc, char* argv[])
  7. {
  8.     std::array<unsigned char, 11> NtProtectVirtualMemoryBytes =
  9.     {
  10.         0x4C, 0x8B, 0xD1,               /*mov r10, rcx*/
  11.         0xB8, 0x50, 0x00, 0x00, 0x00,   /*mov eax, 0x50*/
  12.         0x0F, 0x05,                     /*syscall*/
  13.         0xC3                            /*ret*/
  14.     };
  15.  
  16.     auto* NtProtectVirtualMemoryStub{ VirtualAlloc(nullptr,
  17.         NtProtectVirtualMemoryBytes.size(),
  18.         MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE) };
  19.  
  20.     memcpy(NtProtectVirtualMemoryStub, NtProtectVirtualMemoryBytes.data(),
  21.         NtProtectVirtualMemoryBytes.size());
  22.  
  23.     using NtProtectVirtualMemoryFnc = NTSTATUS(NTAPI*)(HANDLE, PVOID*, SIZE_T*, ULONG, PULONG);
  24.     auto NtProtectVirtualMemory{
  25.         reinterpret_cast<NtProtectVirtualMemoryFnc>(NtProtectVirtualMemoryStub) };
  26.  
  27.     SIZE_T allocSize = 4096;
  28.     auto* testPage{ VirtualAlloc(nullptr, allocSize,
  29.         MEM_RESERVE | MEM_COMMIT, PAGE_READONLY) };
  30.  
  31.     DWORD oldPermissions{};
  32.     auto result{ NtProtectVirtualMemory(GetCurrentProcess(), &testPage, &allocSize,
  33.         PAGE_EXECUTE_READWRITE, &oldPermissions) };
  34.  
  35.     std::cout << "Result: " << std::hex << result;
  36.  
  37.     auto* testWrite{ "Some bytes" };
  38.     memcpy(testPage, testWrite, strlen(testWrite));
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement