求助:PowerShell编码gzip流指令解码报错及无文件恶意样本提取
编码PowerShell载荷离线安全解码操作指南
强制操作红线:所有解码步骤全程在隔离离线沙箱环境完成,严禁直接运行原始PowerShell载荷,避免触发无文件恶意软件的实际攻击行为
两类素材对应的标准化解码流程
1. 带-EncodedCommand参数的原始执行命令解码
- 从原始命令行中完整提取
-EncodedCommand参数后紧随的Base64字符串,剔除包裹字符串的引号、命令拼接的多余分隔符,保证编码内容完整无截断 - 解码时必须匹配PowerShell的专属编码规则:该参数的内容是将原始脚本按UTF-16 小端Unicode格式编码后再做Base64转换,不能用常规UTF-8格式解码,否则会得到乱码
- 解码操作仅做内容转换,不做执行:将Base64转成字节数组后,调用对应Unicode编码规则的解码方法还原文本即可
2. 带GzipStream解压逻辑的格式化脚本解码
这类脚本的固定执行逻辑是:定义存储gzip格式压缩字节的数组$s,通过GzipStream完成解压读取,最终将内容传给Invoke-Expression执行。解码时完全不需要运行脚本,离线提取内容即可:
- 逐行提取变量
s对应的所有字节值,按脚本里的声明顺序拼接成连续的字节数组,注意不要漏取分段声明的字节、不要打乱字节顺序 - 基于提取到的字节数组初始化内存流,绑定Gzip解压读取模式,用UTF-8编码通过流读取器把解压后的内容完整输出,这部分就是脚本最终要执行的实际指令
- 操作时在完成解压文本输出后立即停止流程,绝对不要走到
Invoke-Expression的执行分支
常见解码报错排查方向
- 提取Base64字符串时内容截断不全,会触发“无效Base64长度”类解码错误
- 解码EncodedCommand时错用UTF-8编码格式,和PowerShell要求的UTF-16小端规则不匹配,会输出无意义乱码
- 提取gzip字节数组时顺序错位、漏取分段字节,会触发Gzip解压的“无效校验和”类错误
内容的提问来源于stack exchange,提问作者Zsolt
相关产品推荐
相关产品推荐

