我想将dll注入到NOTEPAD中
出现提示说NOTEPAD遇到错误需要关闭。
代码如下:BOOL insert()
{
DWORD pid = 0;
int ret = 0;
char * dllpath=NULL;
dllpath = "G:\\新建文件夹\\insert\\Debug";
if(_access(dllpath,0) ==-1 )
{
printf("access %s Faild\n",dllpath);
}
printf("dll path %s\n",dllpath);   HWND hWnd = FindWindow("NOTEPAD", NULL); // 以NOTEPAD为例
  
   ::GetWindowThreadProcessId(hWnd, &pid);

HANDLE hProcess = NULL;
HANDLE hRemoteThread = NULL;
void * pLibRemote = NULL;
DWORD hLibModule = 0;
HINSTANCE huser32 = NULL; huser32 = GetModuleHandle("user32.dll");
if(huser32 == NULL)
{
printf("Get huser32  HANDLE Failed\n");
        return FALSE;
} hProcess = OpenProcess(PROCESS_ALL_ACCESS,TRUE,pid);
if(hProcess == NULL)
{
printf("Get openProcess HANDLE Failed\n");
return FALSE;
} pLibRemote = VirtualAllocEx(hProcess,
                      NULL,
sizeof(dllpath),
MEM_COMMIT,
PAGE_READWRITE);
ret = WriteProcessMemory(hProcess,
                     pLibRemote,
(void *) dllpath,
sizeof(dllpath),
 NULL);
if(ret == 0)
{
printf("Write Remote Process Memory Failed\n");
return FALSE;
} hRemoteThread = CreateRemoteThread(hProcess,
                               NULL,
0,
(LPTHREAD_START_ROUTINE)
 GetProcAddress (huser32 ,"LoadLibraryA"),
pLibRemote,
0,
);
//这里出现问题?
//WaitForSingleObject(hRemoteThread,INFINITE); GetExitCodeThread(hRemoteThread,&hLibModule); CloseHandle(hRemoteThread); VirtualFreeEx(hProcess,
         pLibRemote,
 sizeof(dllpath),
 MEM_RELEASE);
CloseHandle(hProcess);
printf("INJECT FINISH\n");
return TRUE;}
int main()
{
insert();
return 1;
}

解决方案 »

  1.   

    程序没有错误!
    注入的进程NOTEPAD(记事本)提示出错
      

  2.   

    WriteProcessMemory中的第4参数,dllpath是指针类型的变量,sizeof(dllpath)是4(如果是32位程序),要给字符串的长度(包括最后的\0)才行。
      

  3.   

    我改成strlen(dllpath)+1;
    还是回出现一样的问题 ?
      

  4.   

    VirtualAllocEx(hProcess, 
    NULL, 
    strlen(dllpath)+1, 
    MEM_COMMIT, 
    PAGE_READWRITE); 
    这个也改了!
      

  5.   

    hRemoteThread = CreateRemoteThread(hProcess, 
                                  NULL, 
    0, 
    (LPTHREAD_START_ROUTINE) 
    GetProcAddress (huser32 ,"LoadLibraryA"), 
    pLibRemote, 
    0, 
    );//
    -----------------------------------------
    少了个参数,能编译通过么
      

  6.   

    我的错
    贴的时候弄掉了!
    hRemoteThread = CreateRemoteThread(hProcess, 
                                  NULL, 
    0, 
    (LPTHREAD_START_ROUTINE) 
    GetProcAddress (huser32 ,"LoadLibraryA"), 
    pLibRemote, 
    0, 
    NULL);// 
      

  7.   

    dllpath 要给绝对路径
    dllpath = "G:\\新建文件夹\\insert\\Debug\any.dll"; 
      

  8.   

    GetModuleHandle("kernel32.dll");