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注入技术之消息钩子

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

利用DLL构建全局钩子

钩子是一种很神奇的东西,yefeic
  • shmilyhwyz
  • shmilyhwyz
  • 2014年08月12日 22:29
  • 955

函数钩子-Dll注入

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

不依赖于DLL就能正常工作的全局钩子

不依赖于DLL就能正常工作的全局钩子不知道大家是通过什么开始对钩子(Hook)有了解的,我是看过Jeffrey Richter的《WINDOWS 高级编程指南》(新版的中文译名为《Windows核心编...
  • xstring
  • xstring
  • 2004年03月23日 10:08
  • 981

DLL注入--设置消息钩子

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

Windows 钩子,基本的dll注入

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

安装全局消息钩子实现dll窗体程序注入

安装全局消息钩子实现dll窗体程序注入
  • u013761036
  • u013761036
  • 2016年10月26日 18:33
  • 1595

VC dll 注入之钩子注入

  C++只是个菜鸟,最近学习了下DLL注入,是通过hook方式来注入的。暂且不扯,新建个MFC dll,let's go。首先得需要几个函数:           HHOOK SetWindowsH...
  • ms2146
  • ms2146
  • 2010年07月09日 09:54
  • 7126

HOOK钩子技术2 内联钩子Inline HOOK 通过DLL注入

dll注入很有意思,它最大的优势在于一旦这个dll被注入,就可以访问宿主程序整个内存空间。因此直接的操作dll是可以达到间接操作目标宿主程序的作用。这次继续使用CILHook类,不过这次是在目标程序内...
  • wang471003247
  • wang471003247
  • 2015年05月02日 22:37
  • 1234

全局钩子为什么要用DLL 共享节

利用全局钩子  在别的进程窗口下 关闭test窗口 关于全局钩子为什么一定要在DLL中 2013-12-05 13:02使徒辟允382  分类:网站使用 | 浏览 66 次 ...
  • mfmfmmf1
  • mfmfmmf1
  • 2015年07月13日 19:39
  • 668
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DLL钩子
举报原因:
原因补充:

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