一起游 手游攻略 软件教程 如何通过系统进程分析病毒、系统进程查看

如何通过系统进程分析病毒、系统进程查看

时间: 来源:互联网 浏览:0

揭秘:打造一套完整的勒索病毒自动化采集分析系统

2024年全球勒索软件攻击将呈现爆发式增长。国家计算机病毒应急中心发布的《网络空间安全态势分析报告(2024)》显示,2023年7月至2024年6月,全球共有26个勒索软件组织对我国71个机构、14个国民经济行业发起攻击并勒索钱财,同比增长100%。

面对快速演变的勒索病毒,传统的人工分析方法已显得力不从心,构建自动化的勒索病毒检测系统已成为当务之急。作为网络安全解决方案提供商,我们深知勒索软件防护能力对产品竞争力的重要性。一方面,我们需要不断验证和提高现有安全产品的防护效果;另一方面,我们也需要为客户提供快速、准确的威胁防御。

构建专业的勒索病毒采集分析系统,不仅可以帮助我们建立完整的样本库,积累宝贵的分析经验,还可以通过自动化手段大幅提高分析效率,实现对新型勒索病毒的快速响应。该系统的价值不仅仅体现在技术层面,更重要的是,它可以帮助我们更好地履行保护客户安全的责任,在日益严峻的网络安全形势下筑起一道坚固的防线。

系统整体分为四个环节:智能样本采集、云沙箱预分析、VM沙箱深度(精准)测试、特征库管理。

传统模式下,安全分析师需要手动从各个平台搜索下载样本,不仅费时费力,而且容易错过最新变种。我们设计的智能采集系统通过多级数据源系统解决了这个问题:

获取样本后,系统将进行智能预处理:首先进行文件特征提取,包括PE头分析、导入表检查、编译信息提取等,初步确定样本类型。然后是相似性分析,通过代码特征比较来判断样本是否是已知家族的变种。最后一步是自动分类,根据威胁级别、家族特征等维度对样本进行标记,为后续分析做好准备。

传统的样品分析过程往往需要手动将样品一份一份加载到IDA或OD中进行分析。当每天面对数千个样本时,这种方法显然无法满足需求。我们开发的云端预分析沙箱系统采用分布式处理架构,能够实现样本的快速分析:

在静态分析方面,系统首先自动对样本进行解包和反混淆。以最近流行的勒索软件变种为例。该样本使用多层外壳加密和混淆。传统方式人工拆包需要2-3小时,但通过机器学习辅助的自动化拆包技术,系统可以在5分钟内处理完毕。

完成解包后,系统将进行深入的静态分析。通过自主研发的代码特征提取引擎,可以快速识别样本中的恶意行为模式。例如,系统可以自动定位加密算法实现代码并分析其参数传递方式和密钥生成机制。在分析某个Lockbit变种时,系统成功发现了其使用的AES算法的改进版本,并提取了完整的加密过程,为后续制定保护规则提供了重要依据。

动态行为分析环节采用创新的“分层沙箱”架构。第一层是轻量级行为监控,通过Hook关键API快速获取样本行为特征;第二层是深度行为分析,在隔离环境下完全模拟目标系统,记录详细的行为日志;第三层是特殊行为触发,通过环境模拟和时间模拟技术,诱导样本表现出完整的恶意行为。

预分析完成后,高风险样本将进入VM沙箱进行深度测试。与传统沙箱不同,我们的系统具有以下创新特点:

智能环境适配系统会根据样本特征自动部署最匹配的测试环境。例如,当检测到针对特定版本Office的漏洞利用样本时,会自动配置相应版本的软件环境。在测试医疗行业针对性勒索病毒时,系统通过行为特征分析,成功识别其攻击目标,模拟医疗信息系统环境部署,成功触发完整攻击链。

动态投放诱饵传统的静态诱饵文件很容易被病毒识别。我们开发了动态诱饵生成技术,可以根据目标场景的特征自动生成逼真的诱饵文件。系统将模拟正常的文件访问模式并建立完整的文件关联网络,以提高测试的真实性。

反虚拟化可对抗通常具有检测虚拟机能力的现代勒索软件病毒。我们采用全方位的反检测技术:

硬件特性模拟:完全模拟物理机的硬件特性

行为特征伪装:模拟真实用户的操作方式

时间特征对抗:智能处理延迟触发机制

在最近的测试中,它成功绕过了高级勒索病毒的多重环境检测,并获得了完整的加密行为特征。

完成测试分析后,系统将从多个维度提取特征指标。在静态层面,我们重点关注文件结构特征,包括PE文件的节表结构、资源节内容等关键信息。通过自主研发的代码特征提取引擎,系统可以识别反汇编层面的关键行为特征,如加密算法实现、API调用顺序等。同时,系统还会提取并分析样本中的字符串信息,包括加密后缀、勒索信等,这些都是识别勒索软件家族的重要依据。

在动态行为分析方面,系统通过Hook关键API记录完整的流程行为链,包括详细的调用序列和参数特征。对于文件操作,我们特别关注加密行为模式,如文件访问顺序、加密算法特征等。对于网络通信方面,系统会记录并分析C2通信模式,包括协议特征、加密方式等。

基于这些多维度特征,系统将进行深入的关联分析。通过还原完整的攻击链,我们可以更好地了解样本的攻击意图和技术特征。同时,系统会将样本与已知家族进行比较,追踪变种的演化路径,这对于预测未来的攻击趋势非常有帮助。所有分析结果都将映射到MITRE ATTCK框架,以便于从战术和技术层面理解攻击者的行为模式。

2024 年11 月,我们的系统捕获了一个针对制造业的新勒索软件变体。获得样本后,系统立即启动自动化分析过程。通过静态分析发现,该样品采用了定制化包装技术。经过自动解包处理,系统在代码中发现了修改版的Lockbit加密模块,以及专门针对西门子PLC控制系统的攻击代码。根据分析结果,及时向客户推送预警信息,并将样本特征同步至病毒特征库,成功阻止了此次针对性攻击。

某科研项目需要大量勒索软件家族和样本进行勒索软件防护研究。通过该系统,自动采集了大量高质量的勒索软件家族和样本,提前超出了项目原定目标。

在效率方面,全流程自动化带来了显着的提升。样本处理能力从人工分析时平均每天10个增加到500多个,这主要得益于分布式处理架构和智能分析流程。响应时间从原来的几天缩短到了几小时。特别是对于高风险样本,系统可以在2小时内完成分析和规则下发。通过自动化,分析师的重复性工作减少了60%,使他们能够专注于更有价值的安全研究。

通过全流程自动化,分析效率显着提升:

样品处理能力:从人工分析时平均每天10个提高到500+

