Sysinternals---Process Explorer

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_18218335/article/details/79312622

如果你现在或者将来的主要工作平台为Windows,但还没有接触过Process Explorer,那你应该反思一下了。

官网:

https://docs.microsoft.com/zh-cn/sysinternals/downloads/process-explorer

  • 顾名思义,Process Explorer 就是一个功能强大的进程资源管理器。Windows 自带的任务管理器功能太过简陋,对于一个专业的开发人员来说,一个强大的进程资源管理器十分必要。

功能介绍

    1. 更详尽的进程列表

这里写图片描述
其中以缩进方式显示进程父子关系,不同的进程颜色显示不同的进程属性,且其颜色可自定义,菜单->Options->Configure Colors
这里写图片描述
列条目是可选的,可以定制自己所需显示的信息,我常用的就是两项,Image Type 和 User Name
这里写图片描述

    1. 详细的进程信息(以可怜的calc.exe 为例)

双击或者选中calc 进程后双击(或者通过类似spy++的小靶子选中可视的窗口)出现如下窗口:

这里写图片描述
窗口最上方显示了可以选择的进程信息。当前选择为Threads,途中显示了线程的ID,起始地址,以及其起始时间、优先级、占用了系统及用户空间的时间、状态等信息,下方按钮提供了可对线程进行的操作:主要就是暂停/恢复,kill,查看线程权限等操作。
Module 按钮显示的是线程当前执行所在的模块的信息。

查看线程栈
点击Stack,效果同双击线程,将会显示线程的调用栈,其实现方式是dbghelp.dll模块及其相关的函数,如果想了解相关内容可以查看我之前介绍栈回溯的文章,或自行百度。
这里比较特别的一点是:当我们UAC 运行Process Explorer,此时选择查看线程调用堆栈时将可以显示内核模块的信息。
这里写图片描述

  • TCP/IP—-显示进程的TCP/IP 活动
  • Security—进程安全相关
  • Environment—进程环境变量,顺便提一句,此工具以及Sysinternals 的所有的工具的列表显示有的是可以排序的,另外,在主窗口对应的选项卡点击以排序后,会丢失父子关系信息,如果想恢复显示,可以按下Ctrl+T,或者选择菜单:View->Show Process Tree。Process Hacker 比这个工具好的地方就在于,其提供了进程搜索功能,可以搜索进程名,进程ID等,另外其显示列表可排序的程度更大,对于显示不太全的信息,双击后可以显示,总体来说功能更加强大,更好用。后面将会介绍。
  • Strings
    这里写图片描述

字符搜索功能,包括镜像文件中的字符搜索以及内存中的字符搜索。可以说很贴心了。

  • Image
    进程完整路径,签名,版本号,生成时间,命令行,当前路径,父进程,用户,起始时间, 镜像类型,DEP 状态,ASLR 状态等等。

  • performance 和 performace Graph 是其执行性能方面的信息

  • Disk 和 Network 显示网络I/O 和 磁盘I/O 的量。
  • 对于Job 中的进程可以显示Job 信息。

进程详细信息中的信息大概就是上面这些了。但是我们发现它的信息是不全的,其中我们进程需要了解的模块信息,句柄,等信息是没有的。后来经过查看菜单选项,发现其模块信息和句柄信息是可选择的显示在主窗口上的。可能作者考虑这两项是经常需要使用的功能,就放在了这里。相反,Process Hacker 的作者将它放到了进程的详细信息中,哪个位置比较好就看个人的洗好了,用起来其实差别不大。
选择显示模块和句柄的方法:
快捷键:Ctrl+D 显示DLL,Ctrl+H显示句柄。Ctrl+L 选择显示或者不显示下层的信息。
菜单按钮:这里写图片描述
点击图中6号可以切换显示DLL 和 句柄。
菜单:View->Show lower Pane设置。
这里写图片描述
如果想选择显示未命名的句柄、内存映射:
View->Show Unnamed Handles And Mappings

文件及句柄查找:强大且使用的功能,查找文件占用、模块占用很有效果。Ctrl+F 即可召唤。

其他福利功能:自行探索吧。

实例解决问题。

  • 问题描述,在开发一个防火墙功能时,为了测试“对指定路径的应用程序添加规则”的功能时,选择了internet Explorer(IE).exe。之后添加规则,但是发现其仍然可以上网。然后查看log发现文件路径以及函数调用都是成功的,之后想,是不是自己的路径传入错了,然后想起自己平时使用chorme 时,进程列表中常常有很多的chorme 进程,IE 会不会也是这样的。此时打开Process Explorer,发现如下信息:
    这里写图片描述

目标系统为X64,为什么运行IE 会同时有X64、X86两种进程存在,之后查看进程详细类型发现IE分别运行了X64和X86两个版本,我们传入给下层的进程的路径是X64版本IE 的路径。当我们在IE 中打开多个标签页时,会新增一些X86 版本的IE,后来我猜想,IE 是不是通过X86版本的进程进行的网络操作,X64版本进行的行为控制等等信息?后来通过选取X86版本的IE 的路径设置防火墙,IE 确实无法进行网络连接了。
之后更进一步,查看IE的更多细节如下:
这里写图片描述
在我们使用Process Explorer 的靶子分别选择IE的1,2号区域时,Process Explorer 分别指向了X64 IE和 X86 IE。
再看下面的实验:分别选择不同的选项卡:
这里写图片描述

由此可猜测IE 的选项卡的机制,具体的内容不清楚,留给有兴趣的同学吧。

  • 顺便说一句,如果没有对于这个工具的很好的利用,没有自己的猜想和实验,估计问题的解决时间是不确定的。由此可见经验和工具对于工作效率的重要性。

题外话:可以通过Process Explorer 查看一下Process Explorer 自己的实现机制。它对应平台的镜像是怎么安排的?都是X86?都是X64?当以UAC 权限运行时是否有驱动?如果有,驱动的路径在哪里?

猜你喜欢

转载自blog.csdn.net/qq_18218335/article/details/79312622