剖析Windows任务管理器开发原理与实现

Windows2000/XP内含的任务管理器(Taskmgr)相信大家都熟悉吧,相比之下XP里的要比2000功能更加强大,返回的信息也更加的详细,不过您是否觉得还有很多希望获得的消息没有包含在里面吗?您是否觉得Windows的系统管理工具箱里的东西太分散了吗?下面就让我们看看它们的开发原理,并动手实现一个真正的任务管理器。现在我们是调用Win32API来实现这些功能的,但是大家都说MS隐藏了太多的细节,以后我们将讨论更多关于Windows内核的东东。

可能大家对任务管理器里最熟悉的功能要数进程管理了,常常我们在怀疑中了病毒/木马的时候都会看看任务管理器里有没有什么特别的进程在运行,所以进程查看器应该是一个非常重要的功能。我们除了需要获得进程的名称外,还有什么呢?当然包括它的进程标识符(ProcessID),用户信息(UserName),CPU使用时间(CPUTime)和存储器的使用情况(MemoryUsage),还有它的优先权(BasePriority)。CPU和Memory信息可以帮助我们分析进程的运行情况,而优先权可以表示进程在CPU分配处理器使用时的优先情况。这些都是通用的进程信息,让我们再看看其他的信息吧。进程的父进程标识符(Parent Process ID),创建时间(Create Time),程序名称等在很多情况下也是我们关心的信息。我们再看看进程相关的性能信息。在Windows下通常有两种模式:内核模式(Kernel: Level 0)和用户模式(User: Level 3),进程往往在两种模式中来回切换,所以可以获得进程在内核模式和用户模式各自的使用时间。同时还包括进程相关的工作集(WorkingSet),分页池(PagedPool),非分页池(NonePagedPool)和页面文件(PageFile)信息。进程相关的I/O操作包括读/写/其他等动作,我们可以获得这些操作的次数和传送数据的数量。

如果您怀疑某个进程是木马,那您还想获得哪些信息呢?简单的进程名称应该是不够的吧!我们希望获得进程的实际程序的路径,这样可以帮助我们判断究竟是那个程序在运行。前段时间不是在讨论什么进程隐藏的,其中一种就是“创建远程线程”,而注体往往又是以动态链接库(DLL)的形式存在的,我们就希望看到某个具体进程所包含的所有模块(Module),常常是DLL也。“线程”是一个大家熟悉的名字,它是Windows系统中的实现体,而进程则是线程运行的环境。一个进程到底创建了多少线程了?我们同样可以枚举进程内部的所有线程信息。如果您发现一个木马进程,下面的动作就应该是分析它的运行机制(如果您对它感兴趣),不过最终您还是要将它结束吧。在Windows2k下,很多系统关键进程在TaskMgr里是不能被结束的,不过现在您不用担心了。好的,对进程的操作当然就包括结束进程。如果您用过中文的XP,您是否常常遇到任务栏“假死”的情况,虽然您的电脑没有挂掉,但却动弹不得,那好我们也同样可以将任意的进程挂起来,不管您对它做什么动作(除了结束),它都不会有任何的反应。有了挂起进程,同样我们也可以将进程从“挂起”状态激活哈。

桌面窗口是大家接触得最多的交互界面了,您是否想获得每个窗口的标题信息呢?当然我们还可以获得与窗口关联的进程,线程与窗口句柄属性。如果大家对VC比较熟悉,就应该知道其中的一个SPY++工具吧,它就可以获得桌面窗口,进程和线程的详细信息,不过现在就不用打开这个,打开那个了,通通搞定了!

系统性能是每个用户关心的话题。它包括整个系统当前创建的句柄,进程以及线程的数目。还有物理存储器(Physical Memory)的总量和使用情况,系统高速缓存(System Cache)的大小,存储器保留与提交(Commit Charge)状况,当然还有核心分页/非分页池(Kernel Memory)的使用情况。几乎包括了Windows系统下存储器管理的大部分信息。

虽然现在硬盘的价格已经很低了,不过我还是在用6.4G的小东东,所以常常遇到“Low Disk”!我们常常要看看硬盘的使用情况,不过每次都要进入我的电脑,太麻烦了。而我们现在可以一次了解所有磁盘的容量和当前使用情况,同时还有它们的格式类型(如FAT,NTFS,CDFS等)和磁盘标签。

