inlineHook

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

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

图片:



说明:

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

  1. __declspec(naked) NTSTATUS NtQueryDirectoryFileHookZone(,...)  
  2. {  
  3.     _asm  
  4.     {  
  5.         _emit 0x90  
  6.         _emit 0x90  
  7.         _emit 0x90  
  8.         _emit 0x90  
  9.         _emit 0x90  
  10.         _emit 0x90  
  11.         _emit 0x90  
  12.         _emit 0x90  
  13.         _emit 0x90  
  14.         _emit 0x90  
  15.         _emit 0x90  
  16.         _emit 0x90  
  17.         _emit 0x90  
  18.         _emit 0x90  
  19.         _emit 0x90  
  20.         _emit 0x90  
  21.         jmp [NtQueryDirectoryFileRet]  
  22.     }  
  23. }  

作用就是:用来保存被我们替换掉的原始函数的前五个字节,实现原始函数的功能。


左下的图片:
绿色部分是要被替换为jmp指令的5个字节,将它们拷贝到左上图片中。

中上的图片:
这是被修改完成的函数,最后的jmp指令,实现跳转回原函数继续执行。

中下的图片:
被修改完成的原始函数的样子,前5个字节被我们替换为了jmp。

右边的图片:
这是我们的Hook函数,在这里面我们设置好相应的参数,然后调用③,获取相应信息,
对信息进行修改,达到了Hook的目的,如用来隐藏文件。

流程:

调用NtQueryDirectoryFile---->jmp到我们自己的Hook函数---->设置参数,调用③--->调用①
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值