windows 全局hook

最近有用到全局hook,其实可参考windows核心编程,全局hook也是Dll注入的一种方式。

首先,必须是一个Dll,可导出一个接口,在其中设置全局hook,类型为WH_GETMESSAGE(这样,应该是所有进程都会被hook到了),这样成功后,系统会把这个Dll注入到有getmessage的所有进程中,即会为每个进程隐式调用下loadlibrary。

然后每次getmessage时,都会回调进回调函数中,你就可以做一些自己的处理了。

当不需要hook时,可通过unhook,这样系统会为那些hook上的进程隐式调用freelibrary,卸载掉dll。

我们设 设置hook的进程为 P,hook Dll为D,则经试验发现,

即使是P退出前不调用 D的unhook,或P被强杀或挂掉,系统仍然会发现,仍然会帮着为那些hook上的进程调用freelibrary,也就是会进入到D的proc_detach中。

不过也会有些意外,偶尔有些进程也会未卸载掉D,比如chrome、svncache,或者需要点时间才能卸掉的其他进程 (但64位系统貌似没问题?)。

static HHOOK _myHook = NULL; 

LRESULT CALLBACK MyHookProc(
                             _In_  int nCode,
                             _In_  WPARAM wParam,
                             _In_  LPARAM lParam
                             )
{
    return CallNextHookEx(NULL, nCode, wParam, lParam);// HHOOK parameter is optional and ignored
}

bool hookStart()
{
    if (_myHook)
        return true;

    _myHook = SetWindowsHookEx(
        WH_GETMESSAGE,
        (HOOKPROC)&MyHookProc,
        GetMainDll(),
        0);

    if (NULL == _myHook)
    {
        assert(false && "[hookStart]hook false!");
        return false;
    }

    return true;
}

bool hookEnd()
{
    if (NULL == _myHook)
        return true;

    if (FALSE == UnhookWindowsHookEx(_myHook))
    {
        assert(false && "[hookEnd]unhook false!");
        return false;
    }

    _myHook = NULL;
    return true;
}
时间: 2024-12-20 15:17:03

windows 全局hook的相关文章

Windows API Hook

原文地址:http://blog.sina.com.cn/s/blog_628821950100xmuc.html 原文对我的帮助极大,正是因为看了原文,我才学会了HOOK,鉴于原文的排版不是很好, 又没有原工程例子源码下载,因此我决定对其重新整理,文章后面附有我测试时的工程源码下载地址. 注:我测试的环境为Win7+VS2008+MFC 原文出处,好像是这篇:http://blog.csdn.net/glliuxueke/article/details/2702608      //后来才看到

windows 全局安装 composer

Windows 系统: 下载 Composer 一.cmd 进入 PHP 的安装目录,例:E:\wamp\bin\php\php5.5.12,并依次执行下列命令安装最新版本的 Composer: php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');" php composer-setup.php php -r "unlink('composer-setup.php');

windows钩子 Hook示例

1.首先编写一个 win32 dll工程. #include "stdafx.h" int WINAPI add(int a,int b) { return a+b; } BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; } 在def文件添加显式导出: (没找到def文件需要添加) LIBRARY DESCRIPTION "AD

windows 全局安装 express 但无法命令行执行

从 express 的官网直接按照命令行全局安装 express 后, express 命令无法执行, 在 cmd 中显示 该命令行无法识别.基本可判断是 环境变量配置 这边没有搞定. 卸载 nodejs 重装 先配置npm的全局模块的存放路径以及cache路径(若默认安装则在 C 盘 , 在命令行中直接把下面的输入即可用.自定义安装则改成你自己设置的路径,) npm config set prefix "C:\Program Files (x86)\nodejs\node_global&quo

windows全局替换字体

Win+R,输入regedit,按HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Fonts路径打开,右侧双击Microsoft YaHei & Microsoft YaHei UI (TrueType)和Microsoft YaHei Bold & Microsoft YaHei UI Bold(TrueType),将msyh.ttc和msyhbd.ttc,即微软雅黑和微软雅黑粗体改成自己喜欢的字体.字体需选择

Windows Pre-commit hook for comment length Subversion

@echo off :: Stops commits that have empty log messages. @echo off setlocal rem Subversion sends through the path to the repository and transaction id set REPOS=%1 set TXN=%2 svnlook log %REPOS% -t %TXN% | findstr . > nul if %errorlevel% gtr 0 (goto

基于HOOK和MMF的Windows密码渗透技术

随着计算机与网络的普及,信息安全越来越成为人们所普遍关心的大事.密码的渗透与反渗透在此领域表现的愈演愈烈.本文深入分析了各个版本Windows密码的特点,尤其是针对windws2K/XP安全性提高的情况下,提出了获取windows密码的关键技术及方法.并进一步分析了windows钩子(Hook)和内存映像文件(MMF)的技术细节.在基于MMF的核心类CIPC中为钩子句柄在内存中的共享提供了方法,并且解决了线程间的同步问题.然后深入讨论了WM_COPYDATA消息的特点.接着分析了实例程序重要代码

windows Hook 消息分类

调用SetWindowsHookEx的DLL的模块实例句柄,它可以经由DllMain入口的第一个参数得到.HHOOK SetWindowsHookEx( int idHook,HOOKPROC lpfn,HINSTANCE hMod,DWORD dwThreadId);至于SetWindowsHookEx的第四个参数dwThreadId,才是你需要借由窗口句柄得到的窗口线程ID,你可以通过下面的代码获得:DWORD dwThreadID = GetWindowThreadProcessId(hw

windows hook (转)

http://blog.csdn.net/friendan/article/details/12226201 原文地址:http://blog.sina.com.cn/s/blog_628821950100xmuc.html 原文对我的帮助极大,正是因为看了原文,我才学会了HOOK,鉴于原文的排版不是很好, 又没有原工程例子源码下载,因此我决定对其重新整理,文章后面附有我测试时的工程源码下载地址. 注:我测试的环境为Win7+VS2008+MFC 原文出处,好像是这篇:http://blog.c