写在前面
今天有个小伙伴跟我说,哇塞你在教室就是学习,回宿舍就打代码,都没有娱乐活动耶。然后我蛋蛋一笑,很装逼地回了一句:卧槽打代码不快乐吗???
咳咳,回到今天正题
那么
今天讲的是???
没错
今天讲的是…
是…
传说中的【劫持】
本节纲要
- 什么是劫持
- 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)
好了,下面我们的表演开屎。