🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
创建win32控制台程序 ```c++ // HookMessageBox.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <windows.h> //挂钩类 inline钩子 class MyHookClass { public: MyHookClass() { m_pfnOld = nullptr; ZeroMemory(m_bNewBytes, 5); ZeroMemory(m_bOldBytes, 5); } ~MyHookClass() { UnHook(); } /* * inline挂钩函数 * @param szModeleName 目标函数所在的模块名称 * @param szFuncName 目标函数名称 * @param pHookFunc 挂钩的地址 * @return */ BOOL Hook(char *szModuleName, char *szFuncName, PROC pHookFunc) { BOOL bRet = FALSE; do { m_pfnOld = GetProcAddress(GetModuleHandleA(szModuleName), szFuncName); if (!m_pfnOld) { break; } DWORD dwNum = 0; ReadProcessMemory(GetCurrentProcess(), m_pfnOld, m_bOldBytes, 5, &dwNum); //jmp 0xe9 m_bNewBytes[0] = '\xe9'; *(DWORD *)(m_bNewBytes + 1) = (DWORD)pHookFunc - (DWORD)m_pfnOld - 5; WriteProcessMemory(GetCurrentProcess(), m_pfnOld, m_bNewBytes, 5, &dwNum); bRet = TRUE; } while (FALSE); return bRet; } void UnHook() { if (m_pfnOld != nullptr) { DWORD dwNum = 0; WriteProcessMemory(GetCurrentProcess(), m_pfnOld, m_bOldBytes, 5, &dwNum); } } BOOL ReHook() { BOOL bRet = FALSE; if (m_pfnOld != nullptr) { DWORD dwNum = 0; WriteProcessMemory(GetCurrentProcess(), m_pfnOld, m_bNewBytes, 5, &dwNum); bRet = TRUE; } return bRet; } private: PROC m_pfnOld; //可恢复的 BYTE m_bOldBytes[5]; BYTE m_bNewBytes[5]; }; MyHookClass g_MsgHook; int WINAPI MyMessageBox( _In_opt_ HWND hWnd, _In_opt_ LPCTSTR lpText, _In_opt_ LPCTSTR lpCaption, _In_ UINT uType ) { g_MsgHook.UnHook(); MessageBoxW(hWnd, L"有罪的MessageBox", L"打的就是你", MB_OK); g_MsgHook.ReHook(); //CreateProcess(高危函数) //启动某个程序 你挂住了他 就可以让用户什么程序都启动不了 //但是 有360 return 0; } int _tmain(int argc, _TCHAR* argv[]) { //SetWindowsHookEx 他无法实现,他只支持一些窗口的操作 //高级运用 系统API级别的HOOK //MoveWindow FindWindow //感觉干货太多 接受不了 跳到某个地址去 //那么是不是我们把地址装了就OK了 //替换他的调用地址 就变成个了我们的了 MessageBoxW(nullptr, L"无辜的MessageBox", L"队长是我别开枪", MB_OK); g_MsgHook.Hook("user32.dll", "MessageBoxW", (PROC)MyMessageBox); MessageBoxW(nullptr, L"无辜的MessageBox", L"队长是我别开枪", MB_OK); g_MsgHook.UnHook(); return 0; } ```