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

贪食蛇男 2011-10-31 04:03:24
下面这段代码试图在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;
}

...全文
517 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
挨踢 2012-09-28
  • 打赏
  • 举报
回复
最近也被这个问题困扰,MARK
Lactoferrin 2012-04-26
  • 打赏
  • 举报
回复
http://blog.csdn.net/lactoferrin/article/details/7487959
狸氏包子 2012-04-24
  • 打赏
  • 举报
回复
楼主= =win7 SP1 64位, 32位进程注入32位进程我怎么没成功呀= = createremotethread也是拒绝访问 5
贪食蛇男 2011-10-31
  • 打赏
  • 举报
回复
OK,分给你吧,我已经做了,起一个64位的进程,把要注入的DLL和要注入的进程号传给它,让它注……
oyljerry 2011-10-31
  • 打赏
  • 举报
回复
64位上,64位程序跟32位程序是分割开的,估计还是最好用64位的注入.

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