zoukankan      html  css  js  c++  java
  • hook技术分类

    1、HOOK SERVICE TABLE:HOOK SSDT
    这种方法对于拦截 NATIVE API 来说用的比较多。

    SSDT hook,一句话——Windows把需要调用的内核API地址全都存在了

    一个表中(System Service Dispatch Table),要想hook一个内核API,比较简单的办法就是把

    该内核API在表(SSDT)中保存的地址修改为自己撰写的函数地址。

    2、HOOK INT 2E 方法:IDT HOOK

    IDT是中断描述表,可以替换其中的中断处理程序。

    这种方法对于跟踪、分析系统调用来说用的比较多。原理是通过替换 IDT
    表中的 INT 2E 中断,使之指向我们自己的中断服务处理例程来实现的。掌握
    此方法需要你对保护模式有一定的基础。

    3、 HOOK PE 方法:EAT HOOK
    这种方法对于拦截、分析其他内核驱动的函数调用来说用的比较多。原理
    是根据替换 PE 格式导出表中的相应函数来实现的。

    EAT是可执行文件的导出表,记录DLL中可供其他程序使用的函数,可执行文件装载时会使用相应DLL的EAT表来初始化IAT表,通过替换EAT表中的函数地址,就可以使依赖于本DLL的程序得到一个假的地址。



    4.IAT HOOK (ring3 用)

    IAT是可执行文件的导入表,记录可执行文件使用的其它DLL中的函数,通过替换IAT表中的函数地址,可以hook相应DLL中的函数调用。



    5、Inline Hook方法 (ring 0和ring3 都可以用)

    Inline hook的工作流程:
    1)验证内核API的版本(特征码匹配)。
    2)撰写自己的函数,要完成以上三项任务。
    2)获取自己函数的地址,覆盖内核API内存,供跳转。

    Inline Hook的缺点:
    1) 不够通用。各个windows版本中,内核API的开始一段不尽相同,要想通吃,就要多写几个版

    本或者做一个特征码搜索(因为有的内核API在各个版本中非常相似,只是在“特征码”之前或之

    后加一点东西)。
    2) 已被一些检测工具列入检测范围,如果直接从内核API第一个字节开始覆盖,那么很容易被检

    测,如果把覆盖范围往后推,并加以变形,也许能抵挡一气。具体情况,我才疏学浅,尚未试验



    6.SYSENTRY hook
    为了性能的考虑,xp后的系统都改用sysentry命令来进入ring0,去调用SSDT中的服务,不再是通过IDT中的 int 2E。这也使得我们hook也变得相对容易了。
    首先获得sysentry的地址,然后改之,不用再考虑IDT了



    7)IRP hook
    IRP是 I/O request packets,驱动程序中有一系列分发例程来处理请求,这些例程保存在驱动设备对象的数据结构中的一个表中,也很容易替换。

  • 相关阅读:
    最少说服人数(二分+贪心)
    线段树或树状数组或归并(逆序对)
    线段树(区间更新,区间询问,节点存最小值)
    【Hades】ades是一个开源库,基于JPA和Spring构建,通过减少开发工作量显著的改进了数据访问层的实现
    【hibernate】spring+ jpa + hibername 配置过程遇到的问题
    【方言】Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
    【Bean】 这才是bean,一直没仔细看
    【spring配置】 一组配置文件引出的问题
    org.springframework.web.servlet.view.InternalResourceViewResolver
    org.springframework.orm.jpa.JpaTransactionManager
  • 原文地址:https://www.cnblogs.com/devc/p/3584051.html
Copyright © 2011-2022 走看看