采用改写IAT的方法注入全局API HOOK,DLL为APIHOOK_DLL,调用程序为APIHOOK_EXE,SetWindowHookEx的第四个参数为0,DLL句柄正确。
现在的问题是,这个DLL只能HOOK到APIHOOK_EXE的进程中,并且使用正确。但是我明明使用了全局HOOK,应该是可以对系统中所有线程进行HOOK才对呀?
我在网上看到有些朋友也遇到了类似的问题,希望知道解决办法的大侠帮忙分析一下原因。非常感谢

解决方案 »

  1.   

    词霸为啥能hook每个程序呢/?还不是临时hook的.
      

  2.   

    我觉得肯定是在代码的什么地方出了问题,我试了试Windows核心编成上的代码,的确可以全局HOOK,比较了一下我的代码,发现两者的实现原理是一样的,只是个别函数的使用不同,努力分析中。
    难道SetWindowHookEx的第4个参数为0页不能全局HOOK么?难道还有别地方需要特别注意?奇怪
      

  3.   

    网上这样的代码大把,你去对比一下为什么别人 SetWindowHookEx  0 就可以
      

  4.   

    有一点我要跟楼主讲清楚的,就是<<Windows 2000NT核心编程>>里面讲的IAT方法Hook全局API是有问题的,不是全部的API都Hook得了,本人很早以前就试过了,至于金山之类的软件它们是用另外一种方法,改写函数开始的4个字节,JMP xxxxxxxx这样来实现的,这种方法才是最有效的
      

  5.   

    谢谢楼上的兄弟,我也知道IAT方法Hook全局API不是对所有的API都有效,我也没准备HOOK所有的API,对于改写函数开始的四字节,用汇编指令JMP我已经实现了,我提的这个问题完全是学术上的,呵呵。
    现在我用MessageBoxA(W)试验都没有成功,说明我的代码中还是有问题。网上的代码的确很多,比较并没有什么本质的区别(我并没有一行一行的比较分析,这是最后一步做法),我还是努力查找原因,如果有幸解决了,一定和大家共享……。
    希望大家更踊跃的讨论。
      

  6.   

    全局钩子,不要忘了,全局数据共享,即#pragma data_seg(".sharedata")
    另外,instance也不要忘记设定
      

  7.   

    楼主,不是你代码的问题,MessageBox不是肯定可以Hook到的,我以前用IAT的方法就是这样了,在MFC里面也Hook不到AfxMessageBox,虽然AfxMessageBox最终还是调用MessageBox,但就是Hook不到,用VB也差不多,其实不是楼主你的代码有问题,而是IAT这种方法的问题而已
      

  8.   

    frank_necsthz(磊磊)兄:请问,你提到的instance是指哪一个?
    maijian(asmvc)雄:谢谢支持,我用Windows核心编程中的代码可以HOOK住MessageBox,用我自己的代码,只HOOK调用函数,也可以,就是无法HOOK住全局的MessageBox,奇怪。
    希望大家继续提出宝贵的建议,这也是我们共同学习的依次机会,我马上再增加帖子的分数,就当作对大家回复的感谢。
      

  9.   

    修改IAT的那部分必须放到回调函数里面去执行,由系统来调用。而且你还要HOOK LoadLibrary等函数才能HOOK到后面加载的模块。