在使用 Detours 劫持之前必须得拥有这两个东西:detours.hdetours.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 劫持的更多相关文章

  1. 25.Detours劫持技术

    Detours可以用来实现劫持,他是微软亚洲研究院开发出来的工具,要实现它首先需要安装Detours. 安装地址链接:https://pan.baidu.com/s/1eTolVZs 密码:uy8x ...

  2. windows、linux劫持技术

    windows系统以下能够利用detours劫持 realse  模式劫持,调试的程序不能够 函数劫持能够实现的效果. 函数的劫持原理 我们怎样实现-detours detours是微软亚洲研究院出品 ...

  3. 传智播客C语言视频第一季(有效下载期为10.1-10.7,10.8关闭)

     J:\传智播客_尹成_C语言从菜鸟到高手├─传智播客_尹成_C语言从菜鸟到高手_第一章C语言概述A│      第一讲1.1C语言第一阶段.mp4│      第二讲1.2c语言入门教程.mp4 ...

  4. 使用detours实现劫持

    第一步:下载detours3.0,安装detours 第二步:构建库文件,nmake编译 第三步:包含库文件和头文件 #include "detours.h" //载入头文件 #p ...

  5. C/C++ 如何劫持别人家的命令||函数||程序(只能对于window而言)

    要实现下面程序,首先我们需要三个文件 detours.h ,detours.lib ,detver.h(可以去网上下载) 1. 首先让我们看看,一个最简单的C程序,如何劫持system函数. #inc ...

  6. HOOK劫持自己

    #include <stdio.h> #include <stdlib.h> #include <Windows.h> #include "detours ...

  7. c语言-----劫持系统03

    1. 回顾 在前2节我们已经实现了劫持原理.函数指针等一些概念,下面进行系统劫持 2. 工具 vs2017 Detours 3. windows如何创建一个进程? (1)创建进程函数 CreatePr ...

  8. c语言-----劫持自己02

    在上一节 c语言-----劫持原理01 已经叙述了劫持原理,下边正式进入劫持实战 1. 需要实现的功能 在c语言中 system("notepad") 可以打开一个记事本 syst ...

  9. 【流量劫持】躲避 HSTS 的 HTTPS 劫持

    前言 HSTS 的出现,对 HTTPS 劫持带来莫大的挑战. 不过,HSTS 也不是万能的,它只能解决 SSLStrip 这类劫持方式.但仔细想想,SSLStrip 这种算劫持吗? 劫持 vs 钓鱼 ...

随机推荐

  1. day02小结

    数据类型的转换 1,自动类型转换 byte,short,char-->int-->long-->float-->double (1)byte与byte,short与short, ...

  2. mysql数据库事务隔离原理

    今天在学习JDBC的时候看到了关于MySQL的事务的隔离级别的问题,感觉内容挺高级的,所以记录一篇文章,以备后面使用. 数据库隔离级别有四种,应用<高性能mysql>一书中的说明: 然后说 ...

  3. JavaEE就业学习路线(给初学者以及自学者一个学习方向)

    大家按这个路线学完后基本可以找工作了 第一节java入门 1-Java 背景介绍 2-Java 入门程序的编写 3-环境配置 4-基本概念介绍 5-类型转换 6-开发工具使用 第二节java基础 1- ...

  4. go 学习笔记之仅仅需要一个示例就能讲清楚什么闭包

    本篇文章是 Go 语言学习笔记之函数式编程系列文章的第二篇,上一篇介绍了函数基础,这一篇文章重点介绍函数的重要应用之一: 闭包 空谈误国,实干兴邦,以具体代码示例为基础讲解什么是闭包以及为什么需要闭包 ...

  5. Android MediaPlayer 播放音频

    本文链接: Android MediaPlayer 播放音频 主要介绍使用MediaPlayer播放音频的方式.关于MediaPlayer的基础知识,比如状态,可以参考Android MediaPla ...

  6. elasticsearch document的索引过程分析

    elasticsearch专栏:https://www.cnblogs.com/hello-shf/category/1550315.html 一.预备知识 1.1.索引不可变 看到这篇文章相信大家都 ...

  7. activity的隐式和显式启动

    显式Intent(Explicit intent):通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下,一般是在相同的应用程序内部实现的. 隐式Intent(Implicit i ...

  8. ReentrantLock API

    java可重入锁,简单几个小案例,测试特性. 1.尝试锁  tryLock package com.cn.cfang.ReentrantLock; import java.util.concurren ...

  9. Mysql学习笔记整理之索引

    索引的概念: 索引是一个分散存储的数据结构(检索)对数据库表中一列或多列的值进行排序 为什么要用索引? 索引能极大的减少存储引擎需要扫描的数据量 索引可以把随机IO变成顺序IO 索引可以帮助我们进行分 ...

  10. WordPress 文章插入的超链接访问不了

    这两天学习WordPress的时候,想着插入超链接直接访问地址,但是没成功.比如添加一个百度的超链接点击之后,就会变成 https://网站域名/go/?url=http://www.baidu.co ...