繁体   English   中英

如何在Windows上唯一标识进程?

[英]How to uniquely identify a process on windows?

我们以记事本为例。 如何在我的应用程序中100%确定记事本是否正在运行? 100%我的意思是,如果有另一个名为“notepad.exe”的进程实际上不是真正的记事本,而是例如模仿,我不想检测它。 只有真正的笔记本。

我已经考虑过阅读过程记忆,但由于记忆位移等原因,它比看起来更困难。

标准方式是名称,对吗? 但对我来说这是非常重要 ,它不是任何其他程序,因为我想与它进行交互,如果我发现了一个错误的过程中会有什么重要的失败。

有谁知道这样做的好方法?

PS:没有特定的编程语言可以用。如果可能的话,我更喜欢独立的解决方案。 但如果需要,我特意使用.Net / C#。

99.9%的唯一方法1确保您正在查看正确的可执行文件是验证文件的数字签名 例如,您确保有问题的notepad.exe由“Microsoft Corporation”签名。

我会做这样的事情:

  1. 获取正在运行的进程列表。
  2. 过滤到感兴趣的名称( notepad.exe
  3. 获取每个进程的图像[可执行文件]路径。
  4. 验证Authenticode签名是否有效且可信。
  5. 将签名者的名称与期望值进行比较。
  6. 成功! 您可以非常肯定这是正确的文件。

这种方法避免了必须事先知道文件应该位于何处的问题(这几乎是不可能的 - 记事本安装在两个位置 ),它的哈希值应该是什么(显然必然会改变),或者奇怪的用户行为(替换)记事本与其他一些文本编辑器)。

1 - 当然,不可能100%肯定。 确实有人确定可以使用预期的签名者名称对可执行文件进行自签名,并将证书添加到其计算机的根存储中,从而使签名看起来有效。

好吧,我没有遇到过这种问题,但您可以先通过名称搜索(在您的情况下,这将是notepad.exe)检查进程是否正在运行,解析Process.GetProcesses()列表然后,获取Process.StartInfo.FileName并查看这是否是Notepad可执行文件的路径,这将做交易,对吧?

您对我们想要运行的可执行文件有什么了解? 如果你知道文件大小可以作为“黑客”。 使用@josh3736的方法,但是通过将文件大小与您知道的文件大小进行比较来替换第4点和第5点[不同版本将具有不同的大小,但如果没有太多则可以对它们进行硬编码]。 计算Md5-Hashtag看起来会更专业,但基本上会做同样的事情。

**如果你的进程有一个GUI:你可以使用EnumWindows为孩子们获取编辑框等。找到你的“notepad.exe”的目标,并检查它是否在那里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM