【C/C++教学】劫持?劫持?劫持?!!!
作者:互联网
写在前面
今天有个小伙伴跟我说,哇塞你在教室就是学习,回宿舍就打代码,都没有娱乐活动耶。然后我蛋蛋一笑,很装逼地回了一句:卧槽打代码不快乐吗???
咳咳,回到今天正题
那么
今天讲的是???
没错
今天讲的是…
是…
传说中的【劫持】
本节纲要
- 什么是劫持
- 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文件夹。
然后找到vs的开发者命令提示符。
打开提示符后,切换到你解压出来的detours文件目录,进入里面的scr源文件目录,然后输入nmake回车,进行编译构建。
等待构建完成之后,可以在include文件夹找到detours.h
在lib.X86文件夹找到detours.lib。将这两文件copy到一个目录,咱们一会写代码要用到。
03
detours的使用实例
好了,万事俱备了,小伙伴们此时是不是按耐不住内心的激动想要搞点事情了呢?
别急。咱们先来看看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)
好了,下面我们的表演开屎。
劫持自身
我们先来写一个简单小程序,来实现对自身函数调用的拦截试试。在这里呢主要是拦截程序中调用的system函数。让它不能干活。【顺带一提,请把前面编译好的detours.h和detours.lib放到构建工程目录下,编译的时候请设置为release模式才有效,因为debug模式本身就是劫持】
看看效果:
可以看到,hook()前的system能正常执行,打开了一个calc。hook()的system已经变成了我们自定义的newsystem函数了。成功劫持了自身。
劫持别人
可能已经有同学注意到,劫持自身也装不了什么B啊。能不能劫持别人,让它不能干活呢?
答案是肯定的,劫持其他程序有多种方式,比如全局hook,dll注入等。这里介绍下dll注入。我们打算拦截CreateProcess创建进程这个函数,让它创建不了进程。
这里在程序属性里设置一下,配置类型改为dll.然后生成
哎,截不了那么长的图大家凑合着看一下。生成了dll以后,咱们借助咱的dll注入工具来测试一下效果吧。这里再写一个创建进程的小程序测试一下,每5秒打开一个记事本。
可以看到。注入之后,notepad进程不再创建,而是弹出了交保护费的窗口。如果把这个dll注入到explorer.exe里面会发生什么,嘿嘿可想而知。关于dll注入有关知识,以后有时间再讲吧。
标签:劫持,函数,C++,dll,编译,detours,拦截,教学 来源: https://blog.51cto.com/u_14328065/2871073