Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "mem.h"
- #include <TlHelp32.h>
- void mem::Patch(BYTE* dst, BYTE* src, unsigned int size)
- {
- DWORD oldprotect;
- VirtualProtect(dst, size, PAGE_EXECUTE_READWRITE, &oldprotect);
- memcpy(dst, src, size);
- VirtualProtect(dst, size, oldprotect, &oldprotect);
- }
- void mem::PatchEx(BYTE* dst, BYTE* src, unsigned int size, HANDLE hProcess)
- {
- DWORD oldprotect;
- VirtualProtectEx(hProcess, dst, size, PAGE_EXECUTE_READWRITE, &oldprotect);
- WriteProcessMemory(hProcess, dst, src, size, nullptr);
- VirtualProtectEx(hProcess, dst, size, oldprotect, &oldprotect);
- }
- void mem::Nop(BYTE* dst, unsigned int size)
- {
- DWORD oldprotect;
- VirtualProtect(dst, size, PAGE_EXECUTE_READWRITE, &oldprotect);
- memset(dst, 0x90, size);
- VirtualProtect(dst, size, oldprotect, &oldprotect);
- }
- void mem::NopEx(BYTE* dst, unsigned int size, HANDLE hProcess)
- {
- BYTE* nopArray = new BYTE[size];
- memset(nopArray, 0x90, size);
- PatchEx(dst, nopArray, size, hProcess);
- delete[] nopArray;
- }
- uintptr_t mem::FindAddr(HANDLE hProc, uintptr_t ptr, std::vector<unsigned int> offsets)
- {
- uintptr_t addr = ptr;
- for (unsigned int i = 0; i < offsets.size(); ++i)
- {
- ReadProcessMemory(hProc, (BYTE*)addr, &addr, sizeof(addr), 0);
- addr += offsets[i];
- }
- return addr;
- }
- DWORD mem::GetProcId(const wchar_t* procName)
- {
- DWORD procId = 0;
- HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
- if (hSnap != INVALID_HANDLE_VALUE)
- {
- PROCESSENTRY32 procEntry;
- procEntry.dwSize = sizeof(procEntry);
- if (Process32First(hSnap, &procEntry))
- {
- do
- {
- if (!_wcsicmp(procEntry.szExeFile, procName))
- {
- procId = procEntry.th32ProcessID;
- break;
- }
- } while (Process32Next(hSnap, &procEntry));
- }
- }
- CloseHandle(hSnap);
- return procId;
- }
- uintptr_t mem::GetModuleBaseAddress(DWORD procId, const wchar_t* modName)
- {
- uintptr_t modBaseAddr = 0;
- HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, procId);
- if (hSnap != INVALID_HANDLE_VALUE)
- {
- MODULEENTRY32 modEntry;
- modEntry.dwSize = sizeof(modEntry);
- if (Module32First(hSnap, &modEntry))
- {
- do
- {
- if (!_wcsicmp(modEntry.szModule, modName))
- {
- modBaseAddr = (uintptr_t)modEntry.modBaseAddr;
- break;
- }
- } while (Module32Next(hSnap, &modEntry));
- }
- }
- CloseHandle(hSnap);
- return modBaseAddr;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement