Chinaunix首页 | 论坛 | 博客
  • 博客访问: 455018
  • 博文数量: 724
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:47
文章分类

全部博文(724)

文章存档

2011年(1)

2008年(723)

我的朋友

分类:

2008-10-13 16:56:11

Hook API 工具

作者:





一、介绍
  近日由于需求问题,需要写一个 API Hook 相关的东西,温习了一下牛写的《Windows 核心编程》,做了一个小工具,用来将自定义的 Dll 注入进程空间,并钩住指定 API 函数,关于注入和钩 API 的代码,牛的书里和配套光盘中已经有了,这里主要介绍如何使用这个小工具方便实现截获 API 的功能。

二、使用说明 
  大致方法是自己写一个 DLL ,实现仿 某个API的函数,然后修改工具根目录下的 config.dat ,添加如下配置:

SysDllName|SysApiName|YourDllName|YourApiName

例如:ws2_32.dll | socket | c:\temp\sockhook.dll | my_socket

这样你的工作就结束了,指定想要测试的 Exe,Go....  ,看看 Log 里时候 Hook成功。

三、注意事项
  在自定义的 API 中,首先要实现一个 CHookHelper 的实例,构造函数参数是自己函数的地址,如果在自定义函数中用到其它 API , 也应当实现相应的类实例。不然很可能出现死循环哦。
  在自定义函数中,有时候需要保存 WsaGetLastError值,当返回的时候再设置一下。因为大部分异步 Sock 程序都会判断某个函数返回值是否是 WSAEWOULDBLOCK, 如果不做前面的处理,很可能返回不正确的错误代码。
  由于使用插入汇编硬代码的方法,在多线程情况下,可能出现小概率非法操作事件,重新来过就行了。

四、结束语
  还没结束,很多地方还要完善,有问题、想法、建议发到我邮箱吧。 :)
  程序在使用Inter指令集的  XP、2000测试成功, 98下测试成功。

e-mail:


--------------------next---------------------

无法hook recv函数请给予解答,谢谢! ( guhongye 发表于 2006-11-22 17:11:00)
 
怎么无法hook recv这个函数 ( guhongye 发表于 2006-11-22 17:10:00)
 
API拦截教程 V1.0
( marrco 发表于 2006-8-11 8:16:00)
 
我解决了:)呵呵 ( tangqin 发表于 2005-6-3 11:30:00)
 
不知道大家有没有发现?
源程序中编译出来的结果并不能实现bin目录下的功能,最多只能写个日志在C盘,而不像BIN目录那样能做到实际的操作。。。。。
我的系统是WINDOWS 2000,难道有错? ( tangqin 发表于 2005-6-3 2:07:00)
 
源代码在 "增补源代码" 里面,第一个不全 ( yj_3000 发表于 2004-9-13 11:50:00)
 
楼主发的第一个apihookdll的代码不对吧?怎么都是socket的东西? ( laomai 发表于 2004-9-10 9:32:00)
 
api hook的最大弊端:不能挂钩console窗口,强行注入应该可以,不过在98下无效,必须采用修改字节强行跳转,建议大家使用detours,这个家伙这么吝啬,不肯提供代码,不如用detours,微软官方提供,安全无错,呵呵,当然弊端还是上面那些,但总比用这种人的强 ( muroachanf 发表于 2004-8-16 16:13:00)
 
你种东西都不贴源码,你还贴出来干吗?!
不如象我,不想贴就不贴。。。
做人要爽快~~
你们骂我吧!!
爽 ( yoke_snowwolf 发表于 2004-8-9 10:46:00)
 
hook的方法 书上讲的很详细,还有代码看,我也是现学现卖,就不献丑了,另外这个程序在目标程序多线程的时候有些问题,第一次写考虑欠佳,正在修改 ^_^
( yj_3000 发表于 2004-7-29 19:32:00)
 
.......................................................

--------------------next---------------------

阅读(143) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~