响应时间:从几天缩短到几分钟

人力投入:分析人员减少70%,但处理的样本数量增加30倍

得益于深度分析和多维特征提取:

变体识别率:从70% 提高到95%

误报率:降低至0.1%以下

漏报率:从5% 降低至0.1%

预警时间:平均提前12小时

自动化采集分析系统的核心价值是帮助我们不断获取和分析最新的勒索病毒样本,不断优化行为分析模型。通过对大量真实攻击数据的深入分析,我们能够准确识别勒索软件的行为特征,从而构建以行为分析为核心的防护体系。该系统以机器学习驱动的行为分析引擎为中心,可以准确识别勒索软件行为的未知变体。同时,在特征识别模块的辅助下,快速拦截已知威胁。

根据系统积累的分析经验,我们建议企业在防范勒索病毒时,首先应部署具有行为分析能力的防护产品。这是对抗未知变种的关键。在工业控制等特殊环境下,应配合应用白名单管理,严格控制程序运行权限,同时对文件加密等敏感操作进行实时监控和分析。此外,企业还需要建立完整的数据备份机制,尤其是生产数据和关键配置;对服务器、终端等实施深度防护,而不是依赖单一防护手段;确保及时更新防护策略,持续跟踪最新威胁趋势。

实践证明,只有将行为分析技术与实践经验相结合,才能构建有效的防护体系。我们也将不断完善自动化分析系统,不断提升行为分析能力,为企业安全提供更可靠的保障。

Linux病毒实战围剿手册:从检测到根除的全程实录

享受一套经过企业环境验证的Linux病毒处理解决方案,包括多项首创的检测技术和根本原因方法,这些在其他技术平台上的完整版本中很少见到。

技术亮点

突破传统监控1秒间隔的限制

在高负载时直接关联流程快照

持续时间仅50ms的恶意进程可被检测到

诊断标准

如果PSS和RSS之间的差异超过10MB,那就是可疑的。

挖矿病毒中常见的内存驻留模块

特点

篡改/bin/和/sbin/下的系统命令

文件大小增加约37KB

包含“x0x0x0x0”特征字符串

根除步骤

特点

只存在于记忆中

通过crontab 或systemd 持久化

连接矿池域名如xmr.pool.com

清仓计划

特点

系统调用表被篡改

lsmod 隐形模块

/proc目录异常

清仓计划

温馨提示

1.

断开优先级

:立即禁用网络接口

ip

链接

设置eth0 下来

2.取证先行:内存转储必不可少

须藤

DD

如何通过系统进程分析病毒、系统进程查看

if=/dev/mem of=/root/mem.dump bs=1M count=1024

3.最小操作:避免对受感染主机进行分析

4.根治验证:使用干净的系统扫描

sudo 安装/dev/sda1 /mnt clamscan -r /mnt

5.溯源分析:记录所有操作时间线

脚本-q -a /var/log/incident_response.log

该方案曾创下挖矿病毒从发现到根除仅需17分钟的记录。如果您遇到特殊病毒变种,请在评论区留下案例详情,我们将提供定制化解决方案!

万字长文带你还原进程和线程

我们平时谈论的进程和线程更多是基于编程语言的角度。那么你真的了解什么是线程和进程吗?那么我们从操作系统的角度来看看什么是进程和线程。

操作系统中的核心概念是进程。进程是正在运行的程序的抽象。关于操作系统的其他一切都围绕着进程。进程是操作系统提供的最古老、最重要的概念之一。即使只有一个CPU 可用,它们也支持(伪)并发操作。他们将单个CPU 转变为多个虚拟机的CPU。如果没有进程抽象,现代操作系统将不复存在。

所有现代计算机都会同时做很多事情。过去使用电脑的人可能根本无法理解这种变化。一个例子可以更好地说明这一点:首先考虑一个Web服务器,请求来自网页。当请求到达时,服务器会检查当前页面是否在缓存中。如果在缓存中,则直接返回缓存中的内容。如果缓存中没有,则将请求交给磁盘处理。然而,从CPU的角度来看,磁盘请求会花费更长的时间,因为磁盘请求会很慢。当硬盘请求完成后,更多的其他请求就会进来。如果有多个磁盘,在第一个请求完成之前,可以连续向其他磁盘发出部分或全部请求。显然,这是一种并发现象,需要并发控制条件来控制并发现象。

现在考虑一台只有一个用户的PC。系统启动的时候,很多进程也在后台启动。用户通常不知道这些进程的启动。试想一下,当你自己的电脑启动时,你能知道需要启动哪些进程吗?这些后台进程可能是需要输入电子邮件的电子邮件进程,也可能是定期更新病毒库的计算机病毒扫描进程。当所有用户都在线时,用户进程可能会打印文件和刻录CD-ROM,并且需要对这些活动进行管理。因此,一个支持多进程的多道程序系统就变得必要了。

在许多多道程序设计系统中,CPU 在进程之间快速切换,使每个程序运行数十或数百毫秒。但严格来说,CPU在某一时刻只能运行一个进程。但是,如果我们将时间定位在1秒以内,则可能会运行多个进程。这给了我们并行的错觉。这有时称为伪并行,以区分多处理器系统(两个或多个CPU 共享相同物理内存的系统)

我们来详细解释一下伪并行:伪并行是指单核或多核处理器同时执行多个进程,使程序速度更快。通过以非常有限的时间间隔在程序之间快速切换CPU,可以创建并行感。缺点是时间可能会也可能不会分配给下一个进程。

跟踪多个并行进程很困难。因此,经过多年的努力,操作系统设计者开发了一种描述并行性的概念模型(顺序过程),使并行性更容易理解和分析。这个模型的讨论也是本文的主题

在进程模型中,计算机上运行的所有软件,通常包括操作系统,都被组织成许多顺序的进程,称为进程。进程是正在执行的程序的一个实例,包括程序计数器、寄存器和变量的当前值。从概念上讲,每个进程都有自己的虚拟CPU,但实际上CPU在进程之间来回切换。

如上图所示,这是一个多处理程序,有4个程序。在进程不断切换的过程中,程序计数器也发生不同的变化。

上图中,这4个程序被抽象为4个进程,有自己的控制流(即每个进程都有自己的程序计数器),每个程序独立运行。当然,实际上只有一个物理程序计数器,每个程序在运行时都会将其逻辑程序计数器加载到物理程序计数器中。当程序运行完毕后,它的物理程序计数器就变成了真正的程序计数器,然后又被放回到进程的逻辑计数器中。

从下图我们可以看到,观察足够长的时间后,所有进程都在运行,但在任何一个给定的瞬间仅有一个进程真正运行

