首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

使用32位进程创建64位进程的远程线程的有关问题

2012-12-27 
使用32位进程创建64位进程的远程线程的问题下面这段代码试图在32位的进程中注入一个64位的DLL到一个64位进

使用32位进程创建64位进程的远程线程的问题
下面这段代码试图在32位的进程中注入一个64位的DLL到一个64位进程中,但是 CreateRemoteThread 失败,ERRORCODE 5(无权限),我想知道这是系统机制吗?我在64位WIN7上,32位进程注入32位进程、64位进程注入64位进程、64位进程注入32位进程都可以成功,基于同样的方式,只有32位注入64位进程时创建远程线程失败。
难道只能我自己再在注入的时候起一个64位的傀儡进程,用这个傀儡进程再注入目标64位进程?



BOOL WINAPI InjectDll32To64W(PPROCESS_INFORMATION pPI, LPCWSTR dll, LONGLONG funcAddr)
{
    BOOL bRet = FALSE;

    do
    {
        if(!funcAddr)
        {
            break;
        }

        SIZE_T dllLen = STR_LENW(dll);
        if(!dllLen || dllLen > 250)
        {
            break;
        }

        SIZE_T len = (dllLen + 1) * sizeof(WCHAR);
        void* remoteMem = VirtualAllocEx(pPI->hProcess, NULL, len, MEM_COMMIT, PAGE_READWRITE);
        if(!remoteMem)
        {
            break;
        }

        SIZE_T writed = 0;
        if(!WriteProcessMemory(pPI->hProcess, remoteMem, dll, len, &writed))
        {
            break;
        }

        HANDLE hThread = CreateRemoteThread(pPI->hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)funcAddr, remoteMem, 0, NULL);
        if(!hThread)
        {
            char tmp[MAX_PATH] = {0};
            sprintf(tmp, "创建远程线程失败,错误码: %d", GetLastError());
            OutputDebugStringA(tmp);
            break;
        }
        CloseHandle(hThread);

        bRet = TRUE;
    } while (FALSE);

    return bRet;
}


[最优解释]
64位上,64位程序跟32位程序是分割开的,估计还是最好用64位的注入.
[其他解释]
OK,分给你吧,我已经做了,起一个64位的进程,把要注入的DLL和要注入的进程号传给它,让它注……

[其他解释]
楼主= =win7 SP1 64位, 32位进程注入32位进程我怎么没成功呀= = createremotethread也是拒绝访问 5
[其他解释]
http://blog.csdn.net/lactoferrin/article/details/7487959


[其他解释]
最近也被这个问题困扰,MARK

热点排行