15,471
社区成员
发帖
与我相关
我的任务
分享
#define _WIN32_WINNT 0x0500 // PKBDLLHOOKSTRUCT
#include <windows.h>
//设置g_hWnd共享,禁止dll拷贝g_hWnd
#pragma data_seg("MyHook")
HWND g_hWnd = NULL; //窗口句柄
#pragma data_seg()
#pragma comment(linker,"/section:MyHook,RWS")
HHOOK g_hlowKeyHook = NULL; //低级键盘钩子句柄
HHOOK g_hMouse = NULL; //鼠标钩子句柄
HHOOK g_hKeyboard = NULL; //键盘钩子句柄
//屏蔽所有鼠标消息
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
return 1;
}
//屏蔽所有键盘消息(不包括功能键)
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (wParam == VK_F8) // 后门
{
SendMessage(g_hWnd, WM_CLOSE, 0, 0); //发送关闭主窗体消息
//::MessageBox(NULL,"触发钩子后门程序,正在卸载钩子~~关闭程序","提示",MB_OK);
UnhookWindowsHookEx(g_hlowKeyHook); //卸载低级键盘钩子
UnhookWindowsHookEx(g_hMouse); //卸载鼠标钩子
UnhookWindowsHookEx(g_hKeyboard); //卸载键盘钩子
}
else
return 1;
}
//低级键盘钩子
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
bool isClick = false;
PKBDLLHOOKSTRUCT LowKey = NULL; //该结构体包含底层键盘输入事件的信息
if (nCode == HC_ACTION) //HC_ACTION 表示有消息
{
LowKey = (PKBDLLHOOKSTRUCT)lParam;
switch (wParam)
{
case WM_KEYDOWN: isClick = 0; break;
case WM_SYSKEYDOWN:
case WM_KEYUP:
case WM_SYSKEYUP:
{ // 屏蔽Win
isClick = (LowKey->vkCode == VK_LWIN) || (LowKey->vkCode == VK_RWIN) ||
//屏蔽Alt+F4
((LowKey->vkCode == VK_F4) && ((LowKey->flags & LLKHF_ALTDOWN) != 0)) ||
// 屏蔽Alt+Tab
((LowKey->vkCode == VK_TAB) && ((LowKey->flags & LLKHF_ALTDOWN) != 0)) ||
// 屏蔽Alt+Esc
((LowKey->vkCode == VK_ESCAPE) && ((LowKey->flags & LLKHF_ALTDOWN) != 0)) ||
// 屏蔽Ctrl+Esc
((LowKey->vkCode == VK_ESCAPE) && ((GetKeyState(VK_CONTROL) & 0x8000) != 0));
break;
}
default:
break;
}
}
if (isClick)
return 1;
else
CallNextHookEx(g_hlowKeyHook,nCode,wParam,lParam); //传给下一个钩子
}
//安装钩子
void SetHook(HWND hWnd)
{
g_hWnd = hWnd; //越后安装的钩子,越先获得控制权
//安装低级键盘钩子 优先级3
g_hlowKeyHook = SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,GetModuleHandle("GHookDll"),0);
//安装键盘钩子 优先级2
g_hKeyboard = SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("GHookDll"),0);
//安装鼠标钩子 优先级1
g_hMouse = SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle("GHookDll"),0);
}
LIBRARY GHookDll
EXPORTS
SetHook @2
BOOL CGlobalHookDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
HINSTANCE hInst;
hInst = LoadLibrary("GHookDLL.dll"); //动态加载dll
typedef void (*SetHookProc)(HWND hWnd);
SetHookProc SetHook = (SetHookProc)GetProcAddress(hInst,"SetHook");
SetHook(m_hWnd);
// IDM_ABOUTBOX must be in the system command range.
//...................省略
return TRUE; // return TRUE unless you set the focus to a control
}