在下面的讨论中,我们假设单个CPU 场景。当然,这种假设在今天通常不成立,因为新芯片通常是包含2 个、4 个或更多CPU 的多核芯片。但目前,通过一次考虑一个CPU 来分析问题会更容易。因此,当我们说一个CPU 一次只能运行一个进程时,即使有2 个核心(或多个CPU),每个核心一次也只能运行一个线程。

由于CPU 在进程之间快速来回切换,因此无法确定每个进程将在CPU 上运行多长时间。并且当同一个进程再次在CPU中运行时,其在CPU内部的运行时间往往是不固定的。进程和程序之间的区别非常微妙,但一个例子可以让您区分:想象一个计算机科学家,他可以为他的女儿制作生日蛋糕。他有一个生日蛋糕的食谱,厨房里有所需的所有原料:面粉、鸡蛋、糖、香草汁等。在这个比喻中,制作蛋糕的食谱是程序,计算机科学家是CPU,蛋糕的组成部分是输入数据。这个过程就是科学家阅读配方、获取各种原料、烘烤蛋糕等一系列动作的总和。

现在假设这位科学家的儿子来到他身边并告诉他,他的头上被蜜蜂蜇了。然后科学家会记录下制作蛋糕的过程中的步骤,然后拿出急救手册按照上面的步骤来营救自己的儿子。这里就会涉及到进程之间的切换。科学家(CPU)将从制作蛋糕(流程)切换到实施医疗救助(另一个流程)。等待伤口处理完毕后,科学家会回到刚刚记录的制作蛋糕的步骤,继续制作。

这里的关键思想是识别过程所需的条件。流程是特定类型活动的总和。它具有过程、输入和输出以及状态。单个处理器可以被多个进程共享,使用某种调度算法来决定何时停止一个进程的工作并切换到为另一个进程提供服务。另外需要注意的是,如果一个进程运行两次,则被视为两个进程。

操作系统需要某种方式来创建进程。在非常简单的系统中,或者如果操作系统被设计为运行单个应用程序(例如微波炉中的控制器),则可能需要在系统启动时所有进程一起启动。但在通用系统中,需要有某种方法在运行时按需创建或销毁进程。这个问题现在需要研究。以下是流程的创建方式。

系统初始化

正在运行的程序执行创建进程的系统调用(例如fork)

用户请求创建新进程

初始化批处理作业

当您启动操作系统时,通常会创建多个进程。其中一些是前台进程(众多进程),这些进程与用户交互并为他们完成工作。有些在后台运行,不与特定用户交互,但后台进程也有特定的功能。例如,设计一个后台进程来接收传入的电子邮件。该进程大部分时间处于睡眠状态,但一旦电子邮件到达就会被唤醒。还可以在计算机上设计一个后台进程来接收传入的网页请求,并在请求到达时唤醒该进程来处理传入的网页请求。在后台运行、处理电子邮件、网页、新闻、打印等活动的进程称为守护进程。大型系统将有许多守护进程。在UNIX 中,ps 程序可以列出正在运行的进程,而在Windows 中,您可以使用任务管理器。

除了在启动阶段创建进程外,后期还可以创建一些新的进程。通常,正在运行的进程会发出系统调用来创建一个或多个新进程来帮助其完成工作。当多个相关但独立的交互流程可以轻松地协同工作以完成任务时,创建新流程特别有用。例如,如果需要通过网络获取并顺序处理大量数据,那么创建一个进程来读取数据,将数据放入共享缓冲区,然后让第二个进程获取并正确处理它会更容易。在多处理器上,让每个进程在不同的CPU 上运行也可以加快工作完成速度。

在许多交互式系统中,您可以通过输入命令或双击图标来启动程序。这些操作中的任何一个都可以选择启动一个新进程。当在基本UNIX 系统上运行X 时,新进程将接管启动它的窗口。 Windows中一个进程启动时,一般没有窗口,但可以创建一个或多个窗口。每个窗口都可以运行进程。您可以通过鼠标或命令切换窗口并与进程交互。

交互系统是一种以人与计算机之间进行大量交互为特征的计算机系统,例如游戏、网络浏览器、IDE和其他集成开发环境。

创建进程的最后一种情况出现在大型机批处理系统中。用户在这样的系统中提交批处理作业。当操作系统确定它有资源来运行另一个任务时,它会创建一个新进程并运行其中输入队列中的下一个作业。

从技术上讲,在所有这些情况下,让现有进程执行该进程是通过创建系统调用来创建新进程来完成的。该进程可以是正在运行的用户进程、从键盘或鼠标调用的系统进程、或者批处理程序。这些是进行系统调用以创建新进程的进程。该系统调用告诉操作系统创建一个新进程,并直接或间接指示在其中运行哪个程序。

在UNIX中,只有一个系统调用来创建一个新进程,这个系统调用就是fork。此调用创建相对于调用进程的副本。分叉后,父进程和子进程将具有相同的内存映像、相同的环境字符串和相同的打开文件。通常,子进程将执行execve 或简单的系统调用来更改内存映像并运行新程序。例如,当用户在shell中发出sort命令时,shell会fork出一个子进程,子进程执行sort命令。之所以采用两步流程,是为了允许子进程在fork之后但execve之前操作其文件描述符,以完成标准输入、标准输出和标准错误的重定向。

在Windows 中,情况恰恰相反,一个简单的Win32 函数调用CreateProcess 处理进程创建并将正确的程序加载到新进程中。这个调用将有10个参数,包括要执行的程序、输入程序的命令行参数、各种安全属性、打开的文件是否继承控制位、优先级信息、进程需要创建的窗口规范以及指向一个结构体的指针,在该结构体中将有关新创建进程的信息返回给调用者。除了CreateProcess 之外,Win 32 中还有大约100 个其他函数来处理进程管理、同步和相关事务。下面是UNIX操作系统和Windows操作系统中系统调用的比较

UNIXWin32 说明forkCreateProcess 创建新进程waitpidWaitForSingleObject 等待进程退出execvenoneCraeteProcess=fork + servviceexitExitProcess 终止执行openCreateFile 创建文件或打开现有文件closeCloseHandle 关闭文件readReadFile 从单个文件读取数据writeWriteFile 将数据写入单个文件lseekSetFilePointer 移动文件指针statGetFileAttributesEx 获取不同文件属性mkdirCreateDirectory 创建新目录rmdirRemoveDirectory 删除空目录linknoneWin32 不支持linkunlinkDeleteFile 销毁现有文件mountnoneWin32 不支持mountumountnoneWin32 不支持挂载,因此mountchdirSetCurrentDirectory 不支持切换当前工作目录chmodnoneWin32 不支持安全KillnoneWin32 不支持信号timeGetLocalTime 获取当前时间

