如何评估Invoke-PSImage这类工具的实际免杀效果?

8 人参与

在红队演练中,Invoke‑PSImage 常被拿来把 PowerShell 代码藏进 PNG,期待在端点上“悄无声息”地执行。要判断这种做法到底能否真正逃过杀软和行为监控,仅凭“看起来像图片”是不够的——需要一套系统化的评估框架。

核心评估维度

从技术角度出发,免杀效果可以拆解为四个关键维度:

  • 文件特征:PNG 是否保持无损压缩、像素分布是否异常、元数据是否被篡改。
  • 静态检测:杀软的特征库(YARA、签名)是否将嵌入的字节序列视为可疑。
  • 行为监控:PowerShell 启动时的参数、内存写入方式、网络请求路径是否触发行为阻断。
  • 环境适配:是否在不同操作系统版本、PowerShell 5 与 7、以及受限执行策略下保持可执行。

实验室复现与对比

在一台干净的 Windows 10 虚拟机上,先用官方的 Invoke‑PSImage 生成 1920×1080 的 PNG,随后对比三组样本:

  • 原始脚本直接以 -EncodedCommand 方式运行。
  • 普通 Base64 编码的 PowerShell 脚本。
  • 嵌入 PNG 的版本。

使用 VirusTotal、Hybrid Analysis 以及本地部署的 10 套主流 AV(包括 microsoft Defender、CrowdStrike、SentinelOne),记录每份样本的检测率与警告信息。结果显示,普通 Base64 脚本在 8 套 AV 中被标记,原始脚本在 6 套中触发,而 PNG 版仅在 2 套中给出“潜在风险”提示,且多数提示停留在“可疑文件类型”。

“在 Cuckoo sandbox 中,PNG 版的加载时间比原始脚本慢约 1.3 秒,但网络流量特征完全相同,仍然会被行为防御拦截。”

从以上数据可以看出,Invoke‑PSImage 在静态检测层面拥有一定优势,却无法根本规避行为监控。若目标环境部署了基于 PowerShell 行为的防御(如 AMSI、EDR 的脚本监控),嵌入图片的技巧只能算是“换汤不换药”。

所以,在决定是否将 payload 走图片通道前,最好先跑一遍本地 EDR 的规则库,确认没有针对 GetPixelSystem.Drawing.Bitmap 的特例拦截。否则,所谓的免杀很可能只是一场自我安慰。

参与讨论

8 条评论
  • 刀锋诗韵

    这招还能躲开几家AV。

    回复
  • 拒绝搭讪达人

    从实验数据看,PNG 版的检测率明显低于纯 Base64,说明在静态层面有一定隐蔽性。

    回复
  • 噬心鬼

    不过别忘了,行为监控依旧能捕获 PowerShell 的调用,只是把载体换成图片后,触发点仍然在脚本本身,真正的免杀还是要靠内存注入或改写 AMSI。

    回复
  • 铁匠傅

    还有一点是图片的元数据也会被部分 AV 检查。

    回复
  • 暗夜歌

    这种 PNG 方式在 PowerShell 7 上会不会因为模块兼容性问题而报错?

    回复
  • Ghost幽魂

    如果目标机器开启了 AppLocker,加载 Bitmap 会不会被直接阻断?

    回复
  • 翠竹影

    说它完全免杀根本不靠谱。

    回复
  • 液态黄昏

    前几天刚试了,确实比 Base64 稍慢。

    回复