贴一下VirtualAllocEx调用的那一句

解决方案 »

  1.   

    这样,我把主要的代码也贴一下吧:HANDLE hPro32 = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPro32ID);
    if(NULL == hPro32)
    {
    MessageBox(L"进程退出,注入失败", L"提示");
    return;
    } DWORD dwSize = 1024;
    DWORD dwWritten;LPVOID lpBuf = VirtualAllocEx(
    hPro32, NULL, dwSize, 
    MEM_COMMIT, PAGE_EXECUTE_READWRITE );
    if(NULL == lpBuf)
    {
    CloseHandle(hPro32);
    return;
    }if(WriteProcessMemory(hPro32, lpBuf, (LPVOID)RemoteProc, dwSize, &dwWritten))
    {
    if(dwWritten != dwSize)
    {
    VirtualFreeEx(hPro32, lpBuf, dwSize, MEM_DECOMMIT);
    CloseHandle(hPro32);
    return;
    }
    }
    else
    {
    CloseHandle(hPro32);
    return
    }DWORD dwError;
    DWORD dwID;
    LPVOID pFunc = LoadLibrary;
    HANDLE hThread = CreateRemoteThread(
    hPro32, NULL, 0,
    (LPTHREAD_START_ROUTINE)RemoteProc, NULL, 0, &dwID);
    if(NULL == hThread)
    {
    dwError = GetLastError();
    CloseHandle(hPro32);
    return;
    }WaitForSingleObject(hThread, INFINITE);
    VirtualFreeEx(hPro32, lpBuf, dwSize, MEM_DECOMMIT);
    CloseHandle(hThread);
    CloseHandle(hPro32);线程函数执行反汇编代码内存情况:
    VirtualAllocEx返回的值:0x0161000,目标进程0x01610000内存截图:
      

  2.   

    一讨论问题,连个人影都没有,csdn这是怎么了?
      

  3.   

    看起来没问题。需要注意的就是尽量用Release版,再就是远程 函数中不要调别的什么自定义函数,看起来都注意了
      

  4.   


    Release也不行,依然提示那个错误,就奇了怪了,问题到底出在什么地方
      

  5.   

    还是多参考下网上的例子吧.
    http://blog.csdn.net/vcforever/article/details/319872
    百度一搜, 还是很多的.
      

  6.   

    WIN7  系统是不是有什么保护机制?
      

  7.   

    昨晚在群里讨论了这个问题,被别人一语点破,对自己真是无语了,习惯性的将本地线程地址传递给CreateRemoteThread函数,才引发这个蛋疼的问题,最后感谢上面几位朋友的讨论!