【C/C++教学】劫持?劫持?劫持?!!!(一)

简介: 【C/C++教学】劫持?劫持?劫持?!!!


写在前面

今天有个小伙伴跟我说,哇塞你在教室就是学习,回宿舍就打代码,都没有娱乐活动耶。然后我蛋蛋一笑,很装逼地回了一句:卧槽打代码不快乐吗???

微信图片_20220420143839.jpg

咳咳,回到今天正题

那么

今天讲的是???

没错

今天讲的是…

是…

传说中的【劫持】


本节纲要

- 什么是劫持

- detours的下载与编译

- detours的使用实例

01

什么是劫持

相信大家都有过这种经历,某一天你兴高采烈打开电脑想吃两把鸡的时候。突然发现电脑的所有程序都打不开了,无论怎么点击都只是弹了个错误窗口。这时候你的电脑就可能是被恶意程序给劫持了。


所以呢,本节讨论的劫持,就是指:程序通过修改目标函数的指针,使其指向了自定义的一个函数。


通俗点就是:当你双击桌面上某个程序的时候,本来系统是要通过调用CreateProcess函数创建一个进程,但是指向这个函数的指针被修改了,系统跑去调用了hacker自定义的那个函数。而原本的函数就被拦截了。

detours的下载与编译

02

- detours简介

Detours 是Microsoft开发一个库

它有下面这两方面的功能:

1 拦截x86机器上的任意的win32 API函数。

2 插入任意的数据段到PE文件中,修改DDL文件的导入表。


本节主要讨论它的第一功能。Detours拦截API的原理主要还是在汇编层改变目标API出口和入口的一些汇编指令,细节咱们跳过(其实我也不懂……)。


- detours的下载与编译

下载地址:http://research.microsoft.com/en-us/projects/detours/

下载得到的是一个名为Detours的压缩包,将其解压出来,比如我是解压到了C盘根目录下的detours文件夹。

微信图片_20220420143846.jpg

然后找到vs的开发者命令提示符。

微信图片_20220420143849.jpg

打开提示符后,切换到你解压出来的detours文件目录,进入里面的scr源文件目录,然后输入nmake回车,进行编译构建。

微信图片_20220420143853.png微信图片_20220420143857.jpg

等待构建完成之后,可以在include文件夹找到detours.h

微信图片_20220420143900.png

在lib.X86文件夹找到detours.lib。将这两文件copy到一个目录,咱们一会写代码要用到。

微信图片_20220420143905.png

03

detours的使用实例

好了,万事俱备了,小伙伴们此时是不是按耐不住内心的激动想要搞点事情了呢?

微信图片_20220420143908.jpg

别急。咱们先来看看detours中的几个关键函数吧:


1.对detours进行初始化. DetourTransactionBegin()


2。更新进行detours的线程. DetourUpdateThread(GetCurrentThread())


3.在进行上面两步以后,接下来就可以用DetourAttach()函数驱动detours执行了,它的定义如下:

LONG DetourAttach(
PVOID * ppPointer,
PVOID pDetour
);

这个函数的职能呢是将目标API挂接起来。

第一个参数是一个指向将要被挂接函数地址的函数指针,就是指向原来的函数地址。

第二个参数是指向实际要调用的函数的指针,

一般我们都让它指向我们自定义的函数地址。


4.让detour函数起作用并检查函数的返回值判断是正确还是错误

DetourTransactionCommit()


最后在多说两句:

如果我们想把拦截的函数恢复的话,可以用下面这个函数,参数和DetourAttach一样,步骤和上面的基本一致。

LONG WINAPI DetourDetach(
PVOID *ppPointer,
PVOID pDetour)


好了,下面我们的表演开屎。

微信图片_20220420143911.jpg

相关文章
|
文件存储 C++
C/C++之分文件写静态通讯录详解(保姆级教学)
C/C++之分文件写静态通讯录详解(保姆级教学)
90 2
C/C++之分文件写静态通讯录详解(保姆级教学)
|
6月前
|
JSON C++ 数据格式
【C++】Visual Studio C++使用配置Json库文件(老爷式教学)
【C++】Visual Studio C++使用配置Json库文件(老爷式教学)
|
C++
C/C++指针进阶全(保姆级教学)
C/C++指针进阶全(保姆级教学)
63 0
|
6月前
|
关系型数据库 数据库 C++
【C++】Windows使用Visual Studio C++链接云数据库PostgreSQL(沉浸式老爷教学)
【C++】Windows使用Visual Studio C++链接云数据库PostgreSQL(沉浸式老爷教学)
|
6月前
|
人工智能 机器人 编译器
【C++】Windows端VS code中运行CMake工程(手把手教学)
【C++】Windows端VS code中运行CMake工程(手把手教学)
356 0
|
6月前
|
C++ Python
C++教学——从入门到精通 10.循环
学习编程建议先Python后C++,以避免C++思维影响。课程涵盖for、while和do while循环。for循环示例:`for(int i=0;i<n;i++)`,用于计算114514天后的金币总数(1145140个)。死循环通过`for(int i=0;;i++)`实现,用`break`退出。while循环格式`while(条件)`,同样可解决金币问题。do while循环特点是先执行后判断,结构为`do{...}while(条件)`。
49 2
|
6月前
|
人工智能 NoSQL 机器人
【C++】VS code如何配置使用C++(手把手教学)
【C++】VS code如何配置使用C++(手把手教学)
|
存储 C++
C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学)
C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学)
73 0
|
关系型数据库 数据库 C++
【C++】Windows使用Visual Studio C++链接云数据库PostgreSQL(沉浸式老爷教学)
【C++】Windows使用Visual Studio C++链接云数据库PostgreSQL(沉浸式老爷教学)
289 0
|
JSON C++ 数据格式
【C++】Visual Studio C++使用配置Json库文件(老爷式教学)
【C++】Visual Studio C++使用配置Json库文件(老爷式教学)
380 0