首页 > 系统相关 >【攻防技术系列+Python】-- 用 Python 控制系统进程

【攻防技术系列+Python】-- 用 Python 控制系统进程

时间:2024-05-08 13:11:27浏览次数:15  
标签:攻防 name psutil Python signal pid -- 进程

用 Python 控制系统进程

由于注册表几乎可以决定整个操作系统的运行,因此它成为安全工具与恶意软件对抗的主要战场之一。除了注册表之外,对系统进程的控制也是安全工具和恶意软件的必争之地。这里我们首先要了解程序和进程的区别。程序是静态的,进程是动态的。进程可以分为系统进程和用户进程。凡是用于完成操作系统的各种功能的进程就是系统进程,它们就是处于运行状态下的操作系统本身,用户进程就是所有由用户启动的进程。
psutil 库是一个跨平台库,它能够轻松实现获取系统运行的进程和系统利用率(包括CPU,内存、磁盘、网络等)信息。它主要用于系统监控、性能分析、进程管理等。psutil 库几乎支持当前所有的主流操作系统。使用psutil库查看所有逃程的命令如下。

psutil.pids()

这个函数的返回值为当前运行的进程的pid,在 psutil库中还可以根据一个进程的pid获取以下详细信息。

p = psutil.Process(pid)
p.name()                   #进程名
p.exe()                    #进程的bin路径
p.cwd()                    #进程的工作目录的绝对路径
p.status()                 #进程状态
p.create_time()            #进程创建时间
p.uids()                   #进程的uid信息
p.gids()                   #进程的gid信息
p.cpu_times()              #进程的CPU时间信息
p.memory_percent()         #进程内存利用率

下面我们来编写一个可以列举出操作系统运行的所有进程的程序。

import psutil
print("-----显示所有进程------")
#显示进程信息
pids = psutil.pids()
for pid in pids:
    p = psutil.Process(pid)
    #通过pid显示进程名称
    process_name = p.name()
    print("Process name is: %s,pid is: %s" % (process_name,pid))

执行该程序之后就可以看到一个类似任务管理器的进程列表,如图7-36所示。

安全工具与恶意软件都会试图去结束对方,如果知道了一个进程的pid或者名称,那么就可以在Python程序中结束它。例如这里我们运行测试程序“测试窗口.exe”,然后启动任务管理器,可以看到它所对应进程的名称,Windows中的任务管理器如图7-37所示。
图]7-37Windows中的任务管理器
这里我们可以使用signal模块来结束整个进程, signal模块负责Python程序内部的信号处理。典型的操作包括信号处理函数、暂停并等待信号,以及定时发出 SIGALRM等。signal模块包含以下方法:

signal.SIGHUP           连接挂断;
signal.SIGILL           非法指令;
signal.SIGINT           终止进程;
signal.SIGTSTP          暂停进程;
signal.SIGKILL          杀死进程(此信号不能被捕获或忽略);
signal.SIGQUIT          终端退出;
signal.SIGTERM          终止信号,软件终止信号;
signal.SIGALRM          闹钟信号,由signal.alarm()发起;
signal.SIGCONT          继续执行暂停进程。

虽然signal模块是Python中的模块,但是其主要面向的是UNIX、Linux 和l macOS等操作系统。由于 Windows内核对信号机制的支持不充分,因此在 Windows中的 Python不能完全发挥信号系统的功能。
我们现在就使用signal模块编写一个结束指定名称进程的程序。

❗管理员权限运行

import psutil
import os
import signal

print("-------------结束进程-------------")
pids = psutil.pids()
for pid in pids:
    p = psutil.Process(pid)
    process_name = p.name()
    if '测试窗口.exe' == process_name:
        print("结束进程: name(%s)-pid(%s)" % (process_name, pid))
        os.kill(pid, signal.SIGTERM)

exit(0)

