新站提交
  • 网站:709
  • 待审:0
  • 小程序:15
  • 文章:20543
2021服务器优惠

阿里云:2核2G5M服务器60元/年、2核4G 200元/年、4核8G服务器365元/年 更多...
腾讯云:云产品限时秒杀,爆款1核2G云服务器,首年74元 更多...

PowerShell 正在执行的命令正文存储在 Win32_Process 类的 CommandLine 属性中。 如果命令为编码命令,CommandLine 属性将包含字符串“EncodedCommand”。 使用此信息,可以通过以下进程取消对编码命令的模糊处理。
以管理员身份启动 PowerShell。 以管理员身份运行 PowerShell 至关重要,否则在查询正在运行的进程时不会返回任何结果。
执行以下命令以获取所有具有编码命令的 PowerShell 进程:

$powerShellProcesses = Get-CimInstance -ClassName Win32_Process -Filter 'CommandLine LIKE "%EncodedCommand%"'

下面的命令创建一个自定义 PowerShell 对象,其中包含进程 ID 和编码命令。

$commandDetails = $powerShellProcesses | Select-Object -Property ProcessId,
@{
    name       = 'EncodedCommand'
    expression = {
        if ( $_.CommandLine -match 'encodedCommand (.*) -inputFormat' )
        {
            return $matches[1]
        }
    }
}

现在可以解码编码命令。 下面的代码片段循环访问命令详细信息对象、解码编码命令,并将解码后的命令添加回该对象,以便进一步研究。

$commandDetails | ForEach-Object -Process {
    # Get the current process
    $currentProcess = $_

    # Convert the Base 64 string to a Byte Array
    $commandBytes = [System.Convert]::FromBase64String($currentProcess.EncodedCommand)

    # Convert the Byte Array to a string
    $decodedCommand = [System.Text.Encoding]::Unicode.GetString($commandBytes)

    # Add the decoded command back to the object
    $commandDetails |
        Where-Object -FilterScript { $_.ProcessId -eq $_.ProcessId } |
        Add-Member -MemberType NoteProperty -Name DecodedCommand -Value $decodedCommand
}
$commandDetails[0]

现在可以通过选择解码后的命令属性来查看已解码的命令。

ProcessId      : 8752
EncodedCommand : IAAKAAoACgAgAAoAIAAgACAAIAAkAGkAIAA9ACAAMQAgAAoACgAKACAACgAgACAAIAAgAHcAaABpAGwAZQAgACgAIAAkAGkAIAAtAGwAZQAgADEAMAAgACkAIAAKAAoACgAgAAoAIAAgACAAIAB7ACAACgAKAAoAIAAKACAAIAAgACAAIAAgACAAIABXAHIAaQB0AGUALQBPAHUAdABwAHUAdAAgAC0ASQBuAHAAdQB0AE8AYgBqAGUAYwB0ACAAJABpACAACgAKAAoAIAAKACAAIAAgACAAIAAgACAAIABTAHQAYQByAHQALQBTAGwAZQBlAHAAIAAtAFMAZQBjAG8AbgBkAHMAIAA2ADAAIAAKAAoACgAgAAoAIAAgACAAIAAgACAAIAAgACQAaQArACsAIAAKAAoACgAgAAoAIAAgACAAIAB9ACAACgAKAAoAIAAKAA==
DecodedCommand :
                     $i = 1

                     while ( $i -le 10 )

                     {

                         Write-Output -InputObject $i

                         Start-Sleep -Seconds 60

                         $i  

                     }

相关文章:
  • PowerShell 分页控制台输出 (Out-Host)
  • PowerShell 打印数据 (Out-Printer)
  • PowerShell 创建文件和文件夹
  • PowerShell 复制文件和文件夹
  • PowerShell 枚举文件、文件夹和注册表项 (Get-ChildItem)
  • PowerShell 放弃输出 (Out-Null)
  • PowerShell 将文本文件数据读取到数组中
  • PowerShell PowerShell使用 Out-* Cmdlet 重定向数据
  • PowerShell 列出某个文件夹内的所有文件和文件夹
  • PowerShell 将 Format-Wide 用于 Single-Item 输出