首页
社区
课程
招聘
[旧帖] [求助]windows钩子函数 0.00雪花
发表于: 2010-8-11 21:51 1217

[旧帖] [求助]windows钩子函数 0.00雪花

2010-8-11 21:51
1217
DLL代码:

#include "stdafx.h"
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam,LPARAM lParam);

#pragma data_seg("Shared")
static HHOOK hkb=NULL;
HMODULE hins=NULL;
#pragma data_seg()
#pragma comment(linker,"/SECTION:Share,RWS")

BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                                         )
{
    return TRUE;
}

extern   "C"   _declspec(dllexport)BOOL installhook()
{

        hkb=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,hins,0);
        return TRUE;

}

LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)

{
        if(((DWORD)lParam&0x40000000)&&(HC_ACTION==nCode))
       
        {
                switch(wParam)
                {
                case '1':MessageBox(NULL,TEXT("你按下了1"),TEXT(""),0);break;
        case '2':MessageBox(NULL,TEXT("你按下了2"),TEXT(""),0);break;

        case '3':MessageBox(NULL,TEXT("你按下了3"),TEXT(""),0);break;
        }
        }
        LRESULT RetVal=CallNextHookEx(hkb,nCode,wParam,lParam);
        return RetVal;

}

EXE代码。。
#include "stdafx.h"
#include <windows.h>
#include <windowsx.h>
#include "resource.h"
#include "MainDlg.h"
typedef BOOL (CALLBACK *inshook)();

BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
        HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);
        HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);
                HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);
    }

    return FALSE;
}

BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
    return TRUE;
}

void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
    switch(id)
    {
        case IDC_OK:
                        static HMODULE hinstDLL;
                                inshook instkbhook;
                hinstDLL=LoadLibrary((LPCTSTR)"Hook.dll");
                                if(hinstDLL==0)
                                {MessageBox(NULL,TEXT("    CUOU"),TEXT(""),0);
                                       

                                }
                                else
                                {
                                        if (instkbhook=(inshook)GetProcAddress(hinstDLL,"installhook"))

                    {
                         MessageBox(NULL,TEXT(" 调用函数出错"),TEXT(""),0);//还就是在这里出错请指点下。。。
                    }
                    else{
                                        instkbhook();
                      }
                                }
        break;
        default:
                break;
    }

}

void Main_OnClose(HWND hwnd)
{
    EndDialog(hwnd, 0);
}

请把EXE和dll代码修改好。打出来 然后说明问题·
谢谢

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 73
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我不懂C,语法、表达上没法说,但是我看到这一段可能有问题。
switch(wParam)
    {
    case '1':MessageBox(NULL,TEXT("你按下了1"),TEXT(""),0);break;
        case '2':MessageBox(NULL,TEXT("你按下了2"),TEXT(""),0);break;

        case '3':MessageBox(NULL,TEXT("你按下了3"),TEXT(""),0);break;
        }
返回的是键盘的扫描码而不是一个单纯的数字代表的数字(不知道怎么说),打个比方,假如返回的是1,那么你说用户按了数字键1,那么如果返回的是123的话,难道用户按了键盘上的数字键一百二十三(123)?楼主是不是在测试的时候按数字键1但是没有出现你想要的提示?可能我的理解有误,呵呵。。
2010-8-11 22:25
0
雪    币: 81
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
if (instkbhook=(inshook)GetProcAddress(hinstDLL,"installhook"))

                    {
                         MessageBox(NULL,TEXT(" 调用函数出错"),TEXT(""),0);//还就是在这里出错请指点下。。。
                    }
2010-8-12 11:16
0
雪    币: 440
活跃值: (119)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
4
楼主可以在dll中设置断点调试,一步一步,看哪里出了问题。
2010-8-12 11:28
0
雪    币: 81
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
不是DLL出错,而是EXE调用DLL函数的时候出错了··
2010-8-12 14:39
0
雪    币: 73
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
不明白为什么这样表达,分开来不是更清晰更好么?
2010-8-12 15:44
0
游客
登录 | 注册 方可回帖
返回
//