首页
社区
课程
招聘
[求助]CreateRemoteThread( )中的线程是不是不能使用VCL?
发表于: 2010-9-29 21:40 3706

[求助]CreateRemoteThread( )中的线程是不是不能使用VCL?

2010-9-29 21:40
3706
DWORD * Code;
DWORD * pRemote;
unsigned int InjectSize;
Code=(DWORD *)(GetModuleHandle(NULL));
InjectSize= PImageOptionalHeader((DWORD *)(int(Code)+PImageDosHeader(Code)->_lfanew+sizeof(DWORD)+sizeof(TImageFileHeader)))->SizeOfImage;
//ShowMessage(IntToStr(InjectSize));
//ShowMessage(IntToStr(DWORD(Code)));
DWORD Pid,Tid;
HANDLE ProcessHandle;
GetWindowThreadProcessId(FindWindow(NULL,"ok"), &Pid);
//ShowMessage(IntToStr(Pid));
ProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, false, Pid);
pRemote=(DWORD *)VirtualAllocEx(ProcessHandle,Code,InjectSize,MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
//ShowMessage("aa");
bool ret;
ret=WriteProcessMemory(ProcessHandle, pRemote, Code, InjectSize, &Tid);
//ShowMessage(IntToStr(ret));
// ShowMessage("bb");
CreateRemoteThread(ProcessHandle, NULL, 0x10000, (LPTHREAD_START_ROUTINE)0x58400000, Code, 0, NULL);
//CreateRemoteThread(ProcessHandle, NULL, 0,(LPTHREAD_START_ROUTINE)ok, NULL, 0, NULL);
// ShowMessage("cc");
CloseHandle(ProcessHandle);

下面是线程函数
void __stdcall  ok()
{//ShowMessage("ok");
MessageBoxA(NULL,"a","a",MB_OK);
ShowMessage("ok");    <-------------只要加了这句立即出错。
}

以上是无DLL注入进程的关键代码,就是直接EXE注入。编译前加上#include <windows.hpp>
是不是CreateRemoteThread的线程中不能使用VCL窗口?
如果我要线程中用VCL窗口有别的办法么?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 217
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
ShowMessage("ok");    好象是MFC的函数,如果目标进程没有加载了此函数的DLL,就无法调用此函数,而,MessageBoxA是基本API,在user32.dll中,一般的程序都会加载它。
2010-9-30 09:04
0
雪    币: 126
活跃值: (169)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
ShowMessage带了界面.那么就要处理Windows消息循环.
不管是VCL还是MFC你要在线程中创建界面都要自己处理消息循环.这些类库自带的消息循环是在主线程中的.
你的线程要GetMessage,PeekMessage等等
2010-10-3 23:06
0
游客
登录 | 注册 方可回帖
返回
//