说到环境块,或许不是那么熟悉吧,它包含一些环境变量,而每个环境变量对应一个/多个字符串,您可以在控制面板的SYSTEM/Advanced(系统/高级)里对它们进行设置,包括添加新的环境变量,删除和编辑系统环境变量。

事件记录对我们分析系统的使用情况有很大的帮助。事件记录分为三种:应用程序,系统和安全。而对应的每种事件又可以分为几种类型,它们分别是常规信息,警告和错误。其中包括记录序号(Record Number),事件类型(Type),标识符(Event ID),来源(Source),产生时间(Time Generated),用户名(User)和相关描述信息(Description)。有时间大家可以多看看事件信息,当然每个网络管理员对它们应该是很熟悉的,不过还包括其他的事件日志信息。

Windows系统下的ipconfig /all这个命令我是常常用,因为我们使用的是DHCP,没事看看自己的IP地址变了没有。其中包括详细的网络适配器的信息,包括适配器名称,描述,硬件地址和类型,IP地址及相应的子网掩码,网关与DHCP服务器地址等。不过您是否对网络流量也感兴趣呢?我们当然可以获得主机接受/发送了多少(非)广播数据报,出现了多少错误,一共接受/发送了多少信息,这些对每个网友都是有用的信息哟。

网络共享往往是大家注意的地方,您究竟共享了多少信息,它们的文件路径是什么,还有它们的共享类型信息。我们在不需要某些共享资料时,当然不要忘了将其删除,以免泄露自己的机密信息。

Windows的NT是一个多用户的系统,允许多种类型用户的存在。我们希望获得用户账号的使用期限(Password Expired),记住要不定时的修改用户的密码哟,以及用户标识符(User ID),组标识符(Group ID),还有用户账号的类型(Type),不同的类型有不同的权限,我们当然希望有最High的权力哟!看看系统对某个账号的磁盘空间使用情况是否有限制(Max Storage),账号登录的次数(Number Of Logon)和登录时间信息(Logon Hours)等,对我们分析用户的使用情况也有帮助的。

系统的Win32服务和设备驱动信息也是很重要的,我们希望探测每个服务/设备启动程序的具体路径,状态,类型,启动方式等等信息。我们还希望对服务进行控制,比如停止,启动和删除操作。大家可以参阅《浅析Windows2000/XP服务与后门技术》获得更多关于Win32服务的信息。

关机也不是那么的单调的,您可以注销自己的系统,如果您要离开当然就需要锁定了。最近大家都不喜欢关机,太麻烦了,所以都习惯使用冬眠,系统将会为我们保留当前信息,不过还有支持电源管理的关机和休眠。Windows2000的用户注意了,我们同样可以使用XP系统下的带有到记时与消息提示的关机和重启功能了。

系统的版本信息是比较固定的,主要包括操作系统的指纹,注册组织/用户,主机名和系统相关目录等信息。 

说了这么多,我们也该谈谈如何实现了。

时间: 2024-11-05 06:27:39

剖析Windows任务管理器开发原理与实现的相关文章

用C#开发较完整的Windows任务管理器

原文 用C#开发较完整的Windows任务管理器 这个代码没有什么技术含量,仅仅使用 WMI 和 API 实现了 Windows 任务管理器的部分功能. 但代码里面封装了一个 SystemInfo 的类,它提供了一些方法,可以获取以下系统信息: CPU个数,CPU占用率可用内存,物理内存分区信息进程列表,结束指定进程根据物理地址获取 IP 地址,根据 IP 地址获取物理地址获取网络信息查找所有应用程序标题 源代码:/Files/lemony/SystemInfo.rar 注:关于获取网络信息的方

Cocos开发中性能优化工具介绍之使用Windows任务管理器

说到Windows平台我们很快就想到了Visual Studio 2012然而Visual Studio 2012在这方面没有很好的工具.如果我们只是想知道大体上内存.CPU等在某一事件前后变化情况我们可以使用Windows任务管理器.Windows任务管理器对于很多用户都不陌生自从有Windows操作系统以来这个工具就伴随着Windows.打开任务管理器方法也有很多在Windows7和Windows8平台可以使用Ctrl+Shift+Esc 组合键调出也可通过Ctrl+Alt+Delete 组

