前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C/C++教学】劫持?劫持?劫持?!!!

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

作者头像
短短的路走走停停
发布2019-05-14 19:00:38
2.4K0
发布2019-05-14 19:00:38
举报
文章被收录于专栏:程序猿声程序猿声程序猿声

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序猿声 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档