进程强杀探究

本文探讨了在Windows操作系统中如何在Ring3权限下无法直接结束Ring0进程的问题。通过分析ZwTerminateProcess和未公开的PspTerminateProcess函数,详细解释了如何在Ring0级别终止进程,包括寻找内核模块、提取特征码以及绕过安全防护的方法。最终,展示了在实际操作中如何成功强制结束进程。

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

前言

我们知道在windows操作系统里面有ring0跟ring3的概念(ring1、ring2在windows中并未使用),因为ring0的特权级别是比ring3高的,那么我们肯定不能在ring3调用windows提供的api杀死ring0特权级别的进程,那么这时候我们就需要使用的ring0的函数来强行结束一些处于ring0级别的进程。

测试

我们首先打开PCHunter32.exe看一下,应用层是不能够访问的,我们知道可以在cmd里面使用taskkill命令来结束进程,但这种方式对ring0特权级别的程序并不适用。

在这里插入图片描述

看一下PCHunter32.exe的PID,尝试使用taskkill命令关闭发现拒绝访问

在这里插入图片描述

用任务管理器也是同样拒绝访问

在这里插入图片描述

ZwTerminateProcess

ZwTerminateProcess例程终止一个进程及其所有线程,它是一个ring0函数,结构及参数如下

NTSYSAPI NTSTATUS ZwTerminateProcess(
  [in, optional] HANDLE   ProcessHandle,
  [in]           NTSTATUS ExitStatus
);

在这里插入图片描述

在这个函数里面只需要传入进程句柄和NTSTATUS值就可以杀死一个进程,但是这里又有一个问题,如果我们想利用这个函数去kill掉一个杀软,那么杀软就直接让我们宰割吗,当然不会。

我们能知道这个内核的函数,那么杀软肯定也知道,所以在ring0层面下,杀软将这个内核函数hook掉,如果发现有调用这个函数kill掉自己的企图,还是会拒绝。

PspTerminateProcess

这个函数就有意思了,在msdn里面居然没有找到这个函数,那么是不是我们搞错了呢?

在这里插入图片描述

遇事不决找Windbg老师看一下有没有这个结构就知道了,当然是有这个函数的,那为什么在msdn里面找不到呢?

在这里插入图片描述

WDK说明文档中只包含了内核模块导出的函数,对于未导出的函数,则不能直接使用。

如果要使用未导出的函数,则有两种方法来使用:

  1. 暴力搜索,提取该函数的特征码,全盘搜索。
  2. 如果有已文档化的函数调用了PspTerminateProcess,那我们就可以通过指针加偏移的方式获取到他的地址,同样可以调用。

那么我们要想全盘搜索,肯定要先找到内核模块,每个内核模块都有一个对应的结构体,来描述这个模块在内核中的:位置、大小、名称等等。DriverEntry 的第一个参数就是这个结构体。

主要关注DriverSizeDriverN

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值