xp64 bit 无法远程注入使用 CreateRemoteThread创建远程线程失败

miss味道 2010-12-06 12:00:49
上一帖

在64下,我想把自己在win32下的编译的DLL远程注入一个进程中,却在CreateRemoteThread创建失败了(xp32bit可以的)
怎么也不行。xp32bit和xp64位有这么多的不兼容吗?



int LoadLib(DWORD dwProcessId, LPWSTR lpszLibName)
{
HANDLE hProcess = NULL;
HANDLE hThread = NULL;
LPWSTR lpszRemoteFile = NULL;


// 打开远程进程
hProcess = OpenProcess(PROCESS_CREATE_THREAD
| PROCESS_VM_OPERATION
| PROCESS_VM_WRITE,
FALSE,
dwProcessId);

if (hProcess == NULL)
{
return FALSE;
}


// 在远程进程中分配存贮DLL文件名的空间
lpszRemoteFile = (LPWSTR)VirtualAllocEx(hProcess, NULL,
sizeof(WCHAR) * lstrlenW(lpszLibName) + 1,
MEM_COMMIT, PAGE_READWRITE);
if (lpszRemoteFile == NULL)
{
return FALSE;
}

// 复制DLL文件名到远程刚分配的进程空间
if (!WriteProcessMemory(hProcess, lpszRemoteFile,
(PVOID)lpszLibName, sizeof(WCHAR) * lstrlenW(lpszLibName) + 1,
NULL))
{
return FALSE;
}
// 取得LoadLibrary函数在Kennel32.dll中的地址
PTHREAD_START_ROUTINE pfnThreadRtn =
(PTHREAD_START_ROUTINE)GetProcAddress(
GetModuleHandle("Kernel32.dll"),"LoadLibraryW");
if (pfnThreadRtn == NULL)
{
return FALSE;
}
// 创建远程线程
hThread = CreateRemoteThread(hProcess,
NULL,
0,
pfnThreadRtn, // LoadLibrary地址
lpszRemoteFile, // 要加载的DLL名
0,
NULL);
DWORD errorCode=GetLastError();//获取错误编码号为:5
if (hThread == NULL) //失败在此就直接返回了
{
return FALSE;
}

// 等待线程返回

return TRUE;
}



...全文
621 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
miss味道 2011-11-03
  • 打赏
  • 举报
回复
这个问题是因为之前的网上下载的程序在xp64下有问题(32上是正常的),我们抛弃了这种方法。。
剑_雪 2011-11-01
  • 打赏
  • 举报
回复
我碰到的情况和你一样,注入自己写的例程没问题

一旦是系统程序,如记事本,写字板,画图程序

等,都他妈的不行。

就连千千静听也不行。
miss味道 2010-12-07
  • 打赏
  • 举报
回复
经过调试,发现程序在走到这句是出现了不同.


// 在远程进程中分配存贮DLL文件名的空间
lpszRemoteFile = (LPWSTR)VirtualAllocEx(hProcess, NULL,
sizeof(WCHAR) * lstrlenW(lpszLibName) + 1,
MEM_COMMIT, PAGE_READWRITE);

//lpszRemoteFile :在自己创建的进程时,这里是可以的,而
//系统进程则就出现错误的指针,这是为什么呀,远程进程空间不够
miss味道 2010-12-07
  • 打赏
  • 举报
回复
网上找的通过EnableDebugPrivilege()//提升进程级别,但是很多都是GetCurrentProcess()提升当前进程的级别,不太明白这是为什么。按我理解来说需要向那个进程中注入dll就应该提调此进程的级别才时。
不知道这样的理解对不对
miss味道 2010-12-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lsq19871207 的回复:]
引用 4 楼 lisunlin0 的回复:
32位进程和64位进程的地址空间在用户层是完成隔离的。就是说你的32位DLL无法注入64位进程里面
----32位进程甚至无法打开64位进程的句柄。


+1
[/Quote]

不好意各位,问题没解决,昨天尝试了一下自己创建的程序进程可以远程注入,但是系统的却不行,如:notepad.exe..

针对你所说的这种情况,有什么方法可以解决吗?
足球中国 2010-12-06
  • 打赏
  • 举报
回复
xp和w7 server2008里安全机制不一样了。
应该是权限问题。
Eleven 2010-12-06
  • 打赏
  • 举报
回复
获取错误编码号为:5
Access is denied.
权限问题
信阳毛尖 2010-12-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lisunlin0 的回复:]
32位进程和64位进程的地址空间在用户层是完成隔离的。就是说你的32位DLL无法注入64位进程里面
----32位进程甚至无法打开64位进程的句柄。
[/Quote]

+1
oyljerry 2010-12-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 youaremy1bestlove 的回复:]

引用 1 ,2楼 visualeleven 的回复:
获取错误编码号为:5
Access is denied.
权限问题

权限问题,是什么意思?网上查的也说是权限问题,是什么地方需要设置吗?
[/Quote]
程序权限不够,不知道64bit上是否SeDebugPrivilege等
dibotiger 2010-12-06
  • 打赏
  • 举报
回复
呵呵,不要被客户无知的需求所引导.
无数的木马开发者都会被客户畸形需求所引导.
客户大喊一声"我要64位和32位混用的木马,你就不能搞出来?".
你就闷头开始大写代码特调试代码,为何不花点时间看看系统特性呢?


大部分的使用者都不知道一个事实:64位系统虽然兼容32位程序,
只不过32位的程序只能在自己32位的LOADER里运行"但是作为开发者,我们必须知道.


所以,你还在指望你的32位DLL完全兼容并控制64位的系统?

所以,要搞64位系统,你就搞个纯的64位的DLL.纯爷们,底气才足.
不过很不幸,如果要走回头路,64位DLL那是更不可能指望在32位系统上运行的.


sunlin7 2010-12-06
  • 打赏
  • 举报
回复
32位进程和64位进程的地址空间在用户层是完成隔离的。就是说你的32位DLL无法注入64位进程里面
----32位进程甚至无法打开64位进程的句柄。
miss味道 2010-12-06
  • 打赏
  • 举报
回复
[Quote=引用 1 ,2楼 visualeleven 的回复:]
获取错误编码号为:5
Access is denied.
权限问题
[/Quote]
权限问题,是什么意思?网上查的也说是权限问题,是什么地方需要设置吗?

15,471

社区成员

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

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