思路:
1、自己分配一块内存,存放需要hook的函数地址。
2、从内核模块中读取相应内核函数的地址,然后存放在自己分配的内存中。
3、修改nt!KiFastCallEntry函数中的代码,使跳入自己的驱动模块中。

优点:坚决不修改ssdt和内核模块中的数据,使得一般的工具软件无法检查出hook信息,也避免了和其他软件的不兼容性。

详细情况,请看图:

正常状态


hook后


下面是如何解除360的hook,看图:




驱动在 explorer.rar 中,此驱动只在win7 32位下测试过,可用。
  // 解除360的hook
  if( !NT_SUCCESS( KillHookPort() ) )
  { 
    KdPrint( ( "解除360的hook失败!" ) );
  }
  else
  {
    KdPrint( ( "解除360的hook成功!" ) );
  }

上传的附件 subFindApiAddr.txt
save_api_address.txt
explorer.rar
MyInjectEx.zip