原Aha总结注册表process explorersysinternalsprocess monitor

前言

一般,我们会使用任务管理器查看系统中有哪些进程正在运行,强制杀掉某个进程。可是系统自带的任务管理器功能有限,​​process explorer​​是一个功能更强大的工具。它可以让我们查看更多更详细的信息( 比如查看某个进程的父进程,进程加载了哪些​​dll​​,打开了哪些文件,线程的​​cpu​​使用情况,线程的调用栈,哪些文件被哪些进程占用了,等等 …… )。有没有办法让​​process explorer​​替换系统自带的任务管理器呢?:thinking:

功能介绍

这个功能,​​process explorer​​的作者​​Mark Russinovich​​已经帮我们想到了。​​process explorer​​提供了一个很酷的功能——替换任务管理器(​​taskmgr.exe​​),这样当我们运行任务管理器的时候,就会自动打开功能更强大的​​process explorer​​了。


[原]排错实战——使用process explorer替换任务管理器_任务管理器

replace task manager


{% note info %}

说明:此操作需要以管理员权限运行​​process explorer​​。

{% endnote %} 

这么厉害的操作,是怎么实现的呢?


实现原理

原来​​windows​​中有个注册表项​​HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options​​。如果​​程序A​​在​​Image File Execution Options​​下有对应的注册表项, 当我们启动​​程序A​​的时候,系统会启动​​Debugger​​子项中的值对应的程序,并把​​程序A​​的路径当作参数传递过去。以​​taskmgr.exe​​为例,设置如下图:

[原]排错实战——使用process explorer替换任务管理器_任务管理器_02

当​​taskmgr.exe​​启动的时候,系统检测到​​taskmgr.exe​​在​​Image File Execution Options​​下有对应的设置项,系统会启动​​Debugger​​子项中的值对应的程序​​C:\My\tools\sysinternals\procexp.exe​​,并把​​taskmgr.exe​​的路径(我机器上是​​C:\WINDOWS\SYSTEM32\TASKMGR.EXE​​)当作参数传递给​​procexp.exe​​。


验证

​process explorer​​到底是不是通过这种方法实现的呢?让我们用​​process monitor​​来观察一下整个过程吧。具体步骤我就省略了,请参考下面的动图。[原]排错实战——使用process explorer替换任务管理器_参数传递_03


{% note warning %}

注意:​process monitor​​默认会过滤掉​​process explorer​​相关的事件,如果想看到相关事件,需要手动取消过滤。自己验证的时候,一定不要忘了这一点。为了引起大家的重视,我特地把相关设置截图贴到下方!


[原]排错实战——使用process explorer替换任务管理器_microsoft_04

cancel-filter-process-explorer


{% endnote %}


轻松一下

既然我们知道了原理,我们可以尝试尝试其它玩法。用​​notepad.exe​​替换​​taskmgr.exe​​怎么样?当启动​​taskmgr.exe​​的时候,启动的将会是​​notepad.exe​​。

何不用这项技术娱乐下周围的同事?替换掉大家常用的​​vs​​(对应的名字为​​devenv.exe​​),这样当同事打开​​vs​​准备写代码的时候,会是什么表情呢? :smirk:


脚本

把下列代码保存成​​taskmgr.reg​​,双击即可导入到注册表。

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe]
"Debugger"="\"C:\\My\\tools\\sysinternals\\procexp.exe\""


{% note warning %}

注意:​debugger​​的值要替换成你自己机器上的路径。

{% endnote %} 


你知道吗?

可以使用​​Ctrl + Shift + Esc​​或者​​Ctrl + Alt + Delete​​来打开任务管理器。你喜欢用哪种方式打开呢?还知道其它打开任务管理器的方法吗?


总结


  • 利用​​process monitor​​的​​Process Tree​​功能,可以方便的让我们查找到指定的进程,并进行过滤。
  • ​Image File Execution Options​​注册表项很好很强大。镜像劫持。
  • ​process explorer​​和​​process monitor​​只是​​sysinternals​​工具集中的两个常用的工具。心动了吗?官方下载地址:https://docs.microsoft.com/en-us/sysinternals/downloads/


参考资料


  • Image File Execution Options
  • 《Windows Sysinternals 实战指南》