由于每个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 
张志松 阅读(563) 
评论(0)  编辑 收藏 引用  所属分类: 
VC/MFC