• 网络学院
  • IT资讯
  • 操作系统
  • 网络技术
  • 软件应用
  • 办公软件
  • 编程技术
  • 网站架设
  • 数据库类
  • 平面设计
  • 多媒体类
  • 游戏资讯
  • 教学论文
  • 认证考试
考试大学习教室[详谈HOOKAPI的技术
  站点:
  • 首 页
  • 最新软件
  • 文章教程
  • 国内软件
  • 国外软件
  • 绿色软件
  • 源码下载
  • 字体下载
考试大学习教室[详谈HOOKAPI的技术
软件发布 考试大学习教室[详谈HOOKAPI的技术
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏娱乐 编程开发 安全相关 教育教学 数码软件 绿软下载
热门软件: QQ 瑞星 pplive e话通 木马克星 千千静听 office2000 五笔字根 Photoshop 视频分割
返回文章教程首页 >> 文章首页 >> 认证考试 >> 思科认证 >> Cisco指导 >> 考试大学习教室[详谈HOOKAPI的技术

考试大学习教室[详谈HOOKAPI的技术

添加时间: 2008-2-24 11:43:51  作者: Cisco指导  阅读次数:5   来源: http://www.d9soft.com

       

  HOOK API是一个永恒的话题,如果没有HOOK,许多技术将很难实现,也许根本不能实现。这里所说的API,是广义上的API,它包括DOS下的中断,WINDOWS里的API、中断服务、IFS和NDIS过滤等。比如大家熟悉的即时翻译软件,就是靠HOOK TextOut()或ExtTextOut()这两个函数实现的,在操作系统用这两个函数输出文本之前,就把相应的英文替换成中文而达到即时翻译;IFS和NDIS过滤也是如此,在读写磁盘和收发数据之前,系统会调用第三方提供的回调函数来判断操作是否可以放行,它与普通HOOK不同,它是操作系统允许的,由操作系统提供接口来安装回调函数。
  甚至如果没有HOOK,就没有病毒,因为不管是DOS下的病毒或WINDOWS里的病毒,都是靠HOOK系统服务来实现自己的功能的:DOS下的病毒靠HOOK INT 21来感染文件(文件型病毒),靠HOOK INT 13来感染引导扇区(引导型病毒);WINDOWS下的病毒靠HOOK系统API(包括RING0层的和RING3层的),或者安装IFS(CIH病毒所用的方法)来感染文件。因此可以说“没有HOOK,就没有今天多姿多彩的软件世界”。

  由于涉及到专利和知识产权,或者是商业机密, 微软 一直不提倡大家HOOK它的系统API,提供IFS和NDIS等其他过滤接口,也是为了适应杀毒软件和防火墙的需要才开放的。所以在大多数时候,HOOK API要靠自己的力量来完成。

  HOOK API有一个原则,这个原则就是:被HOOK的API的原有功能不能受到任何影响。就象医生救人,如果把病人身体里的病毒杀死了,病人也死了,那么这个“救人”就没有任何意义了。如果你HOOK API之后,你的目的达到了,但API的原有功能失效了,这样不是HOOK,而是REPLACE,操作系统的正常功能就会受到影响,甚至会崩溃。

  HOOK API的技术,说起来也不复杂,就是改变程序流程的技术。在CPU的指令里,有几条指令可以改变程序的流程:JMP,CALL,INT,RET,RETF,IRET等指令。理论上只要改变API入口和出口的任何机器码,都可以HOOK,但是实际实现起来要复杂很多,因为要处理好以下问题:

  1.CPU指令长度问题,在32位系统里,一条JMP/CALL指令的长度是5个字节,因此你只有替换API里超过5个字节长度的机器码(或者替换几条指令长度加起来是5字节的指令),否则会影响被更改的小于5个字节的机器码后面的数条指令,甚至程序流程会被打乱,产生不可预料的后果;

  2.参数问题,为了访问原API的参数,你要通过EBP或ESP来引用参数,因此你要非常清楚你的HOOK代码里此时的EBP/ESP的值是多少;

  3.时机的问题,有些HOOK必须在API的开头,有些必须在API的尾部,比如HOOK CreateFilaA(),如果你在API尾部HOOK API,那么此时你就不能写文件,甚至不能访问文件;HOOK RECV(),如果你在API头HOOK,此时还没有收到数据,你就去查看RECV()的接收缓冲区,里面当然没有你想要的数据,必须等RECV()正常执行后,在RECV()的尾部HOOK,此时去查看RECV()的缓冲区,里面才有想要的数据;

  4.上下文的问题,有些HOOK代码不能执行某些操作,否则会破坏原API的上下文,原API就失效了;

  5.同步问题,在HOOK代码里尽量不使用全局变量,而使用局部变量,这样也是模块化程序的需要;

  6.最后要注意的是,被替换的CPU指令的原有功能一定要在HOOK代码的某个地方模拟实现。

下面以ws2_32.dll里的send()为例子来说明如何HOOK这个函数:

  Exported fn(): send - Ord:0013h

  地址     机器码    汇编代码

  :71A21AF4   55      push ebp //将被HOOK的机器码(第1种方法)

  :71A21AF5   8BEC     mov ebp, esp //将被HOOK的机器码(第2种方法)

  :71A21AF7   83EC10    sub esp, 00000010

  :71A21AFA   56      push esi

  :71A21AFB   57      push edi

  :71A21AFC   33FF     xor edi, edi

  :71A21AFE   813D1C20A371931CA271   cmp dword ptr [71A3201C], 71A21C93 //将被HOOK的机器码(第4种方法)

  :71A21B08   0F84853D0000 je 71A25893

  :71A21B0E   8D45F8    lea eax, dword ptr [ebp-08]

  :71A21B11   50      push eax

  :71A21B12   E869F7FFFF  call 71A21280

  :71A21B17   3BC7     cmp eax, edi

  :71A21B19   8945FC    mov dword ptr [ebp-04], eax

  :71A21B1C   0F85C4940000 jne 71A2AFE6

  :71A21B22   FF7508    push [ebp+08]

  :71A21B25   E826F7FFFF  call 71A21250

  :71A21B2A   8BF0     mov esi, eax

  :71A21B2C   3BF7     cmp esi, edi

  :71A21B2E   0F84AB940000 je 71A2AFDF

  :71A21B34   8B4510    mov eax, dword ptr [ebp+10]

  :71A21B37   53      push ebx

  :71A21B38   8D4DFC    lea ecx, dword ptr [ebp-04]

  :71A21B3B   51      push ecx

  :71A21B3C   FF75F8    push [ebp-08]

  :71A21B3F   8D4D08    lea ecx, dword ptr [ebp+08]

  :71A21B42   57      push edi

  :71A21B43   57      push edi

  :71A21B44   FF7514    push [ebp+14]

  :71A21B47   8945F0    mov dword ptr [ebp-10], eax

  :71A21B4A   8B450C    mov eax, dword ptr [ebp+0C]

  :71A21B4D   51      push ecx

  :71A21B4E   6A01     push 00000001

  :71A21B50   8D4DF0    lea ecx, dword ptr [ebp-10]

  :71A21B53   51      push ecx

  :71A21B54   FF7508    push [ebp+08]

  :71A21B57   8945F4    mov dword ptr [ebp-0C], eax

  :71A21B5A   8B460C    mov eax, dword ptr [esi+0C]

  :71A21B5D   FF5064    call [eax+64]

  :71A21B60   8BCE     mov ecx, esi

  :71A21B62   8BD8     mov ebx, eax

  :71A21B64   E8C7F6FFFF  call 71A21230 //将被HOOK的机器码(第3种方法)

  :71A21B69   3BDF     cmp ebx, edi

  :71A21B6B   5B      pop ebx

  :71A21B6C   0F855F940000 jne 71A2AFD1

  :71A21B72   8B4508    mov eax, dword ptr [ebp+08]

  :71A21B75   5F      pop edi

  :71A21B76   5E      pop esi

  :71A21B77   C9      leave

  :71A21B78   C21000    ret 0010


  下面用4种方法来HOOK这个API:

  1.把API入口的第一条指令是PUSH EBP指令(机器码0x55)替换成INT 3(机器码0xcc),然后用WINDOWS提供的调试函数来执行自己的代码,这中方法被SOFT ICE等DEBUGER广泛采用,它就是通过BPX在相应的地方设一条INT 3指令来下断点的。但是不提倡用这种方法,因为它会与WINDOWS或调试工具产生冲突,而汇编代码基本都要调试;

  2.把第二条mov ebp,esp指令(机器码8BEC,2字节)替换为INT F0指令(机器码CDF0),然后在IDT里设置一个中断门,指向我们的代码。我这里给出一个HOOK代码:

  lea ebp,[esp+12] //模拟原指令mov ebp,esp的功能

  pushfd //保存现场

  pushad //保存现场

  //在这里做你想做的事情

  popad //恢复现场

  popfd //恢复现场

  iretd //返回原指令的下一条指令继续执行原函数(71A21AF7地址处)

  这种方法很好,但缺点是要在IDT设置一个中断门,也就是要进RING0.

  3.更改CALL指令的相对地址(CALL分别在71A21B12、71A21B25、71A21B64,但前面2条CALL之前有一个条件跳转指令,有可能不被执行到,因此我们要HOOK 71A21B64处的CALL指令)。为什么要找CALL指令下手?因为它们都是5字节的指令,而且都是CALL指令,只要保持操作码0xE8不变,改变后面的相对地址就可以转到我们的HOOK代码去执行了,在我们的HOOK代码后面再转到目标地址去执行。

  假设我们的HOOK代码在71A20400处,那么我们把71A21B64处的CALL指令改为CALL 71A20400(原指令是这样的:CALL 71A21230)
  而71A20400处的HOOK代码是这样的:

考试大学习教室[详谈HOOKAPI的技术(1) 第 [1] [2]  下一页

 

上下文章:

 

上一篇文章: 校园网安全与风险一级戒备 下一篇文章: 考试大学习教室[CISCO认证资讯

相关文章:

  • 教你如何用零框架技术加密网页
  • 用端口碰撞技术实现服务器远程管理
  • 城域网光缆线路设计与技术应用
  • ORACLE OCP认证的各门考试科目
  • Oracle认证专家考试科目一览表

相关软件:

  • 全国计算机等级考试模拟软件(2006年全年使用)二级Visual Basic V9.0
  • CGI技术全面接触(PDG)
  • 技术人员实用工具合集 06/03/21 [机必备工具]
  • NeoExam考试系统 大众版/ACCESS数据库 1.0.8
  • NeoExam考试系统 VIP版/ACCESS数据库 1.0.8
  • 主治医师考试宝典(全科) 1.0

 

快速导航

  • 网络学院
  • 精品汇聚
  • 字体下载
  • 教程下载
  • ASP源码
  • PHP源码
  • Net源码
  • JSP 源码

思科认证分类导航

  • Cisco动态
  • Cisco指导
  • Cisco介绍
  • Cisco试题

本类经典文章推荐

  • CISCO认证增长60%新认证推陈出新
  • 加快千兆网络普及以太网技术动向
  • WinGate与Internet连接共享
  • WinGate3.0安装指导
  • 远程传输的两种技术优劣各异
  • Cisco认证指导:基础中文命令集
  • IOS软件结构读书笔记
  • 路由器基础配置及传输协议
  • 网络安全:IPv6安全威胁
  • 路由技术:路由器远程管理实例

Cisco指导阅读排行

  • Cisco路由器访问控制列表详解
  • 我的CISCO认证学习笔记总结
  • EPON与GPON的综合比较
  • CCNA考试主要知识点指导
  • 企业网络规划对工作效率的影响
  • 如何安全地使用SNMP
  • Cisco指导:IOS命令大全(一)
  • GSM数字移动通信无线网络规划设计...
  • 使用IPSec阻止特定网络协议和端口
  • 如何配置Cisco PIX防火墙[5]

思科认证阅读总排行

  • Cisco路由器访问控制列表详解
  • 我的CISCO认证学习笔记总结
  • 思科考试认证(CISCO) CCNA考试就...
  • EPON与GPON的综合比较
  • Cisco经验介绍:CCNP培训日记(2)
  • CCNA考试主要知识点指导
  • Cisco经验介绍:ping命令之解惑
  • CCNABRAINDUMP6(1)
  • 企业网络规划对工作效率的影响
  • 思科认证考试(CCNA)考试模拟...

广告位置

字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 回到顶部

关于我们 | 版权声明 | 免责条款 | 广告联系 | 软件发布 | 下载帮助 | 下载排行 | 网站地图 | 特别鸣谢 | 友情连接

copyright; 2005-2008 D9soft.com 第九软件网 版权所有