首页 > 用户发贴区 > 编程问题提问区 > DLL远程注入问题
2008
05-14

我用C语言做DLL远程注入,当DLL文件注入到explorer.exe空间里后,在DLL内部创建一个属于explorer.exe进程的线程,该
线程的功能是设置一个WH_KEYBOARD钩子,可以提示钩子可以创建成功,但是却不起作用,我查看了一下线程,得知
当线程的工作完成后就自动结束,而不是一直存在,资料里面说当一个线程把自己的任务完成后它就会自动退出。
我想知道怎么才能使这个钩子起作用,DLL注入有好几种方式,但这种方式为什么不可以呢,
错误到底出在哪里呢?还请高人指点,谢谢!!!
部分源码如下:


#include “stdafx.h”
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>


static HHOOK  hHook=NULL;
static HINSTANCE hInstance=NULL;
HANDLE   hThread;
DWORD   dwThreadId;


long WINAPI hHookProc(int iCode,WPARAM wParam,LPARAM lParam)
{
 MessageBox(NULL,”有按键”,”消息”,MB_OK);
 return CallNextHookEx(hHook,iCode,wParam,lParam);
}
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
 char* pszThreadId = (char*)malloc(10*sizeof(char));
 hHook=NULL;//hHook是全局变量,钩子的句柄
 hHook=SetWindowsHookEx(WH_KEYBOARD,hHookProc,hInstance,0);//hInstance是全局变量,这里的最后两个参数任凭我怎么改也实现不了
 if(!hHook)
  MessageBox(0,”启动钩子失败”,”消息”,MB_OK);
 else
  MessageBox(0,”启动钩子成功”,”消息”,MB_OK); 
 return 0;
}
bool EnableKeyHook()

 hThread=CreateThread(NULL,0,ThreadProc,0,0,&dwThreadId);
 if(!hThread)
  MessageBox(NULL,”线程创建错误”,”错误”,MB_OK);
 else
  MessageBox(NULL,”线程创建成功”,”OK”,MB_OK);
 return hHook!=NULL;
}
BOOL APIENTRY DllMain(HINSTANCE hInst,DWORD fdwReason,LPVOID lpReserved)
{
    switch(fdwReason)
 {
        case DLL_PROCESS_ATTACH:
   hInstance=hInst;//全局变量hInstance的初始化
   EnableKeyHook();
        break;
    }
    return TRUE;
}


DLL远程注入问题》有 1 条评论

  1. builder 说:

    这里怎么这么冷静呢,提个问题沉这么长时间

留下一个回复