执行该程序之后,可以看到它已经成功地结束了“测试窗口.exe”,如图7-38所示。
os模块中提供了一个结束进程的函数os.kill(),该函数模拟传统的UNIX函数发送信号给进程,其中包含两个参数:一个是进程名,即所要接收信号的进程;另一个是所要进行的操作,常用取值为SIGINT(中断进程)、SIGTERM(进程终止信号)和 SIGKILL(杀死进程)。
这里需要注意的一个问题是,虽然 os.kill(pid,signal.SIGINT)成功结束了该进程,但是os.Kill()函数并不能在Windows中正常工作,比如在Windows 中将 signal.SIGINT 替换为SIGKILL,系统就会报错,但是在Linux 中却可以正常运行。所以在 Windows 中可以改用os.popen('taskkill.exe /pid:'+str(pid)来结束一个进程,该方法其实就是使用“taskkill”命令来结束进程的。

标签:攻防,name,psutil,Python,signal,pid,--,进程
From: https://www.cnblogs.com/o-O-oO/p/18179440

相关文章

  • excel 汇总运算后生成柱状图
    defsum(df,q_name,sum_index):#df=pd.DataFrame#pd_frame.sum()#print(df.values)#Aggregations(聚合),多索引,,'季度'df_agg=df.groupby(['厂家','季度'])['销量'].agg([np.sum])......
  • VMware如何将虚拟机的端口服务映射出去
    我们有时候在VMware起了一个服务,想要局域网的朋友同事访问这时候就需要i端口映射选择NAT模式VMnet8点击NAT设置 然后点击添加然后映射传入端口对话框红色部分是你主机本机,也就是你在用的电脑的空闲端口(可以打开cmd输入命令:netstat-ano查看已用端口都有哪些,咱们要......
  • and
    1.简介一个运算符,表示“逻辑与”,等价于&&运算符 2.示例intmain(){static_assert((falseandfalse)==false);static_assert((falseandtrue)==false);static_assert((trueandfalse)==false);static_assert((trueandtrue)==......
  • 八大基本数据类型
    八大基本数据类型【一】八大基本数据类型介绍#【1】数字类型# (1)整数类型# (2)浮点数类型#【2】字符串类型#【3】列表类型#【4】字典类型#【5】布尔类型#【6】元组类型#【7】集合类型【二】数字类型整数类型#语法:变量名=数字age=18#使用场景加减乘......
  • alignas
    1.简介用于指定一个类型或一个对象的字节对齐方式2.语法a. alignas(expression)   //expression,必须为一个整型常量表达式,且表达式的结果值必须为0,或其他于“对齐” 或“扩展对齐”有意义的值b.alignas(type-id)      //等价于a......
  • Lab2 - ADT&OOP 回顾总结
    Lab2-ADT&OOP回顾在忙于干活与忙于划水的薛定谔叠加态中度过一个月后想起了博客,考虑到如果自己再不回顾之前的实验+复习软件构造内容就要和肯尼迪和安倍晋三一桌打复活赛结果会很悲惨的情况,决定打开博客开始码字。现在对Lab2-ADT&OOP的内容进行回顾目录Lab2-ADT&OOP回......
  • 基于改进MFCC特征和卷积递归神经网络的心音分类
    具体的软硬件实现点击http://mcu-ai.com/MCU-AI技术网页_MCU-AI人工智能心音分类在心血管疾病的早期发现中起着至关重要的作用,特别是对于小型初级卫生保健诊所。尽管近年来心音分类取得了很大进展,但其中大多数都是基于传统的分段特征和基于浅层结构的分类器。这些传统的声学表示......
  • 微服务Spring Cloud17_负载均衡Ribbon6
    一、概述在刚才的案例中,我们启动了一个user-service,然后通过DiscoveryClient来获取服务实例信息,然后获取ip和端口来访问。但是实际环境中,往往会开启很多个user-service的集群。此时获取的服务列表中就会有多个,到底该访问哪一个呢?一般这种情况下就需要编写负载均衡算......
  • 在Windows运行Gitlab Runner对.NET Framework 4.6.1旧项目自动执行单元测试
    摘要本文介绍了GitlabRunner如何在Windows服务器上调用vstest.console.exe,对旧的项目基于.NETFramework4.6.1的项目,自动执行单元测试。改造旧版本的.csproj文件改造成功后,完整的.csproj文件如下:<ProjectSdk="Microsoft.NET.Sdk"> <PropertyGroup><ProjectG......
  • 基于总线设备驱动模型的按键读取驱动程序
    本次实验基于总线设备驱动模型实现按键驱动程序的编写,给上层应用程序提供检测按键是否按下的操作接口,上层应用根据按键是否按下控制led的亮灭。所以上层应用程序会同时使用led和按键的驱动接口,但是对于下层驱动而言,这二者是分离的,因此只需要专注于编写按键驱动程序就可以了。在正......