【C/C++教学】劫持?劫持?劫持?!!!

写在前面web

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

咳咳,回到今天正题微信

那么函数

今天讲的是???工具

没错学习

今天讲的是…测试

是…spa

传说中的【劫持】.net

本节纲要线程

- 什么是劫持

- 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注入有关知识,之后有时间再讲吧。

END

尼玛终于完了,写的很差请多谅解。如今已是深夜1.30多了。卧槽修仙已经成为平常了。看在如此深夜的份上。请点一点关注吧!!!



编辑 /codeboy

若有疑问,欢迎咨询:邓发珩 (联系方式:微信xiaoshiyisss 公众号:程序猿声)

本文分享自微信公众号 - 程序猿声(ProgramDream)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索