XP 下 CreateRemoteThread 的奇怪问题

WispyDeng 2009-08-31 07:17:19
void Load()
{
BOOL bSuccess = FALSE;
STARTUPINFO si = {0};
PROCESS_INFORMATION pi = {0};
si.cb = sizeof(si);

DWORD dwCreateFlag = CREATE_SUSPENDED;

TCHAR szFile1[] = TEXT("C:\\windows\\system32\\notepad.exe");
bSuccess = ::CreateProcess( NULL, szFile1, NULL, NULL, FALSE, dwCreateFlag, NULL, NULL, &si, &pi );

wchar_t szFilePath[MAX_PATH] = L"C:\\windows\\system32\\user32.dll";

LPVOID lpFilePath = VirtualAllocEx( pi.hProcess,NULL,sizeof(szFilePath),MEM_COMMIT,PAGE_READWRITE );
if( lpFilePath )
{
DWORD dwBytes = 0;
WriteProcessMemory( pi.hProcess, lpFilePath, szFilePath, MAX_PATH, &dwBytes );
HMODULE hKernel = GetModuleHandleW(L"Kernel32.dll");
LPVOID pLoadLibrary = GetProcAddress( hKernel,"LoadLibraryW" );

DWORD dwThreadId = 0;
HANDLE hThread = NULL;
hThread = CreateRemoteThread( pi.hProcess,NULL,0,(LPTHREAD_START_ROUTINE)pLoadLibrary,lpFilePath,CREATE_SUSPENDED,&dwThreadId );
ResumeThread(hThread);
}
// 远程线程运行起来后 先 Sleep(5) 能出现记事本窗口, Sleep(10) 以上就不行了
Sleep(10);
//
ResumeThread( pi.hThread );
}
========================================
就以上一个简单的创建远程线程的例子,在 Windows7、Windows 2003 下正常运行,并且无论 Sleep 多长时间都可以看到记事本窗口,但 XP 下就不行了,Sleep 超过 5 ms Notepad 进程都是突然无影踪
这如何解析?
...全文
124 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenhui530 2009-09-01
  • 打赏
  • 举报
回复
SetThreadContext
chenhui530 2009-08-31
  • 打赏
  • 举报
回复
注入的方法就存在问题
既然进程是你自己创建的就用debug api啊
feilinhe 2009-08-31
  • 打赏
  • 举报
回复
换台机器试一下~
MoXiaoRab 2009-08-31
  • 打赏
  • 举报
回复
你的意思是注入后,记事本自己崩溃掉了?
WispyDeng 2009-08-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 feilinhe 的回复:]
换台机器试一下~
[/Quote]

用虚拟机装了一个纯净的 XP 系统,也是一样了
WispyDeng 2009-08-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 chenhui530 的回复:]
注入的方法就存在问题
既然进程是你自己创建的就用debug api啊
[/Quote]

应该怎么用?请指教,谢谢
WispyDeng 2009-08-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tr0j4n 的回复:]
你的意思是注入后,记事本自己崩溃掉了?
[/Quote]

是的,悄然崩溃了

15,472

社区成员

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

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