08-图9 关键活动 (30分)

本文介绍了一种基于任务依赖关系的任务调度算法实现,通过计算最早开始时间和最晚完成时间来确定关键路径,并展示了如何使用拓扑排序进行任务排序及找出关键任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 .注意:可能存在多终点情况,所以求出最大的最晚完成时间之后,应该把每个最终结点的最晚完成时间都设置成那个最大值。

#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
const int MAX = 110;
const int Inf = 10000;
int N, M;

struct ENode{
	int v;
	int Ltime;
};


int Etime[MAX] = { 0 };
vector<ENode>Adj[MAX];
int Ind[MAX] = { 0 };
int Latime[MAX];
int Delay[MAX][MAX];
int TopS[MAX];

int TopSort(){
	fill(Latime, Latime + MAX, Inf);
	int cnt, ans=0;
	queue<int>q;
	for (int i = 1; i <= N; i++){
		if (Ind[i] == 0)
			q.push(i);
	}
	cnt = 0;
	int V;
	while (!q.empty()){
		V = q.front();
		q.pop();
		TopS[++cnt] = V;
//		printf("%d\n", cnt);
//		printf("%d %d\n",V, cnt);
		for (int i = 0; i < Adj[V].size(); i++){
			int u = Adj[V][i].v;
			if (Etime[V] + Adj[V][i].Ltime > Etime[u])Etime[u] = Etime[V] + Adj[V][i].Ltime;
			Ind[u] -= 1;
			if (Ind[u] == 0)q.push(u);
			if (Etime[u]>ans)ans = Etime[u];
		}
	}
	if (cnt != N)return-1;
	else{ 
		for (int i = N; i > 0; i--){
			int u = TopS[i];
			printf("%d %d\n", i, TopS[i]);
			if (Adj[u].size() == 0){
				Latime[u] = ans;
	//			printf("%d\n", Latime[u]);
			}
			else{
				for (int j = 0; j < Adj[u].size(); j++){
					int w = Adj[u][j].v;
					if (Latime[w] - Adj[u][j].Ltime < Latime[u]){
						Latime[u] = Latime[w] - Adj[u][j].Ltime;
	//					printf("%d\n", Latime[u]);
					}
				}
			}
		}
		
	}

	 return ans;
}

int main(){
	cin >> N >> M;
	int s, e, l; 
	for (int i = 0; i < M; i++){
		cin >> s >> e >> l;

		Ind[e] += 1;
		ENode V;
		V.v = e;
		V.Ltime = l;
		Adj[s].push_back(V);
	}
	int ans = TopSort();
	if (ans == -1)printf("0");
	else {
		
		for (int i = 1; i <= N; i++){
			printf("%d %d %d\n",i , Etime[i], Latime[i]);
		}
		printf("%d\n", ans);
		for (int i = 1; i <= N; i++){
			for (int j = Adj[i].size() - 1; j >= 0; j--){
				int u = Adj[i][j].v;
				if (Etime[i] + Adj[i][j].Ltime == Latime[u])
					printf("%d->%d\n", i, u);
			}
		}
	}
	return 0;
}

 

