首页
社区
课程
招聘
[原创]强制关闭进程的两种方法
发表于: 2021-10-28 11:36 10330

[原创]强制关闭进程的两种方法

2021-10-28 11:36
10330

实验平台是WIN XP sp3 x86。

要使用两种不同的方法来强制关闭进程。

在关闭进程的时候,PspTerminateProcess是一个比较底层的API。通过调用它来关闭进程可以绕过一些保护,该函数的定义如下

由于这个函数是未导出的,所以不能直接调用,要先在内存中找到这个函数才可以调用。这里选择找到这个函数的办法是通过内核模块遍历的办法来查找这个函数。

我们知道每一个内核模块都有一个DRIVER_OBJECT,该结构体的定义如下

其中的第7个成员DriverSection,该成员指向的是一个LDR_DATA_TABLE_ENTRY,该结构体的定义如下

本实验要用到的几个关键成员

由于这个双向链表的存在,就可以找到内存中所有内核模块,在从这些内核模块中一一通过特征码匹配的方式就可以找到PspTerminateProcess函数地址。接下来就要从PspTerminateProcess中找到特征码了,首先查看PspTerminateProcess函数的内容

从中挑选如下代码

就可以提取出相应的特征码如下

接下来要做的就是遍历内核模块在用这个特征码找到相应的函数地址,随后在调用该函数来关闭进程

想要关闭进程,可以通过将进程中的所有线程全部关闭。因为当这个进程中的所有线程都被关闭的时候,这个进程就已经没有意义,等同于被关闭。Windows为程序员提供了一个导出函数PsTerminateSystemThread来关闭线程,但由于这个函数往往会被安全软件监控,所以这里选择更为底层的函数,也就是PspTerminateThreadByPointer函数来关闭进程。

该函数的定义如下

这个函数在32位和64位中的区别仅仅是调用约定的不同

要找到这个函数,这里就通过找到导出函数PsTerminateSystemThread,并通过特征码的方式找到目标函数。PsTerminateSystemThread函数的实现如下

由上可知,选择0xE8作为特征码就可以找到目标函数。有了这个函数,就可以关闭线程。接下来只需要遍历所有的线程判断该线程是不是属于要关闭的进程,如果是的话就把它关掉。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2021-11-30 10:03 被1900编辑 ,原因:
收藏
免费 3
支持
分享
最新回复 (3)
雪    币: 203
活跃值: (1144)
能力值: ( LV9,RANK:195 )
在线值:
发帖
回帖
粉丝
2
WIN11都出来了,别整XP了
2021-10-28 17:47
0
雪    币: 22413
活跃值: (25361)
能力值: ( LV15,RANK:910 )
在线值:
发帖
回帖
粉丝
3
palkiver WIN11都出来了,别整XP了
学习用的
2021-10-28 19:54
0
雪    币: 52
活跃值: (237)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
2021-10-30 18:33
0
游客
登录 | 注册 方可回帖
返回
//