PowerShell恶意脚本分析请求:解读最终执行代码功能
恶意PowerShell脚本分析与最终执行行解读
这是一款利用图片隐写技术加载恶意代码的PowerShell脚本,核心逻辑是从PNG图片中提取隐藏数据,动态执行恶意程序。以下是逐部分解析,重点拆解你卡住的最终执行行:
1. 隐写数据提取阶段
Add-Type -AssemblyName System.Drawing:加载.NET的System.Drawing程序集,用于读取图片像素数据。- 从
%USERPROFILE%\AppData\Roaming\PerfLogs\路径加载Image.png和pe.png,这两张图片是恶意数据的隐写载体——数据被编码在图片第一行像素的红色通道(R值)中。 - 通过遍历两张图片的第一行像素,将每个像素的R值提取出来,分别存入
$File和$PE两个字节列表:$PE字节列表对应完整的.NET恶意程序集(DLL/EXE格式)$File字节列表对应另一段恶意payload或辅助执行数据
2. 痕迹清理操作
schtasks /delete /tn det /f:尝试删除名为det的系统计划任务,目的是清除之前留下的恶意执行痕迹,避免被追踪。
3. 最终执行行核心功能解析
$a = [Reflection.Assembly] $a::'Load'($PE.ToArray()).GetType('NewPE.PE').GetMethod('Execute').Invoke($null,[object[]] ($injpath,$File.ToArray()))
这行是脚本的恶意执行核心,拆解为4个关键步骤:
- 加载恶意程序集:
[Reflection.Assembly]::Load($PE.ToArray())将从pe.png提取的字节数组动态加载为.NET程序集,全程在内存中操作,绕过磁盘查杀。 - 定位恶意类:
.GetType('NewPE.PE')从加载的程序集中找到名为NewPE.PE的恶意类。 - 获取执行方法:
.GetMethod('Execute')提取该类中的Execute静态方法(调用时传入$null作为实例对象,说明是静态方法)。 - 执行恶意逻辑:
.Invoke($null,[object[]] ($injpath,$File.ToArray()))调用Execute方法,传入两个参数:$injpath:指向系统合法工具RegAsm.exe的路径,利用该微软签名工具实现白名单绕过,避免被安全软件拦截。$File.ToArray():从Image.png提取的恶意payload,由Execute方法借助RegAsm进程完成注入或执行。
简单来说,这行的作用是:内存加载图片中隐藏的恶意.NET程序集,调用其中的执行方法,借助系统合法工具RegAsm执行另一段隐藏的恶意payload,以此逃避检测并完成恶意行为。
补充说明
这类脚本属于典型的“图片隐写+内存加载+白名单绕过”恶意样本,通过将恶意数据藏在图片像素中规避磁盘检测,再利用系统合法工具执行,大幅降低被发现的概率。
内容的提问来源于stack exchange,提问作者Shawna Smith
相关产品推荐
相关产品推荐

