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实例以可就了。

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

程序驱动防止消息钩子入侵相关推荐

  1. Win64 驱动内核编程-28.枚举消息钩子

    枚举消息钩子 简单粘贴点百度的解释,科普下消息钩子: 钩子是WINDOWS中消息处理机制的一个要点,通过安装各种钩子,应用程序能够设置相应的子例程来监视系统里的消息传递以及在这些消息到达目标窗口程序之 ...

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

    说明{      通过设置全局消息钩子来实现dll注入,然后窗体有相关消息请求的时候就会自动加载注入dll, 然后在入口处做处理就可以了.注入方式简单很多,比代码注入和lsp等注入都简单,就不解释了. ...

  3. 计算机病毒对消息钩子的利用与对抗

    作 者: dncwbc 时 间: 2011-10-07,23:57:15 链 接: http://bbs.pediy.com/showthread.php?t=141059 一.消息钩子的概念     ...

  4. Windows 反消息钩子(1)

    消息钩子在Windows编程中有着非常广泛的应用,它可以任意拦截Windows系统,这个以消息为驱动的系统中的绝大多数消息类型.一方面这给编程者带来了巨大的灵活性,另一方面也埋下了巨大隐患,大多数窃密 ...

  5. VC++获取病毒的消息钩子

    一.消息钩子的概念 1.基本概念 Windows应用程序是基于消息驱动的,任何线程只要注册窗口类都会有一个消息队列用于接收用户输入的消息和系统消息.为了拦截消息,Windows提出了钩子的概念.钩子( ...

  6. 关于Windows消息钩子的理解与测试项目

    前奏 近来一直在自学Windows Hook相关的知识,已经尝试多种注入方式.尤其对消息钩子方式很感兴趣,因为看到Spy++能够截获系统中绝大多数应用的消息流,就很想知道它的工作原理,打算制作属于自己 ...

  7. php怎么实现发送给指定用户,微信小程序 实现模板消息群发、发送给指定用户...

    1. 需求 最近在做一款拼课类小程序,大概需求就是分享课程页面给好友,好友参与达到一定数量后则拼课成功. 好友参与后会给分享者发送一条模板消息 参与人数满足后(拼课成功)会给分享者发送一条模板消息 管 ...

  8. windows全局消息钩子的一个BUG

    Windows操作系统全局消息钩子Bug 场景: Process A与Process B是同一个程序的两个实例, 1. 两个进程都设置了WH_CBT消息钩子,钩子的消息处理都在TSVulFw.dat模 ...

  9. 消息钩子使用教程(转)

    基本概念钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的.当消息到达后,在目标窗口处理函数之前处理它 ...

  10. windows消息处理过程及消息钩子

    应用层发消息: 发送消息过程 SendMessage(user32.dll)->SendMessageWorker,先检查有没有hook消息钩子,有的话调用CsSendMessage,进入消息钩 ...

最新文章

  1. 2021年大数据常用语言Scala(七):基础语法学习 条件表达式
  2. 把ct图像像素值转化为_数字图像概论与基础
  3. Stream流与Lambda表达式(四) 自定义收集器
  4. linux系统默认的环境变量path,Linux编程 12 (默认shell环境变量, PATH变量重要讲解)...
  5. 关于工业交换机技术的简单总结
  6. go语言代码连接mysql_【mysql】golang连接mysql操作示例增删改查
  7. Spring Cloud源码分析(二)Ribbon
  8. 全站HTTPS底层实现原理
  9. vue2饿了吗之路第一篇:开发环境准备
  10. Zookeeper案例之监听配置中心
  11. Android以太网框架情景分析之NetworkManagementService和netd交互深入分析二
  12. 学生如何提高专业英文阅读能力(转自施一公博客)
  13. 6 errors and 0 warnings potentially fixable with the `--fix` option.
  14. R Shiny module学习笔记
  15. 在Oracle官网下载并安装JDK然后配置环境变量
  16. 破解微信包工具之vscode
  17. 2019 年 Vue 高手特训营
  18. 创建您的第一个Substrate区块链
  19. R语言绘制频率直方图
  20. OFC2020论文笔记 Th1B.2 IEEE 50 Gbs EPON (50G-EPON)

热门文章

  1. Ubuntu16.04使用时的一些问题总结
  2. mysql查询最接近的记录
  3. VC6.0无法进入调试
  4. mysql 启动必须加-h_Windows 安装 nginx,MySQL 等软件并加入系统服务启动详细
  5. 实习成长之路:MySQL一: 一条SQL查询语句是如何执行的?
  6. 使用序列标注方法进行关系抽取的相关论文推荐
  7. gitee怎么看用户名_怎么优雅的写博客 Typora + picGo
  8. mysql 模糊匹配 拆字_一文,5 分钟搞明白 MySQL 是如何利用索引的!
  9. Android环绕地球动画,手机也能带你进入360°全景立体影音世界?---杜比全景声体验全接触...
  10. mysql用utf-8_为什么在MySQL中不建议使用UTF-8