Detours 劫持
在使用 Detours 劫持之前必须得拥有这两个东西:detours.h 和 detours.lib。
为了这两个东西我真的是弄了大半天,本着自己动手丰衣足食的思想:
我去 GitHub 克隆了一份来自己编译,对着网上的教程弄,在编译的时候就是各种 bug。
试了一次又一次,算了还是找别人编译好了的用吧!目前最新版本是 Detours 4.01 版。
拿到编译好的头文件和库后,我放到 VC6.0 相应的文件中去,结果在编程时发现头文件出错!
这时我就懵逼了,最后发现是因为 VC6.0版本太低导致的。因此最后便放到 VS2017 中去了。
说到这里,如果你不想自己动手尝试的话,这里给你编译好的 Detours 库。请点击下载
关于 Detours 里的函数发现网上并没有比较详细的介绍:这里就借鉴一下别人的博客吧!
这里我们同样来拦截两个函数:通常情况下代码是这样的:
#include "stdafx.h"
#include<detours.h>
#include<Windows.h>
#pragma comment(lib,"detours.lib") void HookOn();
void HookOff(); static int (WINAPI *OldMesssageBoxA)
(
HWND hWnd,
LPCSTR lpText,
LPCSTR lpCaption,
UINT uType
) = MessageBoxA; static int (WINAPI *OldMesssageBoxW)
(
HWND hWnd,
LPCWSTR lpText,
LPCWSTR lpCaption,
UINT uType
) = MessageBoxW; // 注意了,自定义函数得和被 HOOK 的函数一样,否则会发生异常。
int WINAPI MyFunction0
(
HWND hWnd,
LPCSTR lpText,
LPCSTR lpCaption,
UINT uType
); int WINAPI MyFunction1
(
HWND hWnd,
LPCWSTR lpText,
LPCWSTR lpCaption,
UINT uType
); BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
HookOn();
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
HookOff();
break;
}
return TRUE;
} void HookOn()
{
//开始事务
DetourTransactionBegin();
//更新线程信息
DetourUpdateThread(GetCurrentThread());
//将拦截的函数附加到原函数的地址上,这里可以拦截多个函数。
DetourAttach(&(PVOID&)OldMesssageBoxA, MyFunction0);
DetourAttach(&(PVOID&)OldMesssageBoxW, MyFunction1);
//结束事务
DetourTransactionCommit();
} void HookOff()
{
//开始事务
DetourTransactionBegin();
//更新线程信息
DetourUpdateThread(GetCurrentThread());
//将拦截的函数从原函数的地址上解除,这里可以解除多个函数。
DetourDetach(&(PVOID&)OldMesssageBoxA, MyFunction0);
DetourDetach(&(PVOID&)OldMesssageBoxW, MyFunction1);
//结束事务
DetourTransactionCommit();
}
// 调用被 HOOK 的函数可以用被 HOOK 函数的指针,不能用原函数。
int WINAPI MyFunction0(HWND hWnd,LPCSTR lpText,LPCSTR lpCaption,UINT uType)
{
return OldMesssageBoxA(NULL, "Hooking your MessageBoxA!", "Warming", MB_OKCANCEL);
} int WINAPI MyFunction1(HWND hWnd,LPCWSTR lpText,LPCWSTR lpCaption,UINT uType)
{
return OldMesssageBoxW(NULL, L"Hooking your MessageBoxW!", L"Warming", MB_OKCANCEL);
}
这段代码是在 VS2017 上生成的,我一般都是在虚拟机里运行的,所以需要进行一些设置:
调试 ---> Dll 属性 ---> C/C++ ---> 代码生成 ---> 运行库---多线程/MT,这样设置完后就可以了。
我们将生成的 dll 文件注入到记事本后,会看到这样:

