相关文章  
  • 菜鸟必备:PC端口完全解析
  • 网络风险严峻 VoIP安全迫在眉睫
  • 用Cisco产品和功能构建安全的网络
  • 多重保护 谈企业交换机安全措施
  • Cisco多个产品TACACS+访问认证绕过漏洞
  • [图文]无线攻防:破解WEP密钥
  • 黑客兵器:选择好你的漏洞扫描工具
  • 谁误导了浏览器——浏览器劫持
  • 优化企业服务器系统安全环境,就这么几招
  • 局域网数据链路层网络安全
  •   推荐  
      科普之友首页   专利     科普      动物      植物        天文   考古   前沿科技
     您现在的位置在:  首页 >>文献 >>培训

    详谈HOOK API的技术2

    改变程序流程的技术。在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

    页码:[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]2页、共12页

         

          设为首页       |       加入收藏       |       广告服务       |       友情链接       |       版权申明      

    Copyriht 2007 - 2008 ©  科普之友 All right reserved