进程之远程线程保护

本文介绍了进程保护的一种方法——远程线程保护,通过在Ring3层之外,如winlogon.exe系统进程中创建远程线程,监视并确保目标进程不被意外终止。保护程序会检测目标进程句柄,一旦发现结束则重新启动。实现过程中涉及API重定位等技术。
摘要由CSDN通过智能技术生成

在Ring3对进程进行保护的方法总是很乏力,HOOK一些Ring3层的函数,对进程名或进程ID进行判断等。今天看了一个比较老的方法,远程线程保护,整理代码,学习到不少,在此记录跟大家分享。

线程保护的思路让其它程序监视自身,如果自身程序退出,那么监视程序就重新启动该程序。使用远程线程将监视代码插入到其他进程,例如winlogon.exe等系统进程。将自己进程的句柄传给保护进程,保护进程通过用WaitForSingleObject() 函数来检测句柄来判断要保护的进程是否结束。

因为保护自身的代码要注入到winlogon.exe进程,而执行在远程线程代码的API都需要重新定位,为解决这个问题需要定义如下的结构

typedef struct _REMOTEPARAM
{
	DWORD  rpWaitForSingleObject;
	DWORD  rpOpenProcess;
	DWORD  rpWinExec;
	DWORD  rpProcessPID;       //被保护进程PID    
	HANDLE rpProcessHandle;    //被保护进程句柄
	char   Path[MAX_PATH];     //被保护进程路径
} RemoteParam;

为了方便我整个代码都贴出来,VS2008下能够编译,并且达到进程保护,注入系统进程时,安全软件会进行提示,因为是老技术,此处仅为学习。

#include <Windows.h>
#include <Psapi.h>
#include <stdio.h>
#pragma comment(lib,"Psapi.li
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值