HOOK DLL注入的问题
本帖最后由 kxltsuperr 于 2013-02-27 21:37:57 编辑 编写了一个用HOOK注入DLL的小程序,似乎是注入成功了,但是用XUETR和Windows优化大师的进程管理查看进程中的DLL模块,却没有发现我的dll模块...求各位大侠指点迷经...困扰了我一天了。(vc6.0+xp)。代码:
DLL模块代码(Win32 Dynamic-Link Library)
#include "stdafx.h"
//安装钩子函数
extern "C" __declspec(dllexport) BOOL SetHook(DWORD dwThreadId);
//钩子函数
extern "C" __declspec(dllexport) LRESULT CALLBACK MyProc(int nCode,WPARAM wParam,LPARAM lParam);
//钩子句柄
HHOOK hHook=NULL;
//当前DLL句柄
HINSTANCE hInst;
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
hInst=(HINSTANCE)hModule;
return TRUE;
}
// 安装钩子函数,dwThreadId是线程ID
extern "C" _declspec(dllexport) BOOL SetHook(DWORD dwThreadId)
{
//如果线程ID不等于0,安装钩子
if (dwThreadId != 0)
{
MessageBox(NULL, "DLL即将注入进程空间! ","DLL", MB_ICONINFORMATION + MB_OK);
// 安装指定线程的钩子
hHook =::SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC)MyProc, hInst,dwThreadId);
if (hHook != NULL)
return TRUE;
}
//如果进程ID等于0,卸载钩子
else
{
MessageBox(NULL, "DLL即将从进程空间中撤出!","DLL", MB_ICONINFORMATION + MB_OK);
return (::UnhookWindowsHookEx(hHook));
}
return TRUE;
}
// 钩子函数
extern "C" _declspec(dllexport) LRESULT CALLBACK MyProc(int nCode, WPARAM wParam, LPARAM lParam)
{
// 因为只是演示DLL注入,所以这里什么也不做,交给系统处理
return (::CallNextHookEx(hHook, nCode, wParam, lParam));
}
#pragma comment(lib,"Test_Hook_Dll.lib")
//按钮1---载入DLL
void CTest_Hook_Inject_ExeDlg::OnButton1()
{
PROCESS_INFORMATION info;
STARTUPINFO start={sizeof(start)};
// 为了简单起见,我在这里直接新创建了一个记事本进程,以便取得它的线程ID对其安装钩子,把我们的DLL注入到记事本进程中。
BOOL bRet = ::CreateProcess(NULL,TEXT("C:\\WINDOWS\\SYSTEM32\\notepad.exe"), NULL, NULL, TRUE, 0, NULL, NULL, &start, &info);
if (bRet != 0)
{
if(SetHook(info.dwProcessId)==TRUE)
::AfxMessageBox("Sethook success");
}
else
{
::AfxMessageBox("CreateProcess failed with error");
}
}
//按钮2---卸载钩子
void CTest_Hook_Inject_ExeDlg::OnButton2()
{
SetHook(0);
}
hInst句柄错了,而且是错了2次,自己想想,怎么错了2次,呵呵呵