首页
社区
课程
招聘
[求助]注入DLL,让DLL自己进行键盘钩子
发表于: 2007-8-30 18:46 10482

[求助]注入DLL,让DLL自己进行键盘钩子

2007-8-30 18:46
10482
写了一个win32的 HelloWorld 程序,然后把dll注入到HelloWorld
然后让dll来进行键盘钩子,dll中的代码如下
int WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved) {
        switch(fdwReason){
          case DLL_PROCESS_ATTACH:
                hkb=SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyboardProc,NULL, GetCurrentThreadId());
                //这里hkb!=NULL
        。。。。。

KeyboardProc就是简单地弹出一个messagebox
LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam){
        MessageBox(NULL,"key pressed","", MB_OK);
        return CallNextHookEx(hkb, nCode, wParam, lParam);
}

然后我在HelloWorld里按键,为什么没有任何MessageBox弹出呢?

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
2
我记得不能在DLL入口函数里面进行过多的操作, 你这里最好把 SetWindowsHookEx 单独出来.

-----------------------------------------------------------------------------------------
#pragma data_seg ()
         static HHOOK g_hKeyboardHook = NULL;
         static HINSTANCE g_hInst     = NULL;
#pragma data_seg ()
#pragma comment (linker, "/section:Shared, rws")

BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved) {
  switch(fdwReason){
    case DLL_PROCESS_ATTACH:
    g_hInst =   (HINSTANCE) hInstance; 
 。。。。。


然后再用2个输出函数:一个安装钩子,一个卸载钩子
MY_API BOOL HookKey ()
{
    ....
    g_hKeyboardHook  = ::SetWindowsHookEx(WH_KEYBOARD, KeyboardProc,  g_hInst,  NULL);
    ....

}


思路大体是这样的...
2007-8-30 19:30
0
雪    币: 196
活跃值: (96)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
多谢,这种方法需要 loader.exe 来执行 setHook, 我的dll已经通过 CreateRemoteThread(.. LoadLibrary....) 远程注入了,能不能直接让dll来执行setHook的?

或者说,如果我用loader.exe 来直接 setHook 的话,这个dll是不是就已经被目标exe加载了呢,也就不需要再CreateRemoteThread(.. LoadLibrary....) ?
2007-8-30 19:50
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
4
是啊, 你可以用loader远程插入,但是DLL的入口函数就不要让它做过多的事情了.

DLL中输出表的输出函数还是用来安装钩子嘛.
2007-8-30 20:13
0
雪    币: 196
活跃值: (96)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
非常感谢~ 问题解决~
2007-8-30 20:17
0
雪    币: 66
活跃值: (16)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
全局键鼠钩子为什么不用LowLevel的呢?
2007-8-30 20:34
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
7
也是哦,

SetWindowsHookEx (WH_KEYBOARD_DLL, LowLevelKeyBoardProc,g_hInst, 0);

这样好...
2007-8-30 22:07
0
雪    币: 196
活跃值: (96)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
8
不是全局钩子,只是钩住HelloWorld
2007-9-1 19:01
0
雪    币: 330
活跃值: (112)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
9
不是全局钩子 那DLL???
2007-9-1 22:31
0
雪    币: 125
活跃值: (35)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
注入时候需要目标进程句柄,这个东西好难悄悄的拿到........
2007-9-3 14:03
0
游客
登录 | 注册 方可回帖
返回
//