<<windows核心编程》里有个hook messagebox的例子,为什么我自己写的程序弹出的MessageBox它没有hook到?而按照书里说的打开notepad.exe,写些东西再关闭,弹出的messagebox却能hook到。
开始我以为是因为我用的mfc写的程序的缘故(vc6.0),后来我试了下写了个简单的纯sdk的程序,它所弹出的messagebox居然一样hook不到。有高手知道是什么原因么?这与程序库(user32.dll)的静态编译没有什么关系吧?我在mfc和纯sdk win32窗口程序里所调用的messagebox的方法如下:
MessageBox(NULL, "fail", "X", MB_OK);
MessageBoxW(NULL, L"ok", L"Z", MB_OK);

解决方案 »

  1.   

    是否你只HOOK了MessageboxA函数呀,你这里用的是MessageBoxW如果你没有HOOK这个你的就不会被钩住的。
      

  2.   

    在你弹出来的时候,先检查下那个dll有没注入到你的程序
      

  3.   

    看下我的这个源码对你有没有帮助,以前写的http://www.brsbox.com/filebox/down/fc/3dcebaa0f3fb26f02c60414639f48c4c
      

  4.   

    核心里的例子是注入后修改IAT的吧,你需要先确定注入是否成功了,用360查看进程模块看有没有注入进来先。修改IAT对加壳程序效果不行,最好用函数头来jmp XXXXXXXX,360的safemon.dll就是这样的
      

  5.   

    你判断是否成功加载的dll了没有
      

  6.   

    注入了的,我都加了log输出,有log文件生成了.
      

  7.   

    用 Rootkit Unhook检查一下你的HOOK 有没有成功.
    如果HOOK成功, RKU 会显示出HOOK的类型以及模块, 你这里是IAT Modification.
      

  8.   


    试了,但也是不行呀,你的那个程序只能hook住自己,其他都不能hook,连notepad弹出来的对话框都不能hook住呀。
      

  9.   

    你试试使用微软的Detours库,只Hook MessageBoxW就可以,不用Hook MessageBoxA,调用的时候也通过MessageBox调用,一般就能Hook到。能不能把那个程序的代码贴上来看一下
      

  10.   

    为什么我用同样的方法hook CreateProcess就可以呢?楼住还是贴代码上来吧
      

  11.   

    代码比较多,我把我测试写的所有代码都打包了,期待高手帮助!http://www.brsbox.com/filebox/down/fc/c5a38f0aa7f3454b75b9da4a728fc9d8
      

  12.   

    这和你的HOOK及调用都有关新的VS项目默认都是unicode,也就是都用W版的API如果你的HOOK只针对A版,那就HOOK不到,如果你HOOK的是W那么A和W都可以HOOK到.
    在NT系统里默认都是W(绝大部分),A版基本上都是把字符串转成WCHAR 再调用W版的你HOOK MessageBoxW 就都可以HOOK到了.
      

  13.   


    应该是你的hook函数类型设置问题
      

  14.   

    难道csdn真的找不到能帮我的人了!
      

  15.   

    把代码贴上来吧 你这样问 我们就跟盲人摸象一样本来也怀疑你是HOOK错A/W了 结果我试了XP SP3的NOTEPAD.EXE 弹窗是用MessageBoxW的 所以你HOOK应该没错 你应该检查一下流程 具体情况你也没描述清楚问你几个问题你HOOK用的是DLL还是EXE?
    远程HOOK NOTEPAD.EXE的时候 是怎么个实现过程?
    HOOK自己的时候又是什么实现过程?拿出来看看
      

  16.   

    都不肯帮忙,只好自己研究了,问题已解决,发现是修改IAT的时候失败了。
      

  17.   

    需要把dll文件注入到exe文件中~!
      

  18.   

    lz,CSDN的回答只能给个大概方向,具体还是要自己摸索的。