EasyHook远程进程注入并hook api的实现

介绍:HOOK API是指截获特定进程或系统对某个API函数的调用,使得API的执行流程转向指定的代码。Windows下的应用程序都建立在API函数至上,所以截获API是一项相当有用的技术,它使得用户有机会干预其它应用程序的程序流程。

最常用的一种挂钩API的方法是改变目标进程中调用API函数的代码,使得它们对API的调用变为对用户自定义函数的调用。

HOOK API和HOOK技术完全不同。尽管它们都是钩子。HOOK钩的是消息,它在系统将消息传递给应用程序之前截获它,然后进行操作、或修改消息、或停止消息的传递;而HOOK API截获的是应用程序对系统API的调用,它在应用程序对系统API的调用之前截获此调用动作,让其转而调用我们所定义的函数(内容可能是进行一些操作后再调用原系统API)。

对windows API钩子感兴趣的人都知道有一个优秀的库被微软命名为' Detours '。它真的很有用,但是它的免费版本(Express)是不支持X64。它的收费版本(Professional)支持x64。

HOOK API请参考 http://blog.csdn.net/super_chris/article/details/4327679


本文主要参考并改进了以下文章:http://blog.csdn.net/baggiowangyu/article/details/7675098

    先下载EasyHook的开发库,当然有兴趣的同学可以下载源码进行学习。下载地址:http://easyhook.codeplex.com/releases/view/24401。我给的这个是2.6版本的。

    EasyHook提供了两种模式的注入管理。一种是托管代码的注入,另一种是非托管代码的注入。我是学习C++的,所以直接学习了例子中的非托管项目UnmanagedHook。里面给了一个简单的挂钩MessageBeep API的示例,但是其远程注入的例子在执行过程中出错(我用的是VS2005)。我需要将其改造成支持远程注入的。


   整个过程比较复杂我先把各个程序功能介绍一下:

   1.三个程序。

qt_playSound.exe,目标程序,是我们要hook的程序示例,用qt编写的,主要调用了

 PlaySound(TEXT("d:\\Ding.wav"), NULL, SND_FILENAME | SND_ASYNC /*| SND_LOOP*/ );

hookdll.dll,钩子所在,hook的代码及我们自己的 MyPlaySoundW(LPCWSTR pszSound, HMODULE hwnd,DWORD fdwSound)的实现

inject.exe远程注入程序,用来把hookdll.dll 注入到qt_playSound.exe进程中。

2.功能

qt_playSound.exe运行过程中调用PlaySoundW这个系统API,我们实现对这个API的hook,当PlaySoundW被调用时,先转到我们hookdll.dll中的MyPlaySoundW。


具体源码下载:   http://download.csdn.net/detail/v6543210/8503153




  




评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路边闲人2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值