进程创建后,它开始运行并完成任务。然而,没有什么是永恒的,过程也不例外。该进程迟早会终止,但通常由以下情况触发

正常退出(自愿)

出错时退出(自愿)

严重错误(非自愿)

被另一个进程杀死(非自愿)

大多数进程终止是因为它们已经完成了工作。当编译器完成对给定程序的编译后,编译器会执行系统调用来告诉操作系统它已完成其工作。该调用在UNIX 中为exit,在Windows 中为ExitProcess。面向屏幕的软件还支持自愿终止。文字处理软件、Internet 浏览器和类似程序始终有一个图标或菜单项,用户单击该图标或菜单项即可通知进程删除其锁定打开的任何临时文件,然后终止。

进程终止的第二个原因是发现严重错误。例如,如果用户执行以下命令

进程终止的第三个原因是进程引起的错误,通常是由于程序中的错误造成的。例如,执行了非法指令、引用了不存在的内存、或者除数为0等。在一些系统(例如UNIX)中,进程可以通知操作系统它希望自己处理某些类型的错误。在此类错误中,进程会收到信号(中断),而不是在此类错误发生时直接终止进程。

终止进程的第四个原因是进程执行系统调用来告诉操作系统杀死进程。在UNIX 中,这个系统调用是kill。 Win32中对应的函数是TerminateProcess(注意它不是系统调用)。

在某些系统中,当一个进程创建其他进程时,父进程和子进程以某种方式相关。子进程本身会创建更多的进程,形成进程层次结构。

在UNIX 中,一个进程及其所有子进程和后代进程形成一个进程组。当用户从键盘发送信号时,该信号被发送到当前与键盘关联的进程组的所有成员(通常是当前窗口中创建的所有活动进程)。每个进程可以单独捕获信号、忽略信号或采取被信号杀死的默认操作。

这里再举一个例子来说明层的作用。考虑UNIX 在启动时如何初始化自身。启动映像中会出现一个名为init 的特殊进程。当init 进程开始运行时,它会读取一个文件,告诉它有多少个终端。然后为每个终端创建一个新进程。这些进程等待用户登录,如果登录成功,登录进程会执行shell等待用户输入命令,这可能会启动更多进程,等等。因此,整个操作系统中的所有进程都属于一棵以init为根的进程树。

相比之下,Windows 中没有进程层次结构的概念。 Windows 中的所有进程都是平等的。与层次结构唯一相似的是,当创建进程时,父进程会获得一个特殊的令牌(称为句柄),可用于控制子进程。然而,这个令牌也可能被移交给其他操作系统,这样层次结构就不存在了。在UNIX 中,进程不能剥夺其子进程的进程权限。 (从这一点来看,Windows还是更差)。

尽管每个进程都是一个独立的实体,拥有自己的程序计数器和内部状态,但进程之间仍然需要交互。在shell 命令中,一个进程的结果可用作另一进程的输入

第一个进程是cat,它连接三个文件并输出它们。第二个进程是grep,它根据两个进程的相对速度(取决于两个程序的相对速度)从包含关键字树的输入内容中进行选择

复杂度和各自所分配到的 CPU 时间片),可能会发生下面这种情况,grep 准备就绪开始运行,但是输入进程还没有完成,于是必须阻塞 grep 进程,直到输入完毕。 当一个进程在逻辑上无法继续运行时,它就会被阻塞,比如进程在等待可以使用的输入。还有可能是这样的情况:由于操作系统已经决定暂时将 CPU 分配给另一个进程,因此准备就绪的进程也有可能会终止。导致这两种情况的因素是完全不同的: 第一种情况的本质是进程的挂起,你必须先输入用户的命令行,才能执行接下来的操作。 第二种情况完全是操作系统的技术问题:没有足够的 CPU 来为每个进程提供自己私有的处理器。 当一个进程开始运行时,它可能会经历下面这几种状态 图中会涉及三种状态 运行态,运行态指的就是进程实际占用 CPU 运行时 就绪态,就绪态指的是可运行,但因为其他进程正在运行而终止 阻塞态,除非某种外部事件发生,否则进程不能运行 逻辑上来说,运行态和就绪态是很相似的。这两种情况下都表示进程可运行,但是第二种情况没有获得 CPU 时间分片。第三种状态与前两种状态不同是因为这个进程不能运行,CPU 空闲或者没有任何事情去做的时候也不能运行。 三种状态会涉及四种状态间的切换,在操作系统发现进程不能继续执行时会发生状态1的轮转,在某些系统中进程执行系统调用,例如 pause,来获取一个阻塞的状态。在其他系统中包括 UNIX,当进程从管道或特殊文件(例如终端)中读取没有可用的输入时,该进程会被自动终止。 转换 2 和转换 3 都是由进程调度程序(操作系统的一部分)引起的,而进程甚至不知道它们。转换 2 的出现说明进程调度器认定当前进程已经运行了足够长的时间,是时候让其他进程运行 CPU 时间片了。当所有其他进程都运行过后,这时候该是让第一个进程重新获得 CPU 时间片的时候了,就会发生转换 3。程序调度指的是,决定哪个进程优先被运行和运行多久,这是很重要的一点。已经设计出许多算法来尝试平衡系统整体效率与各个流程之间的竞争需求。 当进程等待的一个外部事件发生时(如一些输入到达),则发生转换 4。如果此时没有其他进程在运行,则立刻触发转换 3,该进程便开始运行,否则该进程会处于就绪阶段,等待 CPU 空闲后再轮到它运行。 使用进程模型,会让我们更容易理解操作系统内部的工作状况。一些进程运行执行用户键入的命令的程序。另一些进程是系统的一部分,它们的任务是完成下列一些工作:比如,执行文件服务请求,管理磁盘驱动和磁带机的运行细节等。当发生一个磁盘中断时,系统会做出决定,停止运行当前进程,转而运行磁盘进程,该进程在此之前因等待中断而处于阻塞态。这样可以不再考虑中断,而只是考虑用户进程、磁盘进程、终端进程等。这些进程在等待时总是处于阻塞态。在已经读如磁盘或者输入字符后,等待它们的进程就被解除阻塞,并成为可调度运行的进程。 从上面的观点引入了下面的模型操作系统最底层的就是调度程序,在它上面有许多进程。所有关于中断处理、启动进程和停止进程的具体细节都隐藏在调度程序中。事实上,调度程序只是一段非常小的程序。

如何通过系统进程分析病毒、系统进程查看

