挂钩 NtResumeThread 实现全局Hook

ZDNet 安全频道频道 更新时间:2008-06-17 作者: 来源:SohuIT

本文关键词:hook HINSTANCE 函数原型

  作者: BITS,  出处:XFOCUS Team, 责任编辑: 韩博颖,  2008-06-17 09:58



  挂钩一直是Hack 编程中永恒的主题,基本高级的Rootkit 程序多多少少都会使用Hook 技术。



  挂钩一直是Hack编程中永恒的主题,基本高级的Rootkit程序多多少少都会使用Hook 技术。似乎Hook 都被讲烂了,不论是Ring3 的还是Ring0 的网上都有例子。Ring0 的毋庸置疑当然是全局的了,这里说说ring3 的全局hook。Ring 3 有Ring 3 的优势,稳定是压倒一切的,因此Mcafee和其他一些商业的安全软件都还是使用了Ring3 的Hook 技术,无论如何用户是无法接受蓝屏和死机的。



  1. 以往的Ring 3全局Hook



  纵观网上流行的全局Hook 程序都只用了一个Windows API, SetWindowsHookEx,此函数原型:



  



  HHOOK SetWindowsHookEx(



  int idHook,



  HOOKPROC lpfn,



  HINSTANCE hMod,



  DWORD dwThreadId



  );



  idhook 安装的钩子类型,如 WH_GETMESSAGE,WH_KEYBOARD 等



  lpfn hook procedure 的指针



  hmod 包含 hook procedure DLL 的handle



  dwThread 为0



  使用这个这个API时候有问题的,只能挂接系统中的所有G U I线程,换句通俗的话说就是有界面



  的程序,Windows console 类的程序就无能为力了。



  还有一种通过插入注册表来实现



  



  HKEY_LOCAL_MACHINESoftwareMicrosoftWindows NTCurrentVersionWindowsAppInit_DLLs



  这种方法简单,但是还是只能挂钩GUI程序,并且这个键值已经被广大HIPS 所关注,吃力不讨好。



  以上两种效果不好,因此有人有开始另外的做法,枚举所有进程,插入和挂钩 NtCreateProcess



  这是非常自然的想法,似乎也把问题解决了,但是仔细思考一下,就会发现很多问题。



  a. 时机不对,在NtCreateProcess函数被调用时进程并没有真正被创建,我们无法执行HOOK操作,



  而当NtCreateProcess返回时,进程又已经开始运行



  b. 如果是Windows console 创建的进程,你如何去监控这个调用呢?这么说似乎比较抽象,你可



  以这么理解,直接在命令行下,cmd,cmd,cmd .... 你可以监控到最后一个cmd 吗,如果只



  用SetWindowsHookEx



  c. 是否正好站在了华容道,是否足够底层。

[an error occurred while processing this directive]