Windows Phone开发(10):常用控件(上)

原文:Windows Phone开发(10):常用控件(上) Windows Phone的控件有几个来源,和传统的桌面应用程序开发或Web开发一样,有默认提供的控件和第三方开者发布的控件.一般而言,如果不是过于复杂的界面布局,使用默认控件就足矣.相比之下,Android SDK中尽管提供了许多可视化控件,但你会发现,实际开发用到的并不多,而且很多控件完全只是摆设,既没有公开相应的操作方法也没有更多可用于开发者自行处理的监听器(这里我习惯翻译为监听器,在安卓里面没有像C#那样使用事件,而是new一

java-Java编写Windows任务管理器

问题描述 Java编写Windows任务管理器 用Java编写一个类似Windows任务管理器的程序,要求简单(初学者老师要求不大) 解决方案 java对进程的管理只限于java程序自己创建的进程,对windows的进程很难实现管理java如果可以管理windows的进程那就碉堡了!!! 但也不是完全不能实现对windows的控制 其中最简单的做法就是同DOS命令形式对windows进行管理 你可以去看看java的Process类 它可以实现运行dos命令这样就可也实现windows任务管理了

Windows移动开发(五)——初始XAML

关于具体的基本功就先说这么多,后面遇到再补充说明,前面说的都是一些代码和原理方面的东西,接下来说的会有界面和代码结合,会有成就感,因为能真正的做出东西来了. Windows移动开发包括Windows Store和Windows Phone,Windows Store程序主要针对的是Surface,Windows Phone主要是Win8 Metro手机应用,这两个产品的开发模式基本类似,和Silverlight很像,只是Silverlight是运行在浏览器中,如果有Silverlight基础的A

Windows Phone开发(43):推送通知第一集——Toast推送

原文:Windows Phone开发(43):推送通知第一集--Toast推送 好像有好几天没更新了,抱歉抱歉,最近"光荣"地失业,先是忙于寻找新去处,唉,暂时没有下文.而后又有一些琐事要办,不过不要紧,今天咱们继续. 动画的内容就告一段落,本系列文章只作简单引导,不会覆盖每一个细节,最终能不能学好,就完全看各位自己了.   从本节开始,我们将讨论推送通知,这个东西不太好理解,而推送通知的原理和过程,如果你看MSDN的示意图,相信你会有点晕,若不,我帖出给你看看.  算了,不帖,不知怎

Windows Phone开发(13):如何规范用户的输入行为

原文:Windows Phone开发(13):如何规范用户的输入行为 很多时候,我们对用户的操作或输入做一定程度的限制,以避免发生不必要的异常或错误,因此,对一些特殊的类型,进行输入限制是很有必要的. 通改变屏幕键盘的显示模式可以规范和告诉用户, 这里应该输入什么. 要做到这些并不复杂,只要用到一个类就足矣-- InputScope,它有一个Names属性,包含InputScopeName列表,而InputScopeName的NameValue是一个枚举值,说到底,显示什么样的屏幕键盘就取决于该

Windows Phone开发(46):与Socket有个约会

原文:Windows Phone开发(46):与Socket有个约会 不知道大家有没有"谈Socket色变"的经历?就像我一位朋友所说的,Socket这家伙啊,不得已而用之.哈,Socket真的那么恐怖吗? 其实这话一点也不假,Socket有时候真的不太好操控,也不好维护,但不管怎么样,我们还是要面对它的,没准Socket是一位大美女哦. 关于Socket的前世今生就不用我详述了,关于她的历史,已经不少人仁志士为她立传写著了,像我们国内的百度百科.互动百科等:全球著名的如维基百科之属.

Windows Phone开发(5):室内装修

原文:Windows Phone开发(5):室内装修 为什么叫室内装修呢?呵呵,其实说的是布局,具体些嘛,就是在一个页面中,你如何去摆放你的控件,如何管理它们,你说,像不像我们刚搬进新住所,要"装修"一番?买一套什么样的茶几和杯具(我说的"杯具"指的是原意,不要理解错了),或者沙发什么的,该怎么放,摆在哪里好看,其实,我们做界面设计也是差不多这个道理. 相信我们下过象棋就知道,棋盘上有横向的,纵向的很多网格线,而棋子就是参照这些网格线来放置的,对,在WP页面布局中我