[C] 纯文本查看 复制代码
HANDLE g_handle = GetCurrentProcess();
//HANDLE hModule2 = OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId());
//
//LPVOID Pointer_GetVaService = (void*)GetProcAddress(GetModuleHandle(TEXT("卡7复制数据导出V1.11P.exe"), "EntryPoint");
//LPVOID ag_handle = (byte*)Pointer_GetVaService + 0x30E3A;
DWORD dwBaseAddr, JmpRet;
BYTE data[32] = {
0x36, 0x32, 0x39, 0x36, 0x34, 0x32, 0x30, 0x36, 0x41, 0x41, 0x46, 0x42, 0x43, 0x43, 0x45, 0x41,
0x41, 0x30, 0x36, 0x41, 0x41, 0x42, 0x45, 0x39, 0x46, 0x34, 0x34, 0x37, 0x32, 0x31, 0x45, 0x33
};
BYTE data2[6] = {0xE8, 0x00, 0x00, 0x00, 0x00};//原始字节,还原Hook用
BOOL WriteMem(LPVOID addr, LPVOID data, DWORD lenth)
{
DWORD old;
VirtualProtectEx(g_handle, addr, 1024, 64, &old);
BOOL result = WriteProcessMemory(g_handle, addr, data, lenth, 0);
VirtualProtectEx(g_handle, addr, 1024, (DWORD)old, &old);
return result;
}
void inlineHook(void* MyBase, void* My_code)
{
DWORD old;
VirtualProtectEx(g_handle, MyBase, 10, 64, &old);
UCHAR Mycode[0x5] = { 0xE9 };
*(INT*)(Mycode + 0x1) = (INT)My_code - (INT)MyBase - 0x5;
WriteProcessMemory(g_handle, MyBase, Mycode, 0x5, NULL);
VirtualProtectEx(g_handle, MyBase, 10, (DWORD)old, &old);
}
void wMacp() {
WriteMem((void*)(dwBaseAddr + 0x1CF68), data, 33);
WriteMem((void*)0x007F123A, data2, 6);//还原Hook
}
void _declspec(naked) Vp_GetBase() {
__asm {
push eax
mov eax, DWORD PTR SS : [ESP + 0x18]
mov dwBaseAddr, eax
pop eax
pushad
call wMacp
popad
mov esp, ebp
pop ebp
ret 4
}
}