阿里之家

Simple is beautiful. | Science is messy. | 性格决定命运,气度影响格局。
    <<  QTP启动应用程序分析 | 首 页 | LoadRunner Virtual User FootPrints  >>
  • 2009年06月03日

    EasyHook库简介

    分类:

    微软Detours库由微软的Galen Hunt 和Doug Brubacher开发,1999年7月1日发表在论文《Detours: Binary Interception of Win32 Functions》上。其原理是改写函数头至少5个字节(因为一般函数开头都是保存栈环境的三条指令共5个字节:8b ff 55 8b ec)为一条跳转指令,直接跳转到自己的函数开头,从而实现API拦截。其实现为原生代码C++语言。由于微软Detour钩子引擎免费许可仅针对x86应用程序,所以要对x64应用程序生效得选用其它库,比如diStorm64,其原理见Powerful x86/x64 Mini Hook-Engine。

     

    随着.NET框架的日益流行,EasyHook库提供了一种从托管环境hook非托管代码的方法,教程阐述了使用方法。

     

    EasyHook库完整源码显示其最关键的一段代码是Trampoline_ASM_x86/x64这段代码中给定的跳转地址。作者借助IDA Pro 5.0反汇编Ildasm.exe生成目录DriverShared\ASM下主要核心汇编代码。见文件HookSpecific_x86.asm中的public Trampoline_ASM_x86@0和HookSpecific_x64.asm中的public Trampoline_ASM_x64。然后目录DriverShared\LocalHook中的install.c调用它:

    UCHAR* GetTrampolinePtr()

    {

    // bypass possible Visual Studio debug jump table

    #ifdef _M_X64

          UCHAR* Ptr = (UCHAR*)Trampoline_ASM_x64;

    #else

          UCHAR* Ptr = (UCHAR*)Trampoline_ASM_x86;

    #endif

     

          if(*Ptr == 0xE9)

                Ptr += *((int*)(Ptr + 1)) + 5;

     

    #ifdef _M_X64

          return Ptr + 5 * 8;

    #else

          return Ptr;

    #endif

    }

    可见,EasyHook库也是跳转了5或6(JMP,E9,不被64位模式所支持)个指令。

    EasyHook库中的示例ProcessMonitor能hook勾选中文件CreateFileW操作。

     

    【资源】

    【x64 指令系统】之 指令编码内幕

    Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 2B: Instruction Set Reference, N-Z --Appendix A Opcode Map


    随机文章:

    MSIE跨版本预览软件 2009年05月01日
    基础汇编(1) 2008年08月11日
    获取Windows版本信息 2007年09月27日
    LoadRunner运行原理浅析(3)-监听(下) 2007年06月07日
    本月文章收录 2007年02月28日

    收藏到:Del.icio.us




    Tag:Hook
    引用地址:
    阿里 发表于17时48分00秒 | 编辑 | 继续话题 | 转发 | 分享 0

版权声明

Creative Commons License
除非另有声明,本站作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议授权。

Google 阅读器共享条目


最新文章

  • 给定时间段内反复运行一个程序
  • 程序模拟Windows用户时加载配置文件
  • 本月文章收录
  • 一种自动化界面测试流程
  • RSS烧制和阅读
  • 影音传送带暴破
  • 多机器间共享鼠标/键盘/剪贴板软件
  • VbsEdit暴破
  • Filezilla登录单IP站点和乱码显示
  • 移除FeedDemon广告
全部日志>>

最新回应

  • 网络编程:学习了,谢谢。我的博客也是关于watir方面的,www....
  • cdd:安装OS,做成image(ImageX或者Norton ...
  • 阿里:QTP轻量级自动化测试框架 http://cid-4b...
  • xiaoshancom:更正:第6点的结论是错误的,请看倌不要被误导。...
  • Tea:学习了
  • ∞雕龙小妖:多么的感谢啊,感谢Google,也感谢勤快的你。终于找到...
  • sunny:是去掉引号,打错了
  • sunny:首先谢谢你分享,不过你的某些答案是又错误的(我是初学者,...
  • zhx:如何将上述输出结果各项对齐(列对齐)?...
  • 莊明元:請問 : OnPrint 屬於 CView 類別 , ...
Copyright © 2002-2009 BlogBus.com, All Rights Reserved. 博客大巴 版权所有| THANKS iZ
BlogBus Skin | 64°F | by cilos