Windows父进程怎么判断是否是TOP进程
今天写一个东西时候,出现了三个进程,循环的构成父进程。就导致自己代码无限循环了。但是ProcessExplorer就可以判断TOP进程。
那么他的判断机制是什么呢,百度谷歌都没有找到这个资料,没办法。逆向下ProcessExplorer,TOP 进程有个Not-existentprocess标志。
X64dbg找到这个字符串标志下,断点。这里一堆的比较,没有搞懂他的作用,看起来像是从一个list里面,比较是否是相等的PID。
既然x64dbg看不出相应的信息。那就上IDA来分析
引用这个字符串的地方还挺多的
都去F5查看函数构成。可以看到他在遍历一个全局的变量,来判断是否要添加Not-existent process标志
去找SystemInformation变量的写入
可以看出他根本没有利用什么特别的API遍历进程,也没有做特别的判断。为啥就可以判断TOP进程,注意上面有个GetSystemTimeAsFileTime,为什么要获取时间呢。难道是利用进程时间+父进程PID来判断TOP进程??我直接吧系统时间改小,然后建立一个进程.可以直接就变成了TOP进程了
也许有其他办法,但是目前我就分析出了这一种方法。
ProcessExplorer,TOP 进程有个Not-existentprocess标志, 不是top进程吧。而是父进程已经关了 找不到了才有的提示。 ProcessHack代码是开源的,跟ProcessExplorer差不多。 而且如何判断父进程 使用进程快照,进程快照遍历出进程之后你可以看到它结构体里面有个字段,这个字段就是记录的父进程PID。 剩下的就是自己堆逻辑了。比如把遍历到的进程的父进程PID都存起来。再把遍历到的进程PID存起来。他俩就是一个映射关系。 可以用vectoy 或者list存起来。最后自己遍历list来看映射关系。 直接查看父进程id就行了 top 进程 理论上没有父进程,需要进一步研究 看了两趟还是看不明白!我比较笨吧!辛苦楼主了!:handshake 不明觉厉,只会任务管理器 aonima 发表于 2022-5-18 19:31
直接查看父进程id就行了
看ID不行,你注意看上面,我写了。三个进程循环构成了父进程。a-->bb--->c c-->a就变成了无限无限循环了。 IBinary 发表于 2022-5-18 19:06
ProcessHack代码是开源的,跟ProcessExplorer差不多。 而且如何判断父进程 使用进程快照,进程快照遍历出进 ...
你要形成进程树时候,就要判断TOP进程了。 a--->bb--->c c--->a 就构成了循环了。会无法判断哪个是TOP层 haolaogong 发表于 2022-5-18 21:59
看了两趟还是看不明白!我比较笨吧!辛苦楼主了!
简单说,就是形成进程树时候。怎么判断哪个可以做根节点。 DQQQQQ 发表于 2022-5-19 08:44
你要形成进程树时候,就要判断TOP进程了。 a--->bb--->c c--->a 就构成了循环了。会无法判断哪个是TOP ...
嗷嗷沈错题了。哈哈抱歉。