美文网首页
Hook简介

Hook简介

作者: eesly_yuan | 来源:发表于2015-07-27 01:12 被阅读188次
    概要
    • windows消息机制:os监听\捕捉事件->os向应用程序消息队列发送消息->应用程序利用getmessage获取消息队列里的一条消息->调用dispatchmessage分发消息调度给os->os调用回调函数
      hook:即钩子,用于监控消息在系统内部的传递,可以截获、处理windows消息,并调用预先定义好的功能性的回调函数。
    hook原理
    • 1、系统维护着一个钩子链,每安装一个hook都会再钩子链上添加一个元素,即一个指向钩子处理函数的指针;
    • 2、钩子链处理消息时候,采用先进后处理的方式,对于系统的每一个消息都会经过钩子链条上的每一个钩子;
    • 3、当消息类型与钩子监视的类型一致时,钩子会截获该消息,进行相应的处理,处理后可继续传递、可修改、或者阻止。
    • 钩子消息处理会影响系统性能,故无需使用时及时卸载; 卸载不需要按顺序;安装钩子的进程结束时,系统会自动卸载器安装的钩子
    api
    • 安装钩子
    HHOOK WINAPI SetWindowsHookEx( 
    _In_ int       idHook, //监视的消息类型
    _In_ HOOKPROC  lpfn,  //钩子处理函数地址
    _In_ HINSTANCE hMod, //钩子处理函数所在的模块,当前进程该项可写成NULL
    _In_ DWORD     dwThreadId //需要监视的线程ID,0为监视当前所有运行的线程
    );
    

    钩子处理函数调用过程:当进程A的线程准备向any进程发送消息时,如果消息正在被监视,则将被钩子截获,系统将检查该钩子的钩子函数所在的DLL是否已经被映射进程A的地址空间中。如果尚未映射,系统会强制将该DLL映射到进程A的地址空间。然后获得钩子函数在进程A的虚拟地址,并调用钩子函数。(这也是DLL注入的一种方式)

    • 其他api
    BOOL WINAPI UnhookWindowsHookEx(_In_ HHOOK hhk); //卸载钩子
    LRESULT WINAPI CallNextHookEx(  //传递消息给下一个钩子
    _In_opt_ HHOOK  hhk, 
    _In_     int    nCode, 
    _In_     WPARAM wParam, 
    _In_     LPARAM lParam);
    
    • 钩子处理函数
    LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam) {
        ...
        return CallNextHookEx(hhook, nCode, wParam, lParam); 
    }
    
    ref

    相关文章

      网友评论

          本文标题:Hook简介

          本文链接:https://www.haomeiwen.com/subject/rgjmqttx.html