我在做API HOOK时碰到一个问题:
但一个PE进程中IAT中没有包含我需要HOOK的API时
API HOOK是必然失败的,这就导致一个API HOOK的漏洞。
我打算“动态向IAT中添加一项”,该如何处理?谢谢!

解决方案 »

  1.   

    这里不存在漏洞,只不过一个异常处理,假如IAT不存在你要的函数,那么就不要挂钩好了。在核心编程里面,Jeffery采用了Hook LoadLibrary这个API函数的办法,保证动态和静态连结的API调用都能被挂钩到。
      

  2.   

    Jeffery的dll在为DEBUG版本时,有控制说如果没找要到hook的函数时,就会出现异常提示然后退出,你可以试试,还是按照通用的方法hook你的api,只是在编译时用Release版本,就不会有问题了,但是同样还是存在问题的,比如你想hook notepad里用到的send函数(只是比如,当然他没用到),但是NotePad本身并没有静态连接ws2_32.dll这个连接库,而是他要动态加载的某一个dll静态连接了ws2_32.dll,这样就会出现虽然进程空间中有了ws2_32.dll和send函数的映象,但是却并没能够Hook住send的情况.这应该算是CAPIHook类的一个bug
      

  3.   

    to leon7909(leon):
    我没有用CAPIHook类,我根据Yariv Kaplan的StickyApp32改写了一个函数,没有你上面提到的异常;
    我截获了GetProcAddress,实现了我需要的功能。