从Powershell输出中获取特定的进程ID

时间:2018-11-11 09:33:43

标签: powershell

嗨,我是Powershell脚本的新手,我想根据文件的哈希值检索特定的进程ID。但是我只能获得带有哈希值的表或具有id,进程名称和路径的表

$ps = Get-Process | Select-Object -Property Id,ProcessName,Path

$hashlist = Get-FileHash(Get-Process|Select-Object -ExpandProperty Path) -Algorithm MD5

我是否可以将两个表合并在一起,以便可以使用将它们链接在一起的路径来获得Id,ProcessName和Hash的视图?

1 个答案:

答案 0 :(得分:1)

编辑:由于评论中的新信息而完全不同的方法

我认为使用文件MD5哈希来识别恶意软件并不容易。 现代防病毒软件使用启发式技术来解决mean恶意软件的问题,该恶意软件包括随机数据,并且混淆了其来源。

## Q:\Test\2018\11\11\SO_53247430.ps1

# random hex string replace with your malware signature
$MalwareMD5Hash = 'D52C11B7E076FCE593288439ABA0F6D4' 

Get-Process | Where-Object Path | Select-Object ID,Path | Group-Object Path | ForEach-Object {
   if ($MalwareMD5Hash -eq (Get-FileHash $_.Name -Alg MD5).Hash){ 
       ##iterate group to kill all processes matching
       ForEach ($PID in $_.Group.ID){
         Stop-Process -ID $PID -Force -WhatIF
       }
   }
   $_.Name | Remove-Item -Force -WhatIf # to delete the physical file.
}

正如我在评论中所建议的:

$HashList = [ordered]@{}
Get-Process |Where-Object Path | Select-Object Path |Sort-Object Path -Unique | ForEach-Object {
  $HashList[$_.Path]=(Get-FileHash $_.Path -Alg MD5).Hash
  ## or the reverse, the hash as key and the path as value
  # $HashList[(Get-FileHash $_.Path -Alg MD5).Hash]=$_.Path
}
$Hashlist | Format-List

缩样输出

Name  : C:\Program Files\Mozilla Firefox\firefox.exe
Value : BFE829AB5A4B729EE4565700FC8853DA

Name  : C:\WINDOWS\Explorer.EXE
Value : E4A81EDDFF8B844D85C8B45354E4144E

Name  : C:\WINDOWS\system32\conhost.exe
Value : EA777DEEA782E8B4D7C7C33BBF8A4496

Name  : C:\WINDOWS\system32\DllHost.exe
Value : 2528137C6745C4EADD87817A1909677E

> $hashlist['C:\WINDOWS\Explorer.EXE']
E4A81EDDFF8B844D85C8B45354E4144E

或带有反向列表

> $hashlist['E4A81EDDFF8B844D85C8B45354E4144E']
C:\WINDOWS\Explorer.EXE