劫持进程注入

劫持进程注入和远程线程注入的区别就是  远程线程注入是向一个正在运行中的进程注入 而劫持进程注入则是自己打开一个进程(以挂起的方式)  然后再进行注入的操作 

这样做的原因是当进程在挂起的状态时他的所有线程都是处于未启用的阶段  这样就可以避免目标进程的反注入线程的检测 从而使得注入的操作成功率更高

void HackThreadInject(PCHAR szPath, PCHAR DeName)
{
	//第一步以挂起的形式打开目标进程
	STARTUPINFOA sta = { 0 };    //结构体成员全部初始化为0
	sta.cb = sizeof(STARTUPINFO);     //记得赋值大小
	PROCESS_INFORMATION pri = { 0 };
	BOOL proc = CreateProcessA(
		DeName,
		NULL,
		NULL,
		NULL,
		NULL,
		CREATE_SUSPENDED,
		NULL,
		NULL,
		&sta,
		&pri             //句柄会传入到这个结构体
	);
	if (!proc)
	{
		return;
	}
	//第二步在目标进程分配内存  用于写入loadlibrary的参数
	LPVOID lpAlloc = VirtualAllocEx(pri.hProcess, NULL, strlen(szPath) + 1, MEM_COMMIT, PAGE_READWRITE);
	if (!lpAlloc)
	{
		return;
	}
	//第三步 向刚分配出来的内存分配参数
	BOOL bWrite = WriteProcessMemory(pri.hProcess, lpAlloc, szPath, strlen(szPath) + 1, NULL);
	if (!bWrite)
	{
		return;
	}
	//第四步创建远程线程开始注入
	HANDLE hRemoteThread = CreateRemoteThread(pri.hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, lpAlloc, 0, NULL);
	if (!hRemoteThread)
	{
		cout << "CreateRemoteThread error" << GetLastError() << endl;
		return;
	}
}

第用CreateProcessA函数以挂起的状态打开我们的目标进程

注意目标的进程句柄会通过PROCESS_INFORMATION这个结构体传递

CREATE_SUSPENDED是挂起的方式打开进程

//第一步以挂起的形式打开目标进程
	STARTUPINFOA sta = { 0 };    //结构体成员全部初始化为0
	sta.cb = sizeof(STARTUPINFO);     //记得赋值大小
	PROCESS_INFORMATION pri = { 0 };
	BOOL proc = CreateProcessA(
		DeName,
		NULL,
		NULL,
		NULL,
		NULL,
		CREATE_SUSPENDED,
		NULL,
		NULL,
		&sta,
		&pri             //句柄会传入到这个结构体
	);

第二步 使用VirtualAllocEx在目标进程分配内存

//第二步在目标进程分配内存  用于写入loadlibrary的参数
	LPVOID lpAlloc = VirtualAllocEx(pri.hProcess, NULL, strlen(szPath) + 1, MEM_COMMIT, PAGE_READWRITE);
	if (!lpAlloc)
	{
		return;
	}

第三步使用WriteProcessMemory向目标进程写入参数

BOOL bWrite = WriteProcessMemory(pri.hProcess, lpAlloc, szPath, strlen(szPath) + 1, NULL);
	if (!bWrite)
	{
		return;
	}

第四步使用CreateRemoteThread开启远程线程注入

HANDLE hRemoteThread = CreateRemoteThread(pri.hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, lpAlloc, 0, NULL);
	if (!hRemoteThread)
	{
		cout << "CreateRemoteThread error" << GetLastError() << endl;
		return;
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值