我们之前提过,操作系统为了执行进程间的切换,会维护着一张表格,即 进程表(process table)。每个进程占用一个进程表项。该表项包含了进程状态的重要信息,包括程序计数器、堆栈指针、内存分配状况、所打开文件的状态、账号和调度信息,以及其他在进程由运行态转换到就绪态或阻塞态时所必须保存的信息,从而保证该进程随后能再次启动,就像从未被中断过一样。 下面展示了一个典型系统中的关键字段 第一列内容与进程管理有关,第二列内容与 存储管理有关,第三列内容与文件管理有关。 存储管理的 text segment 、 data segment、stack segment 更多了解见下面这篇文章 程序员需要了解的硬核知识之汇编语言(全) 现在我们应该对进程表有个大致的了解了,就可以在对单个 CPU 上如何运行多个顺序进程的错觉做更多的解释。与每一 I/O 类相关联的是一个称作 中断向量(interrupt vector) 的位置(靠近内存底部的固定区域)。它包含中断服务程序的入口地址。假设当一个磁盘中断发生时,用户进程 3 正在运行,则中断硬件将程序计数器、程序状态字、有时还有一个或多个寄存器压入堆栈,计算机随即跳转到中断向量所指示的地址。这就是硬件所做的事情。然后软件就随即接管一切剩余的工作。所有的中断都从保存寄存器开始,对于当前进程而言,通常是保存在进程表项中。随后,会从堆栈中删除由中断硬件机制存入堆栈的那部分信息,并将堆栈指针指向一个由进程处理程序所使用的临时堆栈。一些诸如保存寄存器的值和设置堆栈指针等操作,无法用 C 语言等高级语言描述,所以这些操作通过一个短小的汇编语言来完成,通常可以供所有的中断来使用,无论中断是怎样引起的,其保存寄存器的工作是一样的。 当中断结束后,操作系统会调用一个 C 程序来处理中断剩下的工作。在完成剩下的工作后,会使某些进程就绪,接着调用调度程序,决定随后运行哪个进程。随后将控制权转移给一段汇编语言代码,为当前的进程装入寄存器值以及内存映射并启动该进程运行,下面显示了中断处理和调度的过程。 硬件压入堆栈程序计数器等 硬件从中断向量装入新的程序计数器 汇编语言过程保存寄存器的值 汇编语言过程设置新的堆栈 C 中断服务器运行(典型的读和缓存写入) 调度器决定下面哪个程序先运行 C 过程返回至汇编代码 汇编语言过程开始运行新的当前进程 一个进程在执行过程中可能被中断数千次,但关键每次中断后,被中断的进程都返回到与中断发生前完全相同的状态。 在传统的操作系统中,每个进程都有一个地址空间和一个控制线程。事实上,这是大部分进程的定义。不过,在许多情况下,经常存在在同一地址空间中运行多个控制线程的情形,这些线程就像是分离的进程。下面我们就着重探讨一下什么是线程 或许这个疑问也是你的疑问,为什么要在进程的基础上再创建一个线程的概念,准确的说,这其实是进程模型和线程模型的讨论,回答这个问题,可能需要分三步来回答 多线程之间会共享同一块地址空间和所有可用数据的能力,这是进程所不具备的 线程要比进程更轻量级,由于线程更轻,所以它比进程更容易创建,也更容易撤销。在许多系统中,创建一个线程要比创建一个进程快 10 – 100 倍。 第三个原因可能是性能方面的探讨,如果多个线程都是 CPU 密集型的,那么并不能获得性能上的增强,但是如果存在着大量的计算和大量的 I/O 处理,拥有多个线程能在这些活动中彼此重叠进行,从而会加快应用程序的执行速度 现在考虑一个线程使用的例子:一个万维网服务器,对页面的请求发送给服务器,而所请求的页面发送回客户端。在多数 web 站点上,某些页面较其他页面相比有更多的访问。例如,索尼的主页比任何一个照相机详情介绍页面具有更多的访问,Web 服务器可以把获得大量访问的页面集合保存在内存中,避免到磁盘去调入这些页面,从而改善性能。这种页面的集合称为 高速缓存(cache),高速缓存也应用在许多场合中,比如说 CPU 缓存。 上面是一个 web 服务器的组织方式,一个叫做 调度线程(dispatcher thread) 的线程从网络中读入工作请求,在调度线程检查完请求后,它会选择一个空闲的(阻塞的)工作线程来处理请求,通常是将消息的指针写入到每个线程关联的特殊字中。然后调度线程会唤醒正在睡眠中的工作线程,把工作线程的状态从阻塞态变为就绪态。 当工作线程启动后,它会检查请求是否在 web 页面的高速缓存中存在,这个高速缓存是所有线程都可以访问的。如果高速缓存不存在这个 web 页面的话,它会调用一个 read 操作从磁盘中获取页面并且阻塞线程直到磁盘操作完成。当线程阻塞在硬盘操作的期间,为了完成更多的工作,调度线程可能挑选另一个线程运行,也可能把另一个当前就绪的工作线程投入运行。 这种模型允许将服务器编写为顺序线程的集合,在分派线程的程序中包含一个死循环,该循环用来获得工作请求并且把请求派给工作线程。每个工作线程的代码包含一个从调度线程接收的请求,并且检查 web 高速缓存中是否存在所需页面,如果有,直接把该页面返回给客户,接着工作线程阻塞,等待一个新请求的到达。如果没有,工作线程就从磁盘调入该页面,将该页面返回给客户机,然后工作线程阻塞,等待一个新请求。 下面是调度线程和工作线程的代码,这里假设 TRUE 为常数 1 ,buf 和 page 分别是保存工作请求和 Web 页面的相应结构。调度线程的大致逻辑工作线程的大致逻辑现在考虑没有多线程的情况下,如何编写 Web 服务器。我们很容易的就想象为单个线程了,Web 服务器的主循环获取请求并检查请求,并争取在下一个请求之前完成工作。在等待磁盘操作时,服务器空转,并且不处理任何到来的其他请求。结果会导致每秒中只有很少的请求被处理,所以这个例子能够说明多线程提高了程序的并行性并提高了程序的性能。 到现在为止,我们已经有了两种解决方案,单线程解决方案和多线程解决方案,其实还有一种解决方案就是 状态机解决方案,它的流程如下 如果目前只有一个非阻塞版本的 read 系统调用可以使用,那么当请求到达服务器时,这个唯一的 read 调用的线程会进行检查,如果能够从高速缓存中得到响应,那么直接返回,如果不能,则启动一个非阻塞的磁盘操作 服务器在表中记录当前请求的状态,然后进入并获取下一个事件,紧接着下一个事件可能就是一个新工作的请求或是磁盘对先前操作的回答。如果是新工作的请求,那么就开始处理请求。如果是磁盘的响应,就从表中取出对应的状态信息进行处理。对于非阻塞式磁盘 I/O 而言,这种响应一般都是信号中断响应。 每次服务器从某个请求工作的状态切换到另一个状态时,都必须显示的保存或者重新装入相应的计算状态。这里,每个计算都有一个被保存的状态,存在一个会发生且使得相关状态发生改变的事件集合,我们把这类设计称为有限状态机(finite-state machine),有限状态机杯广泛的应用在计算机科学中。 这三种解决方案各有各的特性,多线程使得顺序进程的思想得以保留下来,并且实现了并行性,但是顺序进程会阻塞系统调用;单线程服务器保留了阻塞系统的简易性,但是却放弃了性能。有限状态机的处理方法运用了非阻塞调用和中断,通过并行实现了高性能,但是给编程增加了困难。 模型特性单线程无并行性,性能较差,阻塞系统调用多线程有并行性,阻塞系统调用有限状态机并行性,非阻塞系统调用、中断 理解进程的另一个角度是,用某种方法把相关的资源集中在一起。进程有存放程序正文和数据以及其他资源的地址空间。这些资源包括打开的文件、子进程、即将发生的定时器、信号处理程序、账号信息等。把这些信息放在进程中会比较容易管理。 另一个概念是,进程中拥有一个执行的线程,通常简写为 线程(thread)。线程会有程序计数器,用来记录接着要执行哪一条指令;线程还拥有寄存器,用来保存线程当前正在使用的变量;线程还会有堆栈,用来记录程序的执行路径。尽管线程必须在某个进程中执行,但是进程和线程完完全全是两个不同的概,并且他们可以分开处理。进程用于把资源集中在一起,而线程则是 CPU 上调度执行的实体。 线程给进程模型增加了一项内容,即在同一个进程中,允许彼此之间有较大的独立性且互不干扰。在一个进程中并行运行多个线程类似于在一台计算机上运行多个进程。在多个线程中,多个线程共享同一地址空间和其他资源。在多个进程中,进程共享物理内存、磁盘、打印机和其他资源。因为线程会包含有一些进程的属性,所以线程被称为轻量的进程(lightweight processes)。多线程(multithreading)一词还用于描述在同一进程中多个线程的情况。 下图我们可以看到三个传统的进程,每个进程有自己的地址空间和单个控制线程。每个线程都在不同的地址空间中运行 下图中,我们可以看到有一个进程三个线程的情况。每个线程都在相同的地址空间中运行。 当多个线程在单 CPU 系统中运行时,线程轮流运行,在对进程进行描述的过程中,我们知道了进程的多道程序是如何工作的。通过在多个进程之间来回切换,系统制造了不同的顺序进程并行运行的假象。多线程的工作方式也是类似。CPU 在线程之间来回切换,系统制造了不同的顺序进程并行运行的假象。 但是进程中的不同线程没有不同进程间较强的独立性。同一个进程中的所有线程都会有完全一样的地址空间,这意味着它们也共享同样的全局变量。由于每个线程都可以访问进程地址空间内每个内存地址,因此一个线程可以读取、写入甚至擦除另一个线程的堆栈。线程之间为什么没有保护呢?既不可能也没有必要。这与不同进程间是有差别的,不同的进程会来自不同的用户,它们彼此之间可能有敌意,因为彼此不同的进程间会互相争抢资源。而一个进程总是由一个用户所拥有,所以操作系统设计者把线程设计出来是为了让他们相互合作而不是相互斗争的。线程之间除了共享同一内存空间外,还具有如下不同的内容 上图左边的是同一个进程中每个线程共享的内容,上图右边是每个线程中的内容。也就是说左边的列表是进程的属性,右边的列表是线程的属性。 线程概念试图实现的是,共享一组资源的多个线程的执行能力,以便这些线程可以为完成某一任务而共同工作。和进程一样,线程可以处于下面这几种状态:运行中、阻塞、就绪和终止(进程图中没有画)。正在运行的线程拥有 CPU 时间片并且状态是运行中。一个被阻塞的线程会等待某个释放它的事件。例如,当一个线程执行从键盘读入数据的系统调用时,该线程就被阻塞直到有输入为止。线程通常会被阻塞,直到它等待某个外部事件的发生或者有其他线程来释放它。线程之间的状态转换和进程之间的状态转换是一样的。 每个线程都会有自己的堆栈,如下图所示 在多线程情况下,进程通常会从当前的某个单线程开始,然后这个线程通过调用一个库函数(比如 thread_create)创建新的线程。线程创建的函数会要求指定新创建线程的名称。创建的线程通常都返回一个线程标识符,该标识符就是新线程的名字。 当一个线程完成工作后,可以通过调用一个函数(比如 thread_exit)来退出。紧接着线程消失,状态变为死亡,不能再进行调度。在某些线程的运行过程中,可以通过调用函数例如 thread_join ,表示一个线程可以等待另一个线程退出。这个过程阻塞调用线程直到等待特定的线程退出。在这种情况下,线程的创建和终止非常类似于进程的创建和终止。