Detours 劫持的更多相关文章
- 25.Detours劫持技术
Detours可以用来实现劫持,他是微软亚洲研究院开发出来的工具,要实现它首先需要安装Detours. 安装地址链接:https://pan.baidu.com/s/1eTolVZs 密码:uy8x ...
- windows、linux劫持技术
windows系统以下能够利用detours劫持 realse 模式劫持,调试的程序不能够 函数劫持能够实现的效果. 函数的劫持原理 我们怎样实现-detours detours是微软亚洲研究院出品 ...
- 传智播客C语言视频第一季(有效下载期为10.1-10.7,10.8关闭)
J:\传智播客_尹成_C语言从菜鸟到高手├─传智播客_尹成_C语言从菜鸟到高手_第一章C语言概述A│ 第一讲1.1C语言第一阶段.mp4│ 第二讲1.2c语言入门教程.mp4 ...
- 使用detours实现劫持
第一步:下载detours3.0,安装detours 第二步:构建库文件,nmake编译 第三步:包含库文件和头文件 #include "detours.h" //载入头文件 #p ...
- C/C++ 如何劫持别人家的命令||函数||程序(只能对于window而言)
要实现下面程序,首先我们需要三个文件 detours.h ,detours.lib ,detver.h(可以去网上下载) 1. 首先让我们看看,一个最简单的C程序,如何劫持system函数. #inc ...
- HOOK劫持自己
#include <stdio.h> #include <stdlib.h> #include <Windows.h> #include "detours ...
- c语言-----劫持系统03
1. 回顾 在前2节我们已经实现了劫持原理.函数指针等一些概念,下面进行系统劫持 2. 工具 vs2017 Detours 3. windows如何创建一个进程? (1)创建进程函数 CreatePr ...
- c语言-----劫持自己02
在上一节 c语言-----劫持原理01 已经叙述了劫持原理,下边正式进入劫持实战 1. 需要实现的功能 在c语言中 system("notepad") 可以打开一个记事本 syst ...
- 【流量劫持】躲避 HSTS 的 HTTPS 劫持
前言 HSTS 的出现,对 HTTPS 劫持带来莫大的挑战. 不过,HSTS 也不是万能的,它只能解决 SSLStrip 这类劫持方式.但仔细想想,SSLStrip 这种算劫持吗? 劫持 vs 钓鱼 ...
随机推荐
- glusterfs详解及kubernetes 搭建heketi-glusterfs
本文包含: gluster各存储卷详解.创建及使用 gluster-kubernetes搭建glusterfs存储 前言 传统的运维中,往往需要管理员手动先在存储集群分配空间,然后才能挂载到应用中去. ...
- nodejs实现聊天机器人
技术栈 服务端: koa.koa-route.koa-websocket.request. 客户端: html.css.js.websocket. 远程聊天API: http://api.qingyu ...
- springcloud config配置读取优先级
情景描述 最近在修复Eureka的静态页面加载不出的缺陷时,最终发现是远程GIT仓库将静态资源访问方式配置给禁用了(spring.resources.add-mappings=false).虽然最后直 ...
- 复习0824js
编程思想: 面向过程:凡事亲力亲为,所有事情的过程都要清楚,注重的是过程. 面向对象:提出需求,找到对象,对象解决这个问题,我们要结果,注重的是结果. 面向对象的特性:封装,继承,多态: JS: 是一 ...
- Tomcat部署spring boot项目
Tomcat部署spring boot项目 需要在启动类做修改
- Kubernetes的Deployment对象使用
一.什么是Deployment对象 明明ReplicaSet已经可以控制pod的数量了,为什么还需要Deployment? Deploymen实际上一个两层控制器,遵循一种滚动更新的方式来实升级现有的 ...
- redirectTo、navigateTo与switchTap区别
老是记忆不大清楚,简单写一下 简单作区分就是: redirectTo:关闭当前页(卸载),跳转到指定页 navigateTo:保留当前页(隐藏),跳转到指定页 switchTap:只能用于跳转到tab ...
- .Net Core中间件和过滤器实现错误日志记录
1.中间件的概念 ASP.NET Core的处理流程是一个管道,中间件是组装到应用程序管道中用来处理请求和响应的组件. 每个中间件可以: 选择是否将请求传递给管道中的下一个组件. 可以在调用管道中的下 ...
- 【SQL server基础】获取当前时间并固定格式
Select CONVERT(varchar(), GETDATE(), ): // Select CONVERT(varchar(), GETDATE(), ): Select CONVERT(va ...
- 痞子衡嵌入式:史上最强i.MX RT学习资源汇总(持续更新中...)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MX RT学习资源. 类别 资源 简介 官方汇总 i.MXRT产品主页 恩智浦官方i.MXRT产品主页,最权威的资料都在这里,参考手 ...