我在做一个类似于金山词霸的程序,需要在XP下运行,于是需要对ExtTextOutW进行挂钩,我首先注册了一个鼠标钩子,这是为了能注入dll到每个拥有GUI的进程,然后开始修改import表,郁闷的是,程序已运行自己就被灭了,连声招呼都不打,我这个晕那,后来我改用微软的detour2.1也一样,哪位大侠是英俊与智慧的化身,正义与利智的代表帮咱看看吧。 还有阿要是我用F5 DEBUG的话,连带MSDEV一样连招呼不打就挂。我这里先谢过了。

解决方案 »

  1.   

    把代码贴出来看看,我写了那么多API钩子都没出错过..修改IAT和IMP两种我都一直用..都没出现过LZ的情况..
      

  2.   

    不用贴了我把别人的成形的程序反汇编了
    他们的xp版都不是修改ITA/IMP
    还是想点别的法子这两种办法只能跑在2000下
      

  3.   

    superzjx2000(承桴浮于海)
    不用贴了我把别人的成形的程序反汇编了
    他们的xp版都不是修改ITA/IMP
    还是想点别的法子这两种办法只能跑在2000下-------------------------------
    是吗?怎么我写的又可以跑在XP以及2003下呢?奇怪了..
      

  4.   

    到偶blog去看看撒,,,,就写了一篇文章,,关于api钩子的,嘿嘿
      

  5.   

    修改import表的方法不好,如果程序已经运行,改了也没用,正确的APIHOOK的写法是修改目标函数的代码,在代码上作钩子
      

  6.   

    对了,我要是只注入一个进程(explore)就没什么问题,我用的是detour,
    我的想法是这样的,起一个鼠标hook,勾的是系统里所有的GUI线程,然后,当鼠标指向一个窗口时,我可以得到其进程和线程ID,然后修改其ITA,很奇怪不可以,不晓得为什么。
    我原来是起了鼠标钩子之后,查全部的输入表,改掉全部的thunk里的函数地址,挂了,就是一开始我说的那样子,后来就改了,还是不成。
    问个问题啊,当我起了钩子后,其callback被调用时,钩子所在的dll是被映射到什么地址空间?
    有没有办法让它映射到鼠标所指窗口所在的进程的地址空间,我是没办法,还要大侠们指点一二。谢了。
      

  7.   

    我写的成功呀..就10分钟的问题..就是成功Hook Explorer的ExtTextOutW.在XP SP2下弄的.
      

  8.   

    http://photo.blog.163.com/photo/Lyn8O3ZY9eFXMqFUIoNQQQ==/2296835809959028501.jpg
    这是我成功Hook Explorer的ExtTextOutW成功的图片..可以与我一起讨论.
    用调试输出的方法简单处理了一下..因为写这个测试的程序只用了10分钟.
    上面的URL是163的,放心好了.
      

  9.   

    文章我正在看啊,
    不过我不会汇编。大哥问个问题啊
    拦截TextOutExtW的话,是否只需要注入explore就可以了?
      

  10.   

    DLL的安装代码
    BOOL WINAPI InstallHook()
    {
       sg_hGetMsgHook=::SetWindowsHookEx(
    WH_GETMESSAGE,
    (HOOKPROC)(MsgProc),
    glhInstance,              
    0
    );
       return TRUE;    // ModuleFromAddress(MsgProc)
    }EXE调用  InstallHook();后如果不退出程序,HOOK能构正常工作,退出后 无法正常工作。
    不知道 什么原因 感谢大家能指点!! 如何能够实现 EXE退出后HOOK能正常工作
      

  11.   

    建议用CreateRemoteProcessThread(...  "LoadLibriaryw", "your.dll"  )
    在your。dll里进行挂钩,
    也就是说只注入,不管卸载,并使夫进程和子进程不带关联,试试吧,我也没把握的。