脚本样本的分析线索
脚本类样本(PowerShell、VBScript、JavaScript、Shell 等)通常可读性更好,分析重点在于还原混淆链:先看编码方式(整段 base64 编码、字符串拼接成数组、字符大小写与随机注释填充),再按解码链逐层还原,最后逐段标注意图(下载、执行、持久化、反检测)。PowerShell 的 -EncodedCommand 参数接受的是 UTF-16LE 编码后再做 base64 的字符串,按这个规则解码才不会得到乱码。
基本信息
| 适用平台 | 隔离的分析环境;脚本语言包括 PowerShell、VBScript、JavaScript、Shell 等 |
|---|---|
| 线索入口 | 命令行参数(-enc、-nop、-w hidden)、编码字符串、拼接数组、下载调用 |
| 解码规则 | PowerShell -EncodedCommand 为 UTF-16LE 文本的 base64 编码 |
| 记录要求 | 每层解码产物都计算哈希并作为样本登记 |
| 注意 | 解码与执行都应在只读沙箱进行,避免脚本连接外部地址 |
典型使用场景
- 还原被编码的下载执行命令,得到实际载荷地址
- 分析持久化动作:注册表启动项、计划任务注册、服务创建
- 识别反检测手法:关闭日志、检测沙箱环境、延时执行
- 提取脚本中的对外连接地址,用于封禁与情报比对
- 为报告提供逐段注释的脚本正文,说明每一步意图
提取与解码
提取与解码
# 1) 找到命令行中的编码参数与可疑调用
grep -Eo 'powershell[^\n]{0,200}' script.ps1 | head
# 2) PowerShell -EncodedCommand 解码:UTF-16LE 文本的 base64
base64 -d encoded.txt | iconv -f UTF-16LE -t UTF-8 | head
# 3) 还原字符串拼接:把数组元素与拼接片段拼回完整命令
# 例如 ('do'+'wnl'+'oad') 之类的组合需要人工或脚本还原
# 4) 逐层记录:解码产物单独保存并计算哈希
sha256sum decoded-layer1.ps1 >> layers-hashes.txt
# 5) 关注下载执行与持久化关键字
strings -n 6 decoded-layer1.ps1 | grep -Ei 'download|invoke|schtasks|reg add|startup'混淆手法与还原
| 手法 | 特征 | 还原方法 |
|---|---|---|
| 整段编码 | -enc 参数或长 base64 字符串 | 按 UTF-16LE 规则解码 |
| 字符串拼接 | 大量加号与短字符串数组 | 拼接还原后再阅读 |
| 字符替换或反转 | 调用替换函数处理字符串 | 按替换规则逆运算 |
| 压缩后编码 | base64 解码得到二进制流 | 进一步按压缩格式解压 |
| 注释与换行填充 | 大量无意义注释与空行 | 清理后再分析逻辑 |
解码在只读沙箱进行,解码产物同样算样本,需要计算哈希并登记,避免后续引用时无法说明来源层级。
注释掉的调试代码不代表实际执行路径:分析结论要基于实际可执行分支,必要时用沙箱验证哪条路径被走到。