Detours HOOK 库 过滤LoadLibraryExW
Detours HOOK 库 Hook 过滤LoadLibraryExW
一丶简介
1.1 Detours库简介
Detours是微软提供的HOOK库.为我们Hook提供了方便.再也不用手撸 HOOK了.当然手撸比较好.可以锻炼.不过工作中要求效率.所以使用这个库.
这个库很强大.对于初学者来说也很简单.
1.2 使用Detours需要注意的问题
为什么说我们需要注意.很多博客也有说.但是往往都不太注意.比如我.一开始使用这个Hook库的时候各种崩溃.最后调试一下.发现了问题.
所以这里列举出来
1. 如果HOOK API 一定要注意调用约定
比如我们如果HOOK一个API.一定要注意它的调用约定.否则最后平栈的时候返回地址不对.就会引发错误.当时我就犯了这个错误.不过调试之后解决了.
比如你HOOK 自定义函数.的时候,如果是自己写的.没加调用约定的时候,那么就是C调用约定
2. 不要使用typedef 重新定义函数指针
为什么说不要使用.也不是不要使用.主要是当时比较急.解决棘手问题.
用了typedef. 导致函数地址不一样就出错了.所以能使用但是你需要了解一下.因为我工作原因.并没有深究.
二丶使用Detours的步骤
2.1下载Detours.以及使用
说到使用,我们必须要下载Detours.当然我会上传.你可以去CSDN下载.或者自己下载源码编译.我下了好多.也编译好了.会上传.直接下载即可.
首先使用Detours.
Detours有两个头文件.我们都包含即可.
#include "detours.h"
#include "detver.h"
还需要一个lib库.我们放在VS工程中即可.
#pragma comment(lib,"Detours.lib")
2.2使用Detours步骤很简单.都是固定API
如下:
void DetoursHook()
{
DetourRestoreAfterWith();
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(LPVOID&)PFnLoadLibraryExW, MyLoadLibraryExw);
DetourTransactionCommit();
}
总共五步
1.AfterWith()避免重复HOOK
2.TransactionBegin();开始HOOK
3.UpdateThread();更新到当前线程
4.DetourAttch();你要HOOK的函数的函数的地址,以及你自定义的函数的函数地址.
5.TransactionCommit();提交HOOK 这一步才是最终进行HOOK.
看一下第4步,DetourAttch();
这一个函数指针我们需要定义为下面这样.比如
LoadLibraryExW
static HMODULE(WINAPI *PFnLoadLibraryExW)(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags) = (HMODULE(WINAPI *)(LPCWSTR, HANDLE, DWORD))DetourFindFunction("KernelBase.dll", "LoadLibraryExW");
前边是LoadLibraryExW的函数指针定义. 后面的 = 是对他进行赋值.不过需要强转.
DetourFindFunction函数就是寻找函数地址.给一个模块名,给一个函数名他就去找.然后找到就返回.不过你需要强转进行赋值即可.
我们上面说了,既然要进行绑定.那么需要提供一个我们自己的函数才可以.
自己定义的函数如下:
HMODULE WINAPI MyLoadLibraryExw(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
{
if( wcscmp(lpLibFileName,TEXT("XXX) == 0)
{
return NULL; //return NULL的意思就是loadlibrary直接返回NULL就是没有加载,这一步就相当于拦截了.
}
return PFnLoadLibraryExW(lpLibFileName, hFile, dwFlags); //调用原函数,就是不做处理
}
2.2 HOOK 自定义 函数
上面说我们使用DetourFindFunction寻找API,其实我们HOOK自己的我们也可以写一个跟它一样的函数. 原理就是返回一个地址.
你知道你的函数地址在哪你都可以写成如下;
static HMODULE(WINAPI *PFnLoadLibraryExW)(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags) = (HMODULE(WINAPI *)(LPCWSTR, HANDLE, DWORD))0x40001200
假设你的函数地址是0x40001200,那么Detours就会去HOOK这个地方.
3.UnHOOK
有了HOOK,那么自然有UnHOOK(卸载HOOK).也很简单.不一一说了.直接贴完整代码.
#include "detours.h"
#include "detver.h"
#include <winnt.h>
using namespace std;
#pragma comment(lib,"Detours.lib")
static HMODULE(WINAPI *PFnLoadLibraryExW)(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags) = (HMODULE(WINAPI *)(LPCWSTR, HANDLE, DWORD))DetourFindFunction("KernelBase.dll", "LoadLibraryExW");
void DetoursUnHook();
void DetoursHook();
HMODULE WINAPI MyLoadLibraryExw(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
{
return PFnLoadLibraryExW(lpLibFileName, hFile, dwFlags);
}
void DetoursHook()
{
DetourRestoreAfterWith();
DetourTransactionBegin(); //开始
DetourUpdateThread(GetCurrentThread());//初始化当前线程
DetourAttach(&(LPVOID&)PFnLoadLibraryExW, MyLoadLibraryExw);//进行附加
DetourTransactionCommit();//进行HOOK
}
void DetoursUnHook()
{
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourDetach((void **)&PFnLoadLibraryExW, MyLoadLibraryExw);//撤销拦截函数
DetourDetach(&(LPVOID&)PfnFreeLibrary, NewFreeLibrary);
DetourTransactionCommit();//
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hModule);
DetoursHook();
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
//DetoursUnHook();
break;
case DLL_PROCESS_DETACH:
//DeleteCriticalSection(&testCS);
//DetoursUnHook();
break;
}
return TRUE;
}
HOOK 库打包下载链接:
链接:https://pan.baidu.com/s/1zhXqPfPhZdSWsipDuWVVQg
提取码:tcg5
Detours HOOK 库 过滤LoadLibraryExW的更多相关文章
- MinHook库的使用 64位下,过滤LoadLibraryExW
目录 一丶简介 1.minHook库的下载以及安装. 二丶使用MinHook库,过滤LoadLibraryExW 2.1编写X64测试程序. 2.2使用MinHook库 2.3完整HOOK代码 Min ...
- API HOOK库
API HOOK库 API HOOK有两种做法,一种是SetWindowHookEx,简单易用,但如果做其它的HOOK,如HOOK OpenProcess,就需要修改内存地址了,内存地址可以通过Wri ...
- 我的API HOOK库
API HOOK有两种做法,一种是SetWindowHookEx,简单易用,但如果做其它的HOOK,如HOOK OpenProcess,就需要修改内存地址了,内存地址可以通过WriteProcessM ...
- 【译】值得推荐的十大React Hook 库
十大React Hook库 原文地址:https://dev.to/bornfightcompany/top-10-react-hook-libraries-4065 原文作者:Juraj Pavlo ...
- php扩展trie_filter: 利用词库, 过滤敏感词
1. 先安装libiconv# wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz# tar -zxvf libiconv- ...
- share point 查询文档库 过滤 文档名称和上传时间
SPQuery query = new SPQuery(); CAMLBuilder.WhereBuilder whereBuilder = null; pageCount = ; if (!stri ...
- Inline Hook 钩子编写技巧
Hook 技术通常被称为钩子技术,Hook技术是Windows系统用于替代中断机制的具体实现,钩子的含义就是在程序还没有调用系统函数之前,钩子捕获调用消息并获得控制权,在执行系统调用之前执行自身程序, ...
- easyhook源码分析一
easyhook简要说明: easyhook是一个开源的hook库(http://easyhook.github.io/),其支持托管代码(.NET)和非托管代码(C/C++)hook,这里只分析了其 ...
- Microsoft Detours 2.1简介
http://blog.163.com/qcb_163/blog/static/9545466420117851038971/ Microsoft Detours 2.1简介 2011-08-0817 ...
随机推荐
- 全屏slider--swiper
这两年,这种滑动器技术在互联网产品介绍页设计上非常常用,最近某个项目需要这种设计,在网上找了一下,有个老外产的这种设计组件swiper已经非常成熟,原来这个东西设计初衷是pad之类的移动触摸交互设备, ...
- Eeffective C++ 读书笔记( 32-38)
条款三十二:确定你的public继承塑模出is-a关系 1.所谓最佳设计,取决于系统希望做什么事,包括现在和未来. 2.好的接口可以防止无效的代码通过编译,因此你应该宁可采取“在编译期拒绝企鹅飞行”的 ...
- css3 resize属性
http://www.w3school.com.cn/cssref/pr_resize.asp 实例 规定可以由用户调整 div 元素的大小: div { resize:both; overflow: ...
- Scrapy爬虫框架第五讲(linux环境)【download middleware用法】
DOWNLOAD MIDDLEWRE用法详解 通过上面的Scrapy工作架构我们对其功能进行下总结: (1).在Scheduler调度出队列时的Request送给downloader下载前对其进行修改 ...
- 谈谈对Javascript构造函数和原型对象的理解
对象,是javascript中非常重要的一个梗,是否能透彻的理解它直接关系到你对整个javascript体系的基础理解,说白了,javascript就是一群对象在搅..(哔!). 常用的几种对象创 ...
- SSM-SpringMVC-16:SpringMVC中小论注解式开发之访问方式篇
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 访问方式可以指定,打个比方,你通过get方式进入登陆页面,通过post发送ajax数据库校验或者post提交 ...
- Spark2.1.0——Spark初体验
学习一个工具的最好途径,就是使用它.这就好比<极品飞车>玩得好的同学,未必真的会开车,要学习车的驾驶技能,就必须用手触摸方向盘.用脚感受刹车与油门的力道.在IT领域,在深入了解一个系统的原 ...
- 关于<input type="date">这种取值的问题 【原创】
举例 <input type="date" id="date1"> var num = $("#date1").val(); a ...
- 常用JS对象的方法总结
String 方法 描述 charAt() 返回在指定位置的字符. charCodeAt() 返回在指定的位置的字符的 Unicode 编码. concat() 连接字符串. indexOf() 检索 ...
- 让Virtualbox复制出的虚拟机联网
http://www.williamsang.com/archives/215.html vi /etc/udev/rules.d/70-persistent-net.rules 注释掉eth0的相关 ...