如何通过系统进程分析病毒、系统进程查看

另一个常见的线程是调用 thread_yield,它允许线程自动放弃 CPU 从而让另一个线程运行。这样一个调用还是很重要的,因为不同于进程,线程是无法利用时钟中断强制让线程让出 CPU 的。所以设法让线程的行为 高大上一些还是比较重要的,并且随着时间的推移让线程让出 CPU,以便让其他线程获得运行的机会。线程会带来很多的问题,必须要在设计时考虑全面。 为了使编写可移植线程程序成为可能,IEEE 在 IEEE 标准 1003.1c 中定义了线程标准。线程包被定义为 Pthreads。大部分的 UNIX 系统支持它。这个标准定义了 60 多种功能调用,一一列举不太现实,下面为你列举了一些常用的系统调用。POSIX线程(通常称为pthreads)是一种独立于语言而存在的执行模型,以及并行执行模型。它允许程序控制时间上重叠的多个不同的工作流程。每个工作流程都称为一个线程,可以通过调用POSIX Threads API来实现对这些流程的创建和控制。可以把它理解为线程的标准。 POSIX Threads 的实现在许多类似且符合POSIX的操作系统上可用,例如FreeBSD、NetBSD、OpenBSD、Linux、macOS、Android、Solaris,它在现有 Windows API 之上实现了pthread。 IEEE 是世界上最大的技术专业组织,致力于为人类的利益而发展技术。 线程调用描述pthread_create创建一个新线程pthread_exit结束调用的线程pthread_join等待一个特定的线程退出pthread_yield释放 CPU 来运行另外一个线程pthread_attr_init创建并初始化一个线程的属性结构pthread_attr_destory删除一个线程的属性结构 所有的 Pthreads 都有特定的属性,每一个都含有标识符、一组寄存器(包括程序计数器)和一组存储在结构中的属性。这个属性包括堆栈大小、调度参数以及其他线程需要的项目。 新的线程会通过 pthread_create 创建,新创建的线程的标识符会作为函数值返回。这个调用非常像是 UNIX 中的 fork 系统调用(除了参数之外),其中线程标识符起着 PID 的作用,这么做的目的是为了和其他线程进行区分。 当线程完成指派给他的工作后,会通过 pthread_exit 来终止。这个调用会停止线程并释放堆栈。 一般一个线程在继续运行前需要等待另一个线程完成它的工作并退出。可以通过 pthread_join 线程调用来等待别的特定线程的终止。而要等待线程的线程标识符作为一个参数给出。 有时会出现这种情况:一个线程逻辑上没有阻塞,但感觉上它已经运行了足够长的时间并且希望给另外一个线程机会去运行。这时候可以通过 pthread_yield 来完成。 下面两个线程调用是处理属性的。pthread_attr_init 建立关联一个线程的属性结构并初始化成默认值,这些值(例如优先级)可以通过修改属性结构的值来改变。 最后,pthread_attr_destroy 删除一个线程的结构,释放它占用的内存。它不会影响调用它的线程,这些线程会一直存在。 为了更好的理解 pthread 是如何工作的,考虑下面这个例子 主线程在宣布它的指责之后,循环 NUMBER_OF_THREADS 次,每次创建一个新的线程。如果线程创建失败,会打印出一条信息后退出。在创建完成所有的工作后,主程序退出。 主要有三种实现,一种是在用户空间中实现线程,一种是在内核空间中实现线程,一种是在用户和内核空间中混合实现线程。下面我们分开讨论一下 第一种方法是把整个线程包放在用户空间中,内核对线程一无所知,它不知道线程的存在。所有的这类实现都有同样的通用结构 线程在运行时系统之上运行,运行时系统是管理线程过程的集合,包括前面提到的四个过程: pthread_create, pthread_exit, pthread_join 和 pthread_yield。 运行时系统(Runtime System) 也叫做运行时环境,该运行时系统提供了程序在其中运行的环境。此环境可能会解决许多问题,包括应用程序内存的布局,程序如何访问变量,在过程之间传递参数的机制,与操作系统的接口等等。编译器根据特定的运行时系统进行假设以生成正确的代码。通常,运行时系统将负责设置和管理堆栈,并且会包含诸如垃圾收集,线程或语言内置的其他动态的功能。 在用户空间管理线程时,每个进程需要有其专用的线程表(thread table),用来跟踪该进程中的线程。这些表和内核中的进程表类似,不过它仅仅记录各个线程的属性,如每个线程的程序计数器、堆栈指针、寄存器和状态。该线程标由运行时系统统一管理。当一个线程转换到就绪状态或阻塞状态时,在该线程表中存放重新启动该线程的所有信息,与内核在进程表中存放的信息完全一样。 在用户空间中实现线程要比在内核空间中实现线程具有这些方面的优势:考虑如果在线程完成时或者是在调用 pthread_yield 时,必要时会进程线程切换,然后线程的信息会被保存在运行时环境所提供的线程表中,进而,线程调度程序来选择另外一个需要运行的线程。保存线程的状态和调度程序都是本地过程,所以启动他们比进行内核调用效率更高。因而不需要陷入内核,也就不需要上下文切换,也不需要对内存高速缓存进行刷新,因为线程调度非常便捷,因此效率比较高。 在用户空间实现线程还有一个优势就是它允许每个进程有自己定制的调度算法。例如在某些应用程序中,那些具有垃圾收集线程的应用程序(知道是谁了吧)就不用担心自己线程会不会在不合适的时候停止,这是一个优势。用户线程还具有较好的可扩展性,因为内核空间中的内核线程需要一些表空间和堆栈空间,如果内核线程数量比较大,容易造成问题。 尽管在用户空间实现线程会具有一定的性能优势,但是劣势还是很明显的,你如何实现阻塞系统调用呢?假设在还没有任何键盘输入之前,一个线程读取键盘,让线程进行系统调用是不可能的,因为这会停止所有的线程。所以,使用线程的一个目标是能够让线程进行阻塞调用,并且要避免被阻塞的线程影响其他线程。 与阻塞调用类似的问题是缺页中断问题,实际上,计算机并不会把所有的程序都一次性的放入内存中,如果某个程序发生函数调用或者跳转指令到了一条不在内存的指令上,就会发生页面故障,而操作系统将到磁盘上取回这个丢失的指令,这就称为缺页故障。而在对所需的指令进行读入和执行时,相关的进程就会被阻塞。如果只有一个线程引起页面故障,内核由于甚至不知道有线程存在,通常会吧整个进程阻塞直到磁盘 I/O 完成为止,尽管其他的线程是可以运行的。 在用户空间实现线程的另外一个问题是,如果一个线程开始运行,该线程所在进程中的其他线程都不能运行,除非第一个线程自愿的放弃 CPU,在一个单进程内部,没有时钟中断,所以不可能使用轮转调度的方式调度线程。除非其他线程能够以自己的意愿进入运行时环境,否则调度程序没有可以调度线程的机会。 现在我们考虑使用内核来实现线程的情况,此时不再需要运行时环境了。另外,每个进程中也没有线程表。相反,在内核中会有用来记录系统中所有线程的线程表。当某个线程希望创建一个新线程或撤销一个已有线程时,它会进行一个系统调用,这个系统调用通过对线程表的更新来完成线程创建或销毁工作。 内核中的线程表持有每个线程的寄存器、状态和其他信息。这些信息和用户空间中的线程信息相同,但是位置却被放在了内核中而不是用户空间中。另外,内核还维护了一张进程表用来跟踪系统状态。 所有能够阻塞的调用都会通过系统调用的方式来实现,当一个线程阻塞时,内核可以进行选择,是运行在同一个进程中的另一个线程(如果有就绪线程的话)还是运行一个另一个进程中的线程。但是在用户实现中,运行时系统始终运行自己的线程,直到内核剥夺它的 CPU 时间片(或者没有可运行的线程存在了)为止。 由于在内核中创建或者销毁线程的开销比较大,所以某些系统会采用可循环利用的方式来回收线程。当某个线程被销毁时,就把它标志为不可运行的状态,但是其内部结构没有受到影响。稍后,在必须创建一个新线程时,就会重新启用旧线程,把它标志为可用状态。其实在用户空间也可以循环利用线程,但是由于用户空间创建或者销毁线程开销小,因此没有必要。 如果某个进程中的线程造成缺页故障后,内核很容易的就能检查出来是否有其他可运行的线程,如果有的话,在等待所需要的页面从磁盘读入时,就选择一个可运行的线程运行。这样做的缺点是系统调用的代价比较大,所以如果线程的操作(创建、终止)比较多,就会带来很大的开销。 结合用户空间和内核空间的优点,设计人员采用了一种内核级线程的方式,然后将用户级线程与某些或者全部内核线程多路复用起来 在这种模型中,编程人员可以自由控制用户线程和内核线程的数量,具有很大的灵活度。采用这种方法,内核只识别内核级线程,并对其进行调度。其中一些内核级线程会被多个用户级线程多路复用。 这篇文章为你讲述操作系统的层面来说,进程和线程分别是什么?进程模型和线程模型的区别,进程和线程的状态、层次结构、还有许多的专业术语描述。 下一篇文章我们会把目光放在进程间如何通信上,也是操作系统级别多线程的底层原理,敬请期待。 文章参考: 《现代操作系统》 《Modern Operating System》forth edition https://www.encyclopedia.com/computing/news-wires-white-papers-and-books/interactive-systems https://j00ru.vexillium.org/syscalls/nt/32/ https://www.bottomupcs.com/process_hierarchy.xhtml https://en..org/wiki/Runtime_system https://en..org/wiki/Execution_model