<think>我们正在析Windows安全事件ID 4624中System用户的登录事件。System用户(也称为NT AUTHORITY\SYSTEM)是Windows中的最高权限账户,通常由操作系统核心进程和服务使用。析System账户的登录事件对于安全审计和异常检测非常重要,因为攻击者可能通过漏洞或恶意软件获取System权限。 ### 步骤1: 理解System用户登录事件的特性 - **正常情况**:System用户的登录事件通常由系统内部进程触发,例如: - 服务启动(如Windows Update服务) - 计划任务执行 - 系统启动时的初始化进程 - **异常情况**:如果System用户从异常位置(如远程IP)登录,或登录时间异常(如非工作时间),可能表示恶意活动(如提权攻击)[^1]。 ### 步骤2: 在事件查看器中筛选System登录事件 使用形界面(事件查看器)是最直观的方法: 1. **打开事件查看器**: - 按`Win+R`,输入`eventvwr.msc`,回车。 2. **定位安全日志**: - 展开`Windows 日志` > 点击`Security`。 3. **筛选事件**: - 在右侧操作栏点击`筛选当前日志...`。 - 在`事件ID`框中输入`4624`。 - 在`用户`框中输入`SYSTEM`(注意:用户名必须大写)。 - 点击`确定`。 ![事件查看器筛选System事件](https://via.placeholder.com/400x200?text=事件查看器筛选System登录事件) 4. **析结果**: - 事件列表会显示所有System用户的登录记录。 - 双击事件查看详细信息,重点关注: - `登录类型`(Logon Type):System用户常见的登录类型为`5`(服务)或`0`(系统)。 - `源网络地址`(Source Network Address):正常应为空或`127.0.0.1`,若出现外部IP则异常。 - `进程名`(Process Name):正常应为`services.exe`或`svchost.exe`等系统进程。 ### 步骤3: 使用PowerShell深度析 PowerShell可快速统计和导出System登录事件: ```powershell # 查询所有System用户的登录事件 $events = Get-WinEvent -LogName Security -FilterXPath "*[System[(EventID=4624)] and EventData[Data[@Name=&#39;TargetUserName&#39;]=&#39;SYSTEM&#39;]]" # 统计事件数量 $events.Count # 提取关键字段(时间、登录类型、进程名、IP地址) $events | ForEach-Object { $xml = [xml]$_.ToXml() $time = $_.TimeCreated $logonType = $xml.Event.EventData.Data | Where-Object { $_.Name -eq "LogonType" } | Select-Object -ExpandProperty "#text" $processName = $xml.Event.EventData.Data | Where-Object { $_.Name -eq "ProcessName" } | Select-Object -ExpandProperty "#text" $ipAddress = $xml.Event.EventData.Data | Where-Object { $_.Name -eq "IpAddress" } | Select-Object -ExpandProperty "#text" [PSCustomObject]@{ Time = $time LogonType = $logonType Process = $processName IPAddress = $ipAddress } } | Format-Table -AutoSize ``` ### 步骤4: 关键字段解释 - **登录类型(Logon Type)**: - `5`:服务登录(Service),如后台服务启动。 - `0`:系统登录(System),如内核初始化。 - 其他类型(如`3`网络登录)对System用户通常异常。 - **进程名(Process Name)**: - 正常:`C:\Windows\System32\services.exe`, `C:\Windows\System32\svchost.exe`。 - 异常:未知路径(如`C:\Temp\malware.exe`)。 - **IP地址(IpAddress)**: - 正常:`-`(空)或`127.0.0.1`。 - 异常:公网IP(如`192.168.1.100`)可能表示远程控制。 ### 安全建议 - **基线监控**:建立System登录的正常行为基线(如常见进程、登录频率)。 - **告警规则**:对以下异常触发告警: - 登录类型为`3`(网络)或`10`(远程交互)。 - 进程名不在白名单内(如非`System32`目录)。 - 源IP地址为外部网络[^1]。 ### 示例析结果 假设发现一个异常事件: ``` 时间: 2023-05-15 02:30:00 登录类型: 3 进程名: C:\Windows\Temp\spoolsv.exe IP地址: 192.168.1.100 ``` **结论**:此事件可疑,因为: 1. System用户通常不会以网络登录(类型3)出现。 2. 进程路径异常(不应在`Temp`目录)。 3. 存在外部IP地址(可能为横向移动)。 ### 引用 [^1]: 基于Windows安全日志析实践,System账户的异常登录常与高级持续性威胁(APT)相关,需结合其他日志(如进程创建)进一步调查。 §§相关问题§§ 1. 如何监控Windows系统中System账户的异常行为? 2. Windows安全事件ID 4624中登录类型的完整列表是什么? 3. 如何将Windows安全日志实时导出到SIEM系统?</think>### Windows 安全事件 ID 4624 中 System 用户登录析指南 System 用户(`NT AUTHORITY\SYSTEM`)是 Windows 系统的最高权限账户,通常由操作系统核心进程和服务使用。析其登录事件对安全审计至关重要,以下是详细步骤: --- ### 一、System 用户登录特征析 1. **典型登录场景**: - 服务启动(如 Windows Update 服务) - 计划任务执行 - 系统启动时的初始化进程 - 驱动程序加载 - **异常特征**: - 登录类型为 `3`(网络登录)或 `10`(远程交互) - 源 IP 为外部地址 - 非系统进程触发的登录(如 `explorer.exe`) 2. **关键字段说明**(事件 4624 详情): ```markdown Subject: Security ID: SYSTEM Account Name: SYSTEM Logon Type: 5 (服务登录) 或 0 (系统登录) Process Name: C:\Windows\System32\services.exe (正常) Network Information: Source Address: ::1 (正常为本地环回) ``` --- ### 二、析操作步骤 #### 方法 1:事件查看器筛选 1. 打开事件查看器(`eventvwr.msc`) 2. 定位:`Windows 日志 > 安全` 3. 筛选当前日志: - **事件 ID**:`4624` - **用户**:`SYSTEM`(需大写) - **XML 筛选器**(高级): ```xml <QueryList> <Query Id="0"> <Select Path="Security"> *[EventData[Data[@Name=&#39;TargetUserName&#39;]=&#39;SYSTEM&#39;]] and *[System[(EventID=4624)]] </Select> </Query> </QueryList> ``` #### 方法 2:PowerShell 深度析 ```powershell # 提取所有 SYSTEM 登录事件 $events = Get-WinEvent -LogName Security -FilterXPath "*[System[(EventID=4624)] and EventData[Data[@Name=&#39;TargetUserName&#39;]=&#39;SYSTEM&#39;]]" # 关键字段 $events | ForEach-Object { $xml = [xml]$_.ToXml() $logonType = ($xml.Event.EventData.Data | Where-Object { $_.Name -eq "LogonType" }).&#39;#text&#39; $process = ($xml.Event.EventData.Data | Where-Object { $_.Name -eq "ProcessName" }).&#39;#text&#39; $ip = ($xml.Event.EventData.Data | Where-Object { $_.Name -eq "IpAddress" }).&#39;#text&#39; [PSCustomObject]@{ Time = $_.TimeCreated LogonType = $logonType Process = $process IP = $ip } } | Format-Table -AutoSize ``` #### 输出示例: ``` Time LogonType Process IP ---- --------- ------- -- 2023-05-15 08:00:00 5 C:\Windows\System32\svchost.exe ::1 2023-05-15 02:30:00 3 C:\Temp\malware.exe 192.168.1.100 ``` --- ### 三、安全威胁判定矩阵 | **特征** | 正常场景 | 潜在威胁指示 | |-------------------|-------------------------|--------------------------| | **登录类型** | 0, 5, 9 | 3, 10, 2 | | **进程路径** | System32 目录下系统进程 | Temp 目录或非常规路径 | | **源 IP** | ::1 或 127.0.0.1 | 外部 IP 或内网非常规 IP | | **登录时间** | 工作时间/系统维护时段 | 凌晨 2-5 点 | > ⚠️ 若发现 `LogonType=3` 且 `ProcessName` 为非常规进程(如 `powershell.exe`),需立即排查恶意服务注入[^1]。 --- ### 四、高级析技巧 1. **关联事件析**: - 检查登录后 **4688 事件**(进程创建)是否触发可疑操作 - 关联 **7045 事件**(服务安装)检测恶意服务 2. **频率基线**: ```powershell # 统计每小时 SYSTEM 登录次数 $events | Group-Object { $_.TimeCreated.ToString("yyyy-MM-dd HH") } | Sort-Object Count -Desc ``` 异常:单小时超过 20 次登录(正常服务通常 <5 次/小时) 3. **登录类型布**: ```powershell $events | Group-Object { ($_.ToXml() | Select-Xml "//*[@Name=&#39;LogonType&#39;]").Node.InnerText } | Format-Table Name, Count ``` --- ### 引用说明 [^1]: 根据安全析实践,System 账户的异常网络登录(类型 3)常与横向移动攻击相关,需结合进程路径和登录时间综合判断。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值