LPVOID pFunc = LoadLibraryA;    
HANDLE hThread = CreateRemoteThread( hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, lpBuf, 0, &dwID ); 每次到这一步的时候线程能够直接创建。但是dll就是插不进去,
dll路径我也换成完整的了。直接在程序里面写loadlibrary(dllname) dllmain函数也可以正常执行。

解决方案 »

  1.   

    有把DLL路径写进去吗? pvRemoteMem=VirtualAllocEx(hProcess,NULL,strlen(pcLibraryName)+1,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
    WriteProcessMemory(hProcess,pvRemoteMem,(void*)pcLibraryName,strlen(pcLibraryName)+1,&dwBytesWritten) LPVOID pFunc = LoadLibraryA;
    hRemoteThread=CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)pFunc,pvRemoteMem,0,&dwRemoteThreadId);
      

  2.   

    查看我的blog,有源码
    http://blog.csdn.net/hua1998/archive/2006/10/10/1328651.aspx
      

  3.   

    远程注入调用CreateRemoteThread杀毒软件基本都会阻止掉
      

  4.   

    DLL路径应该是目标进程地址空间里的,弄对了没有?
      

  5.   

    strlen(pcLibraryName)+1
    居然是我分配的空间太小了,加上sizeof(wchar) * lstrlen(pcLibraryName)+1就 ok了,非常感谢2楼的兄弟另外谁解释一下
      

  6.   

    strlen是多字节的
    lstrlen是宽字节的
      

  7.   

    你不是调用LoadLibraryA么?怎么用的是宽字符的字符串长度?
      

  8.   


    loadlibrary 在目标进程中也会有吧,昨天调试已经通过了dll已经加载到计算机的进程中了,用 360测试进程模块可以看到我加载的dll
      

  9.   

    俺也遇到同样的问题了  Dll路径肯定写进去了  因为偶用ReadProcessMemory读出来了 是正确的     hProcess = OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION|PROCESS_VM_WRITE|PROCESS_VM_READ,FALSE,dwPID);    ::WriteProcessMemory ( hProcess, pDataRemote, szDllPath, sizeof(szDllPath), NULL );HMODULE hModule=::GetModuleHandle("Kernel32.dll");
    LPTHREAD_START_ROUTINE pfnStartRoutine = (LPTHREAD_START_ROUTINE)::GetProcAddress(hModule, "LoadLibraryW");

    // 创建远程线程执行代码
    DWORD dwThreadID = 0;
    HANDLE hThread = ::CreateRemoteThread ( hProcess, NULL, 0,pfnStartRoutine, pDataRemote, 0,&dwThreadID );
    if ( HANDLE_IS_VALID(hThread) )
    {
       // 等待远程线程结束
       ::WaitForSingleObject ( hThread, INFINITE );
       DWORD dwRetCode = 0;
       ::GetExitCodeThread ( hThread, &dwRetCode );
       TRACE ("run and return %d\n", dwRetCode );
    }
    在DllMain处设置断点咋走不到呢,DllMain中还整了个While(1)呢并且创建完线程后::WaitForSingleObject ( hThread, INFINITE );立刻返回了。没有等待啊?
    执行了WaitForSingleObject 是不是代表线程被创建成功了,只不过由于其他原因没有载入Dll呢?