InlineHook是什么?

简单来说,就是修改函数体实现部分。
但是如何来修改,这样修改的意义又是什么?

我今天一直在寻找一个比较好的方式来说明白如何进行InlineHook,画了几次图,试了好几个工具,最后完成了一个流程,希望大家能看明白。

图片:

InlineHook是什么?_第1张图片


说明:

左上的图片
这个结构是我们在代码中写入的一个函数
代码如下:

__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的目的,如用来隐藏文件。

流程:

调用NtQueryDirectoryFile---->jmp到我们自己的Hook函数---->设置参数,调用③--->调用①

你可能感兴趣的:(内核,InlineHOOK)