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

前言

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

功能介绍

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

replace task manager

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

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

实现原理

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

taskmgr.exe为例,设置如下图:

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相关的事件,如果想看到相关事件,需要手动取消过滤。自己验证的时候,一定不要忘了这一点。为了引起大家的重视,我特地把相关设置截图贴到下方!

轻松一下

既然我们知道了原理,我们可以尝试尝试其它玩法。用notepad.exe替换taskmgr.exe怎么样?当启动taskmgr.exe的时候,启动的将会是notepad.exe。何不用这项技术娱乐下周围的同事?替换掉大家常用的vs(对应的进程名为devenv.exe),这样当同事打开vs准备写代码的时候,会是什么表情呢?????

脚本

把下列代码保存成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 + Alt + Esc或者Ctrl + Alt + Delete来打开任务管理器。你喜欢用哪种方式打开呢?还知道其它打开任务管理器的方法吗?

总结

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

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

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

参考资料

  • Image File Execution Options[1]

  • 《Windows Sysinternals 实战指南》

References

[1]  Image File Execution Options:

https://blogs.msdn.microsoft.com/junfeng/2004/04/28/image-file-execution-options/

欢迎留言交流

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312809.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ABP vNext中使用开源日志面板 LogDashboard

ABP vNext 使用 logdashboard本文示例源码:https://github.com/liangshiw/LogDashboard/tree/master/samples/abpvnextABPABP是aspnetcore3.0的开源web应用程序框架,非常适合现代web应用程序。有关ABP的更多内容可以查看官方文档Logdashboard可以直接在基…

经典排序算法(10)——基数排序算法详解

基数排序(Radix sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。 一、算法基本思想 (1)基本思想 基数排序是基于桶排序来实现。通过键值的部分信息&#…

经典排序算法(11)——计数排序算法详解

计数排序(Counting sort)是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(nk)(其中k是整数的范围),快于任何比较…

GitHub Actions,卧槽!牛批!

“ 阅读本文大概需要 19 分钟。 ”前段时间我更新了我的分布式爬虫管理框架—— Gerapy(话都说到这儿了打个广告,跟繁琐的命令行说拜拜!Gerapy分布式爬虫管理框架来袭!,哇,哇,就是,哇…

平衡二叉树AVL详解

一、平衡二叉树的定义 平衡二叉树(Balanced Binary Tree)又被称为AVL树,它且具有以下性质: (1)它是一棵空树或它的左右两个子树的高度差的绝对值不超过1; (2)并且左右两个…

【壹个小技巧】一看就会的CI/CD :Github Actions

什么是 CI/CD?我这里先不说概念,先说一个平时开发的场景问题:我们平时开发一个项目,经常会遇到这些“小”问题:就是如何保证自己的项目是正确的,至少拿给别人的时候,可以编译运行的?或者说多人…

Hyper-V虚拟机自动添加检查点和导出备份

背景说明笔者使用Hyper-V在内部搭建了大量的环境和系统,比如:k8s内部集群Azure Devops Server(TFS>VSTS>Azure Devops Server)SharePoint…大部分基本上都是用于内部研究、测试等场景,但是为了避免很多麻烦,必要的备份还是必…

哈夫曼树详解

一、哈夫曼树的定义 (1)简单路径长度 所谓树的简单路径长度,是指从树的跟节点到每个节点的路径长度之和。 完全二叉树是简单路径长度更小的二叉树。 (2)加权路径长度 所谓树的加权路径长度,是指树中所以带…

深入理解.NET Core的基元(三) - 深入理解runtimeconfig.json

原文:Deep-dive into .NET Core primitives, part 3: runtimeconfig.json in depth作者:Nate McMaster[1]译文:深入理解.NET Core 的基元(三) - 深入 runtimeconfig.json作者:Lamond Lu前情回顾深入理解.NE…

B-树、B+树、B*树详解

一、B树 B树是一种多路搜索树(并不是二叉的),性质如下: 1、定义任意非叶子结点最多只有M个儿子;且M>2; 2、根结点的儿子数为[2, M]; 3、除根结点以外的非叶子结点的儿子数为[M/2, M]&#…

微软正在开发基于Rust的安全编程语言

此前,微软表示正探索将 Rust 作为 C 和 C 的安全替代方案,并且也对外展示了使用 Rust 重写 Windows 组件的体验。根据微软的说法,Rust 是一种从根本上考虑安全性的编程语言,他们将尝试使用 Rust 重写各种产品,因为在过…

堆树(最大堆、最小堆)详解

一、堆树的定义 堆树的定义如下: (1)堆树是一颗完全二叉树; (2)堆树中某个节点的值总是不大于或不小于其孩子节点的值; (3)堆树中每个节点的子树都是堆树。 当父节点的键…

HttpClientFactory日志不好用,自己扩展一个?

前言.NetCore2.1新推出HttpClientFactory工厂类, 替代了早期的HttpClient,并新增了弹性Http调用机制 (集成Policy组件)。替换的初衷还是简单说下:① using(var client new HttpClient()) 调用Dispose()方法,并不会很快释放底层So…

树、二叉树简介

一、树的定义 树是由n(n>1)个有限节点组成一个具有层次关系的集合,它有如下特点: 1、每个节点有零个或多个子节点; 2、没有父节点的节点称为根节点; 3、每一个非根节点有且只有一个父节点; 4…

Quartz.net定时任务的使用及获取正在运行的JOB

定时任务管理类实现了如下功能:1、对定时任务进行管理 2、创建定时任务,需要给定时任务一个job的名称 3、判断给定的job的任务是否已存在 4、停止定时任务的功能namespace MyUKD.Quartz{ public class QuartzSchedulerMgr { private static readonly ILo…

漫谈认证与授权

漫谈认证与授权Intro认证与授权一直以来都是很多人在讨论的话题,之所以想这次谈一谈认证和授权,主要是因为最近看到许多文章都把认证和授权混为一谈,把认证方式当作是授权方式。所以想写篇文章谈谈我眼中的认证与授权。Authentication什么是认…

【译】gRPC vs HTTP APIs

本文翻译自 ASP.NET Blog | gRPC vs HTTP APIs,作者 James,译者 Edison Zhou。现在,ASP.NET Core使开发人员可以构建gRPC服务。gRPC是一个远程过程调用框架,专注于高性能和开发人员的生产力。ASP.NET Core 3.0中集成了gRPC&#x…

.NET Core 3.0 的新改进:针对分布式应用程序的故障诊断和监控

由于分布式应用是由多个组件组成的,且这些组件往往是由不同的团队拥有和操作,所以在与应用程序发生交互时,就会需要跨多个组件执行代码的分布式跟踪。如果用户遇到了问题,想要确定是哪个组件出现了差错,基本就是一件不…

【翻译】.NET Core3.1发布

.NET Core3.1发布我们很高兴宣布.NET Core 3.1的发布。实际上,这只是对我们两个多月前发布的.NET Core 3.0的一小部分修复和完善。最重要的是.NET Core 3.1是长期支持(LTS)版本,并且将支持三年。和过去一样,我们希望花…

JVM(1)——JVM内存分区

一、JVM简介 JVM,即Java虚拟机(Java Virtual Machine),一种能够运行Java bytecode的虚拟机,是Java实现跨平台的基础。 引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚…