HOOK DLL注入的问题

小小爬虾 2013-02-27 09:24:05
编写了一个用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));
}


把Test_Hook_Dll.lib和Test_Hook_Dll.dll都拷贝到执行程序的目录下,执行程序(MFC EXE Dialog)调用DLL
#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);
}


执行结果,也显示了弹出框 Sethook success,但查看记事本的进程,没有发现我的Test_Hook_Dll.dll模块........这到底哪里出错了?
...全文
256 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
小小爬虾 2013-02-28
  • 打赏
  • 举报
回复
to fishion 还得麻烦下,请问为什么要这么做呢?我已经在执行程序中添加了#pragma comment(lib,"Test_Hook_Dll.lib"),难道还不够吗?
fishion 2013-02-28
  • 打赏
  • 举报
回复
#pragma data_seg( ".HookGetMsg") HINSTANCE g_hInstance = NULL; // 模块实例句柄 HHOOK g_hHook = NULL; // 钩子句柄 #pragma data_seg() #pragma comment(linker,"/section:.HookGetMsg,rws")
小小爬虾 2013-02-28
  • 打赏
  • 举报
回复
to zhao4zhong1 谢谢提供网址。 您能指出我这个程序里到底哪儿出错了吗?
小小爬虾 2013-02-28
  • 打赏
  • 举报
回复
to heler_kx: 我不是用Task Manager看的,是用能够查看进程中有哪些模块的专用进程管理器看的。 您说我这个程序里面哪里有问题吗?
healer_kx 2013-02-28
  • 打赏
  • 举报
回复
你应该用Process explorer, 【procexp.exe, 是MS自己提供的工具】 而不是用Task Manager看。
赵4老师 2013-02-28
  • 打赏
  • 举报
回复
小小爬虾 2013-02-28
  • 打赏
  • 举报
回复
TO fishion: 该怎么设置呢?能讲一讲原理和方法吗?
赵4老师 2013-02-28
  • 打赏
  • 举报
回复
在研究自己为什么错之前最好先研究别人是怎么对的。
majia2011 2013-02-28
  • 打赏
  • 举报
回复
hHook =::SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC)MyProc, hInst,dwThreadId); hInst句柄错了,而且是错了2次,自己想想,怎么错了2次,呵呵呵
小小爬虾 2013-02-28
  • 打赏
  • 举报
回复
to fishion: 经过测试,似乎还是不行哦....
fthislife 2013-02-28
  • 打赏
  • 举报
回复
我自己写了个工具,可以查看得到,不过这里上传不了
fishion 2013-02-27
  • 打赏
  • 举报
回复
hHook应该得设置成共享段

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