用户评论

烟花巷陌

这篇文章写的太棒了!我一直都在找一个简单易懂的教程来学习怎么分析系统进程,终于找到了!感谢作者分享这么宝贵的信息,我打算赶紧把这些方法都试一试。

    有5位网友表示赞同!

为爱放弃

我觉得这个标题挺吸引人的,但是内容有点浅。更多地讲解一下具体操作步骤和一些常见的病毒特征会更实用。毕竟很多新手还不太了解进程分析的基本概念。

    有15位网友表示赞同!

﹎℡默默的爱

我也是小白,平时电脑问题就找朋友帮忙解决, 这篇文章让我学会了一些基本知识,至少知道怎么查看系统进程了,以后自己遇到问题也能慢慢尝试处理一下!

    有19位网友表示赞同!

£烟消云散

病毒检测越来越先进,但依然会有新的杀毒软件无法识别的病毒威胁。だからこそ,了解系统进程分析的重要性更加突出!文章内容很清晰易懂,强烈推荐给大家学习。

    有14位网友表示赞同!

青袂婉约

系统进程分析确实是一个非常重要且有用的技能,特别是对于IT安全工作者来说更是如此。这篇文章只是入门级的教程,希望作者以后可以继续分享更深入的内容,比如如何使用一些专业的工具进行更加深入的分析。

    有5位网友表示赞同!

