1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
| #include <Windows.h> #include <TlHelp32.h> #include <tchar.h>
HHOOK global_Hook;
BOOL GetFristModuleName(DWORD Pid, LPCTSTR ExeName) { MODULEENTRY32 me32 = { 0 }; me32.dwSize = sizeof(MODULEENTRY32); HANDLE hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, Pid);
if (INVALID_HANDLE_VALUE != hModuleSnap) { BOOL bRet = Module32First(hModuleSnap, &me32);
if (!_tcsicmp(ExeName, (LPCTSTR)me32.szModule)) { CloseHandle(hModuleSnap); return TRUE; } CloseHandle(hModuleSnap); return FALSE; } CloseHandle(hModuleSnap); return FALSE; }
LRESULT CALLBACK MyProc(int nCode, WPARAM wParam, LPARAM lParam) { return CallNextHookEx(global_Hook, nCode, wParam, lParam); }
extern __declspec(dllexport) void SetHook() { global_Hook = SetWindowsHookEx(WH_CBT, MyProc, GetModuleHandle(TEXT("Dll1.dll")), 0); }
extern __declspec(dllexport) void UnHook() { if (global_Hook) { UnhookWindowsHookEx(global_Hook); } }
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: { BOOL flag = GetFristModuleName(GetCurrentProcessId(), TEXT("InjectDll.exe")); if (flag == TRUE) { MessageBoxA(0, "hello Hook", 0, 0); } break; } case DLL_THREAD_ATTACH: { break; } case DLL_THREAD_DETACH: { break; } case DLL_PROCESS_DETACH: { UnHook(); break; } default: break; } return TRUE; }
|