zoukankan      html  css  js  c++  java
  • 程序驱动防止消息钩子入侵

    PS:明天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘。目前又不当COO,还是得用心记代码哦!

        很久以前就道知可以应用LoadLibraryExW来避免全局钩子入侵,说实话直一很恶感消息钩子。经曾想过在驱动层通过过hook NtUserSetWindowsHookEx来避免,但是我们是不并很好分区钩子不是不意恶的,而且windows统系本身也会应用,还有就是驱动层很多安全软件和rootkit都盯上了,稳定性是一个问题。后来我看到xuetr.exe也是在用户层hook自身的LoadLibraryExW的,我也想尽可能的保护好自己的程序,经过我亲身测试发当初win32非mfc程序hook这个函数很效有,mfc程序的debug本版也是没有问题,但是在mfc的release本版却失效了,后来意注到了内联汇编,我想多是被编译器化优了。曾向利用__declspec(naked)制止对内联汇编的化优,但是应用了__declspec(naked)以后我们不能应用return。经过很多折挫还是没能终最处理,如果有手高道知的话,点指一下,感谢。明天重要利用LoadLibraryExW滤过特定的dll,以下例子是"hook.dll"。

        代码如下:

        AntiHook.h:

        
    #ifndef _H_ANTIHOOK_
    #define _H_ANTIHOOK_

        #include "detours.h"

        #pragma comment(lib,"detours")

        typedef HMODULE (WINAPI* LoadLibraryExW_t)(LPCWSTR,HANDLE,DWORD);
    HMODULE WINAPI NewLoadLibraryExW(LPCWSTR lpLibFileName,HANDLE hFile,DWORD dwFlags);

        class CAntiHook
    {
    public:
     CAntiHook()
     {
        Hook();
     }

     ~CAntiHook()
     {
      UnHook();
     }

        private:

        每日一道理
    人的生命似洪水奔流,不遇着岛屿和暗礁,难以激起美丽的浪花。

     void Hook()
     {
      DetourTransactionBegin();
      DetourUpdateThread(GetCurrentThread());
      LoadLibrary("kernel32.dll");
      OldLoadLibraryExW = (LoadLibraryExW_t)GetProcAddress(GetModuleHandle("kernel32.dll"),"LoadLibraryExW");
      if (OldLoadLibraryExW != NULL)
       DetourAttach(&(PVOID&)OldLoadLibraryExW,NewLoadLibraryExW);
      DetourTransactionCommit();
     }

     void UnHook()
     {
      DetourTransactionBegin();
      DetourUpdateThread(GetCurrentThread());
      if (OldLoadLibraryExW != NULL)
       DetourDetach(&(PVOID&)OldLoadLibraryExW,NewLoadLibraryExW);
      DetourTransactionCommit();
     }

        public:

       static LoadLibraryExW_t OldLoadLibraryExW;

        };

        HMODULE WINAPI NewLoadLibraryExW(LPCWSTR lpLibFileName,HANDLE hFile,DWORD dwFlags)
    {
     if (wcsstr(lpLibFileName,L"hook.dll") != NULL)
      return 0;
     
     return CAntiHook::OldLoadLibraryExW(lpLibFileName,hFile,dwFlags);
    }

        #endif

        CAntiHook.cpp:

        
    #include "StdAfx.h"
    #include "AntiHook.h"

        LoadLibraryExW_t CAntiHook::OldLoadLibraryExW = NULL;

        应用时只要在全局定义CAntihook实例以可就了。

    文章结束给大家分享下程序员的一些笑话语录: 古鸽是一种搜索隐禽,在中国快绝迹了…初步的研究表明,古鸽的离去,很可能导致另一种长着熊爪,酷似古鸽,却又习性不同的猛禽类——犤毒鸟

  • 相关阅读:
    Linux下查看系统版本号信息的方法(转载)
    tomcat 启动超级慢
    新生代老年代GC组合
    GC 提前晋升
    Mysql 锁技术要点【转载】
    第39天:字符串连接、截取操作
    第38天:运算符、字符串对象常用方法
    第37天:小米手机图片展示
    第36天:倒计时:发动短信验证、跳转页面、关闭广告
    第35天:时钟效果
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3049857.html
Copyright © 2011-2022 走看看