简单来说,就是修改函数体实现部分。
但是如何来修改,这样修改的意义又是什么?
作用就是:用来保存被我们替换掉的原始函数的前五个字节,实现原始函数的功能。
但是如何来修改,这样修改的意义又是什么?
我今天一直在寻找一个比较好的方式来说明白如何进行InlineHook,画了几次图,试了好几个工具,最后完成了一个流程,希望大家能看明白。
图片:
说明:
左上的图片
这个结构是我们在代码中写入的一个函数
代码如下:
- __declspec(naked) NTSTATUS NtQueryDirectoryFileHookZone(,...)
- {
- _asm
- {
- _emit 0x90
- _emit 0x90
- _emit 0x90
- _emit 0x90
- _emit 0x90
- _emit 0x90
- _emit 0x90
- _emit 0x90
- _emit 0x90
- _emit 0x90
- _emit 0x90
- _emit 0x90
- _emit 0x90
- _emit 0x90
- _emit 0x90
- _emit 0x90
- jmp [NtQueryDirectoryFileRet]
- }
- }
作用就是:用来保存被我们替换掉的原始函数的前五个字节,实现原始函数的功能。
左下的图片:
绿色部分是要被替换为jmp指令的5个字节,将它们拷贝到左上图片中。
中上的图片:
这是被修改完成的函数,最后的jmp指令,实现跳转回原函数继续执行。
中下的图片:
被修改完成的原始函数的样子,前5个字节被我们替换为了jmp。
右边的图片:
这是我们的Hook函数,在这里面我们设置好相应的参数,然后调用③,获取相应信息,
对信息进行修改,达到了Hook的目的,如用来隐藏文件。