如何将摘除InlineHook内核钩子的驱动开发过程转化为一个长尾?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2688个文字,预计阅读时间需要11分钟。
在笔者的文章《驱动开发:内核层InlineHook钩子函数》中,介绍了通过替换函数、头部代码的方式实现Hook,并对ARK工具实现扫描与摘除InlineHook进行了说明。其中,InlineHook钩子也是实现基本功能的基础。
在笔者上一篇文章《驱动开发:内核层InlineHook挂钩函数》中介绍了通过替换函数头部代码的方式实现Hook挂钩,对于ARK工具来说实现扫描与摘除InlineHook钩子也是最基本的功能,此类功能的实现一般可在应用层进行,而驱动层只需要保留一个读写字节的函数即可,将复杂的流程放在应用层实现是一个非常明智的选择,与《驱动开发:内核实现进程反汇编》中所使用的读写驱动基本一致,本篇文章中的驱动只保留两个功能,控制信号IOCTL_GET_CUR_CODE用于读取函数的前16个字节的内存,信号IOCTL_SET_ORI_CODE则用于设置前16个字节的内存。
之所以是前16个字节是因为一般的内联Hook只需要使用两条指令就可实现劫持,如下是通用ARK工具扫描到的被挂钩函数的样子。
本文共计2688个文字,预计阅读时间需要11分钟。
在笔者的文章《驱动开发:内核层InlineHook钩子函数》中,介绍了通过替换函数、头部代码的方式实现Hook,并对ARK工具实现扫描与摘除InlineHook进行了说明。其中,InlineHook钩子也是实现基本功能的基础。
在笔者上一篇文章《驱动开发:内核层InlineHook挂钩函数》中介绍了通过替换函数头部代码的方式实现Hook挂钩,对于ARK工具来说实现扫描与摘除InlineHook钩子也是最基本的功能,此类功能的实现一般可在应用层进行,而驱动层只需要保留一个读写字节的函数即可,将复杂的流程放在应用层实现是一个非常明智的选择,与《驱动开发:内核实现进程反汇编》中所使用的读写驱动基本一致,本篇文章中的驱动只保留两个功能,控制信号IOCTL_GET_CUR_CODE用于读取函数的前16个字节的内存,信号IOCTL_SET_ORI_CODE则用于设置前16个字节的内存。
之所以是前16个字节是因为一般的内联Hook只需要使用两条指令就可实现劫持,如下是通用ARK工具扫描到的被挂钩函数的样子。

