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

简介: 可以使用 process explorer 替换任务管理器,本文使用 proccess monitor 监控整个过程

前言

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

功能介绍

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

replace-task-manager.png

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

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

实现原理

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

taskmgr.exe为例,设置如下图:
image file excution options taskmgr

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

验证

process explorer到底是不是通过这种方法实现的呢?让我们用process monitor来观察一下整个过程吧。具体步骤我就省略了,请参考下面的动图。
replace-taskmanager-screen-record

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

轻松一下

既然我们知道了原理,我们可以尝试尝试其它玩法。用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\""

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

你知道吗?

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

总结

  • 利用process monitorProcess Tree功能,可以方便的让我们查找到指定的进程,并进行过滤。

  • Image File Execution Options注册表项很好很强大。镜像劫持。

  • process explorerprocess monitor只是sysinternals工具集中的两个常用的工具。心动了吗?官方下载地址:https://docs.microsoft.com/en-us/sysinternals/downloads/

参考资料

相关文章
|
8月前
|
C#
C#程序Debug文件夹可以运行,无法调试
C#程序Debug文件夹可以运行,无法调试
|
9月前
|
Windows
|
9月前
|
存储
调试实战——使用windbg调试崩溃在ole32!CStdMarshal::DisconnectSrvIPIDs
使用windbg调试崩溃在ole32!CStdMarshal::DisconnectSrvIPIDs
|
开发工具 Android开发
启动Android模拟器后,在file Explorer中看不到任何文件
启动Android模拟器后,在file Explorer中看不到任何文件
297 0
|
C#
c#代码启动任务管理器的几种方法
原文:c#代码启动任务管理器的几种方法 1.直接启动 ProcessStartInfo info = new ProcessStartInfo(); info.
1717 0
|
NoSQL Linux 网络协议
GDB(十)--调试正在运行的进程
我编写了一个循环:     long i;    for (i = 0; i < 999999; i++) {        mt.a += 1;        sleep(1);    }把它编译成a.out,并在后台执行它:./a.out & [1] 2570 然后用命令gdb ./a.out 2570可以附加到这个进程上。
2120 0
|
Windows
【Windows 逆向】OD 调试器工具 ( OD 调试数据时硬件断点对应的关键代码 | 删除硬件端点恢复运行 )
【Windows 逆向】OD 调试器工具 ( OD 调试数据时硬件断点对应的关键代码 | 删除硬件端点恢复运行 )
277 0
【Windows 逆向】OD 调试器工具 ( OD 调试数据时硬件断点对应的关键代码 | 删除硬件端点恢复运行 )
|
IDE 编译器 开发工具
使用Process Explorer工具分析Visual Studio 2013编译和调试产生的进程
使用Process Explorer工具分析Visual Studio 2013编译和调试产生的进程
178 0
|
Shell Windows
更改开机默认不显示explorer.exe,直接启动自己写的EXE程序方法
原文:更改开机默认不显示explorer.exe,直接启动自己写的EXE程序方法 更改开机默认不显示explorer.exe,直接启动自己写的EXE程序的函数: bool UpdateWinlogon(CString _...
1264 0
|
Linux C#
centos7 lldb 调试netcore应用的内存泄漏和死循环示例(dump文件调试)
写个demo来玩一玩linux平台下使用lldb加载sos来调试netcore应用。 当然,在真实的产线环境中需要分析的数据和难度远远高于demo所示,所以demo的作用也仅仅只能起到介绍工具的作用。
1576 0