由于每个WIN32进程拥有独立的地址空间,所以写远程线程函数不像写本地线程函数那样简单。
这里提供一个办法,像写本地线程函数一样写远程线程函数。(下载头文件和LIB文件)
/**
*创建远程线程
*/
HANDLE CreateRemoteThreadEx(
HANDLE hProcess, //目标进程句柄,拥有PROCESS_ALL_ACCESS访问权限。
HMODULE hModule, //线程函数所在的模块,可以是EXE(直接传NULL)也可以是DLL。
LPTHREAD_START_ROUTINE lpStartAddress, //线程函数地址。
LPVOID lpParameter //线程函数参数,可以为NULL。
);
例子:
#include "stdafx.h"
#include <Windows.h>
#include "RemoteThreadLib.h"
//修改默认基址
#pragma comment(linker, "/BASE:0x13150000")
//远程线程函数
static DWORD WINAPI ThreadFunc(LPVOID pData)
{
while (TRUE)
{
//这里可以调用WINDOWS API以及你自己在这个模块里实现的函数和类等。
OutputDebugString("ThreadFunc");
MessageBox(NULL, "My Remote Thread Message!", "RemoteThreadLib", MB_OK);
Sleep(5 * 1000);
}
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
EnableDebugPrivilege(TRUE); //提权
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 4000); //从任务管理器找一个进程ID,比如记事本
if (hProcess != NULL)
{
HANDLE hThread = CreateRemoteThreadEx(hProcess, GetModuleHandle(NULL), ThreadFunc, NULL);
if (hThread != NULL)
{
//成功
}
CloseHandle(hProcess);
}
return 0;
}
VS2003+XP下调试通过!
posted on 2011-01-28 11:56
张志松 阅读(528)
评论(0) 编辑 收藏 引用 所属分类:
VC/MFC