一个MFC的扩展dll,用来hook键盘消息,一个对话框可以启动这个hook(全局的键盘hook),实验也确实可以在txt文件中正确的记录键盘输入
然后另外一个对话框程序也可以成功将某个dll注入到另外一个程序中,
但问题是,我想把这几个联合起来用,先把dll注入到程序,然后按一个键,也能hook这个按键,但这个时候就不行了。那么怎样能让注入到另外一个程序中的这个dll对我按的某个键有反应呢?请至少给个思路吧谢谢,我卡在这里几天无法前进,或者说我这个想法本就是错误的?希望各位高手说说

解决方案 »

  1.   

    Hook要使用MFC规则DLL,MFC扩展DLL只能被MFC程序加载,当注入的进程不是MFC程序时则不能正常运行。先把这点改了,如果还有问题再来分析。
      

  2.   

    如果想盗QQ号的话,建议还是免了吧,qq应该已经有了防护的机制
      

  3.   

    cnzdgs老师,想您的时候,您就及时出现了,谢谢您的提示,我马上去测试
      

  4.   

    用标准的dll库,试试另外,如果是要做全局键盘过滤,建议用键盘过滤驱动程序,很简单就能实现
      

  5.   

    我想换一种方式,不用全局钩子,先一步步来,先用线程钩子,实验对象是msn,比如我启动一个msn,启动后,挂钩子到这个msn上
    那么我实验的结果:DWORD hThread = GetWindowThreadProcessId(FindWindow("Windows Messenger", NULL ), NULL);//这种方式 返回是0DWORD hThread = GetCurrentProcessId();//曾经用这个做实验,有返回值,但是下面运行SetWindowsHookEx,返回值是0 //glhDLLHook来自于dllmain函数的第一个参数glhKeyHook=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,glhDLLHook,hThread);请问如何做,才能成功的挂到msn上?我的本意是,不打算用全局钩子,用线程钩子,先试验hook线程成功,然后再来注入,再来hook注入的程序同时还问几个问题:
    1.hook和注入是不是一定要分成2个程序写?
    2.在cnzdgs老师的回帖说“Hook要使用MFC规则DLL,”可这样生成的程序里没有dllmain,那我如何得到SetWindowsHookEx函数的第三个参数??对于这个能说说由来么?
    3.是不是要注入就一定要用dll?如果是,那么什么时候用的mfc的dll,什么时候用win32DLL(也就是在vc工程向导里选哪一种的问题),请讲解一下好么?我是新手,请多指教,谢谢,顺便说一句,我只是单纯研究下技术
      

  6.   

    Hook要使用MFC规则DLL..
      

  7.   

    可以用FindWindow、GetWindowThreadProcessId的方法获得目标窗口的线程ID,然后只Hook这个线程,可能是你的窗口类名给的不对,或者窗口不存在。
    你所说的hook和注入分别指什么?DLL可以是同一个。
    HMODULE可以用GetModuleHandle或AfxGetInstanceHandle来获取。
    注入不一定要用DLL,只是用DLL比较简单。注入的DLL应该尽量用Win32 DLL,如果要显示界面,用Win32比较费劲,可以用MFC规则DLL,如果被注入的是MFC程序,可以用MFC扩展DLL。
      

  8.   

    cnzdgs老师,你好,我用你说的方法首先我生产了一个win32dll工程,写了一个hook,然后又生产了一个简单的对话框,对话框上有个按钮用来启动hook
    按下去之后调用 DWORD hProcId;
     
      HWND gWnd = FindWindow(NULL,"aa.txt - Notepad"); //我这里用一个aa.txt做实验
      DWORD hThread = GetWindowThreadProcessId(gWnd,&hProcId);
     
      glhKeyHook=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,glhDLLHook,hThread);返回都是成功的,但是当我在这个aa.txt上随便按几个键,可KeyboardProc里面的没有记录到任何东西,下断点调试,按任何一个键都没反应,不过改成全局钩子,就是正常的,并且能记录按下的键,不晓得问题出在哪里
      

  9.   

    还有个很奇怪的现象,如果我把当前窗口改为这个对话框,在键盘上按下某个键,记下来过,但是退出后再次启动对话框,再按hook又不能记录了,再试还是不能记录同时我改成
    glhKeyHook=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,GetCurrentProcessId());但是glhKeyHook返回的是0