DLL钩子

原创 2015年07月10日 09:47:33


// The following ifdef block is the standard way of creating macros which make exporting
// from a DLL simpler. All files within this DLL are compiled with the HOOK_EXPORTS
// symbol defined on the command line. this symbol should not be defined on any project
// that uses this DLL. This way any other project whose source files include this file see
// HOOK_API functions as being imported from a DLL, wheras this DLL sees symbols
// defined with this macro as being exported.
#ifdef HOOK_EXPORTS
#define HOOK_API __declspec(dllexport)
#else
#define HOOK_API __declspec(dllimport)
#endif

// This class is exported from the hook.dll
class HOOK_API CHook {
public:
    CHook(void);
    // TODO: add your methods here.
};

extern HOOK_API int nHook;

HOOK_API int fnHook(void);



// hook.cpp : Defines the entry point for the DLL application.

//

#include "stdafx.h"
#include "hook.h"
#include "windows.h"

#define WM_MOUSEHOOK WM_USER+6
#pragma   data_seg("Shared")
HHOOK glhHook = NULL;//安装的鼠标钩子句柄
HINSTANCE glhInstance = NULL;//DLL实例句柄
HWND glhDisplayWnd = NULL;
HWND glhPrevTarWnd = NULL;
#pragma   data_seg()
#pragma   comment(linker,"/SECTION:Shared,RWS")  

BOOL APIENTRY DllMain(HANDLE hModule,
    DWORD  ul_reason_for_call,
    LPVOID lpReserved
    )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}


// This is an example of an exported variable
HOOK_API int nHook = 0;

// This is an example of an exported function.
HOOK_API int fnHook(void)
{
    return 42;
}

// This is the constructor of a class that has been exported.
// see hook.h for the class definition
CHook::CHook()
{
    return;
}

LRESULT CALLBACK WINAPI MouseProc(int nCode, WPARAM wparam, LPARAM lparam)

{


    if (WM_LBUTTONDOWN != wparam) return 0;
    LPMOUSEHOOKSTRUCT ps = (LPMOUSEHOOKSTRUCT)lparam;
    //HWND hWnd = WindowFromPoint(ps->pt);
    HWND hWnd = ps->hwnd;//取目标窗口句柄
    PostMessage(glhDisplayWnd, WM_MOUSEHOOK, (WPARAM)hWnd, 0);
    //SendMessage(hWnd, WM_LBUTTONDBLCLK, (WPARAM)hWnd, 0);
    //if (nCode < 0)    
    return CallNextHookEx(glhHook, nCode, wparam, lparam);
    //MessageBox(NULL, TEXT("鼠标钩子"), TEXT("错误"), 0);
    //return 0;

}
//启动钩子
_declspec(dllexport) void StartHook(HWND hWnd)
{
    glhInstance = GetModuleHandle("hook");

    glhHook = SetWindowsHookEx(WH_MOUSE, MouseProc, glhInstance, 0); //全局钩子最后一个函数要为零

    glhDisplayWnd = hWnd;
}

//卸载钩子
_declspec(dllexport) void StopHook()
{
    //MessageBox(NULL,TEXT("卸载钩子"),TEXT("错误"),0);
    BOOL bResult;
    bResult = UnhookWindowsHookEx(glhHook);
    if (bResult)
    {
        glhDisplayWnd = NULL;
        glhHook = NULL;
    }
}

函数钩子-Dll注入

在应用层可以设置的钩子方法有许多种,其中经典的钩子是消息钩子,消息钩子分为两种,一种是系统级全局钩子,另外一种是线程级局部钩子,它们都是通过下面这一组函数来实现消息勾取,实现相对简单。设置钩子: Se...

Dll注入技术之消息钩子

转自:黑客反病毒 DLL注入技术之消息钩子注入     消息钩子注入原理是利用Windows 系统中SetWindowsHookEx()这个API,他可以拦截目标进程的消息到指定的DL...

利用DLL构建全局钩子

钩子是一种很神奇的东西,yefeic

Windows 钩子,基本的dll注入

Windows操作系统是基于钩子完成的消息传递与用户交互,它以事件驱动的方式运行。每一个窗口都拥有自己的消息队列,当外部设备触发消息时,消息被发送到系统消息队列,再有操作系统安排将消息发送到特定进程上...

DLL注入--设置消息钩子

通过设置消息钩子,达到和dll注入相同的目的,但这个方法与其他DLL注入方法又不一样,它不会把自己的DLL加载到目标进程,所以也就实现不来DLL的隐藏,这样很容易被杀软KILL掉,亲测360秒杀,但实...

DLL钩子原代码.e

  • 2010年06月09日 22:34
  • 2KB
  • 下载

键盘钩子动态dll(bcb)

  • 2013年12月30日 16:31
  • 4KB
  • 下载

使用DLL共享数据:用钩子记录键盘

做了好几天终于把这个键盘记录的钩子函数给做出来了。中间有好多小毛病值得注意: 对于钩子函数形如: Function HotKeyHook(Icode:integer;wParam:WPARAM;l...

利用钩子函数来注入DLL的一个具体应用:点击桌面不同图标,播放相应音符

最近看核心编程,看到DLL注入这一章,有一个Desktop Item Positon Saver(DIPS)的例子,这个例子是使用窗口挂钩来将一个DLL注入到Explorer.exe的地址空间中,来保...

[VB6+C-DLL]全局钩子

  • 2010年08月12日 14:19
  • 122KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DLL钩子
举报原因:
原因补充:

(最多只允许输入30个字)