暮光薄凉

讲真,很多时候我电脑莫名卡顿或者出现奇怪的异常,都不知道是什么原因。学习一下系统进程分析应该能帮我找到问题的根源吧! 感谢这份清晰易懂的教程!

    有8位网友表示赞同!

あ浅浅の嘚僾

说的有点过于简单化了,像病毒是如何隐藏自己、是如何窃取数据的这些点都比较缺乏细节描述。希望作者可以进一步补充一些实用的案例和技巧。

    有20位网友表示赞同!

心已麻木i

对于初学者来说,系统进程查看这个概念可能有些抽象。希望能加入一些图示或视频讲解,让读者更直观的理解进程分析的功能和步骤。

    有19位网友表示赞同!

摩天轮的依恋

我最近在研究网络安全,这篇文章正好给了我一些启发! 能够了解病毒的入侵方式和运行机制对防御工作至关重要。感谢作者分享!

    有11位网友表示赞同!

黑夜漫长

我觉得这个标题就写得很好,直接明了,让人一目了然想要去学习。内容如果能再详细一点就好了,比如哪些进程是高危、常见的恶意程序有哪些特征等等。

    有8位网友表示赞同!

慑人的傲气

学习系统进程分析确实可以提高安全意识,但是需要注意的是,盲目地查杀进程可能会导致系统不稳定,甚至造成数据丢失。建议读者在操作前仔细阅读相关资料,并且做好备份工作!

    有19位网友表示赞同!

灼痛

这篇文章对我来说很有帮助,我以前只知道看任务管理器,没想到还有这么多深层的细节。学习完毕,赶紧用这篇文章的内容去练习一下吧!

    有16位网友表示赞同!

冷青裳

系统进程分析是一个非常专业的领域,需要深入了解操作系统和网络安全知识才能真正掌握。这篇入门教程虽然简单,但也打下了基础,希望以后能出更深入的课程。

    有7位网友表示赞同!

她的风骚姿势我学不来

个人觉得这篇文章内容较浅,缺乏实践操作指导。比如如何使用工具查看进程信息、如何分析进程行为等等,这些都应该是重点讲解的内容吧!

    有15位网友表示赞同!

迁心

我之前也遇到过电脑中毒的情况,找了很多教程都没有解决问题。现在看看这篇关于系统进程分析的文章,希望能找到一些对症下药的技巧来解决我的困扰!

    有16位网友表示赞同!

惯例

虽然这篇文章很有趣,但是对于我不懂电脑程序的朋友来说,可能有点难以理解。希望作者能够用更通俗易懂的语言解释一些复杂的专业术语?

    有12位网友表示赞同!

如梦初醒

文章介绍的方法可以用在很多场景中,例如找出系统资源消耗过大进程、监控黑客恶意行为等等。总之,掌握系统进程分析技巧可以让我们更好地了解电脑的工作原理,提高安全防护能力!

    有12位网友表示赞同!

标题:如何通过系统进程分析病毒、系统进程查看
链接:https://yqqlyw.com/news/rj/64961.html
版权:文章转载自网络,如有侵权,请联系删除!
资讯推荐
更多
做超声检查时,医生为什么要在患者肚子上涂粘粘的东西

做B超为什么要涂凝胶?在支付宝蚂蚁庄园每日一题中,2021年4月9日的问题是问做超声检查时,医生为什么要在患者肚

2026-01-14
小米mix fold有前置摄像头吗

小米mix fold有前置摄像头吗?作为小米的第一款折叠屏手机,这款手机可以说实话非常的强大,但是很多网友还是想要

2026-01-14
蚂蚁庄园4月10日答案最新

蚂蚁庄园4月10日答案最新是什么?在支付宝蚂蚁庄园每日一题中,你知道蚂蚁庄园2021年4月10日答案是什么吗?该怎么

2026-01-14
蚂蚁庄园4月13日答案最新

支付宝蚂蚁庄园今日答题答案是什么?在支付宝蚂蚁庄园每日一题中,每天都会刷新出现多个题目等待大家来回答,回答

2026-01-14