strings 提取 IOC 的用法
strings 把二进制中的可打印字符序列提取出来,能快速捡到 URL、IP、互斥体名、文件路径与注册表键等线索。它成本极低,适合作为样本分析的起点。真正的要点在提取之后:把结果按类型规范化(域名、IP、路径、注册表键分开),标注每条线索来自哪个样本(哈希)与哪条命令,最后再进入情报比对。缺了标注,多份样本的 IOC 混在一起就会出现张冠李戴,报告引用时无法追溯。
基本信息
| 适用平台 | Linux(binutils 的 strings)、Windows(sysinternals 或分析套件中同名工具) |
|---|---|
| 关键参数 | -n 设定最小长度、-a 扫描整个文件、-el 提取 16 位小端编码字符串 |
| 输出内容 | 类型化 IOC 清单 + 样本哈希 + 提取命令与参数 |
| 规范化要求 | 去重、去掉明显噪声、保留原始形态不做补全 |
| 配套手段 | 按编码类型分别提取(ASCII 与 UTF-16),避免漏掉 Windows 程序中的宽字符串 |
典型使用场景
- 快速获取样本的通信目标,用于情报比对与封禁参考
- 发现互斥体名,用于跨样本关联同一程序家族
- 提取文件路径与注册表键,判断持久化与落地位置
- 为沙箱分析设定监控点:提前知道要观察哪些进程与网络行为
- 在报告中提供可复核的提取过程与原始字符串片段
提取与规范化
提取与规范化
# 提取 URL 并去重
strings -n 6 sample.bin | grep -Eo 'https?://[^" ]+' | sort -u | head -20
# 提取 IPv4 地址
strings -n 6 sample.bin | grep -Eo '\b([0-9]{1,3}\.){3}[0-9]{1,3}\b' | sort -u | head -20
# Windows 程序常含 16 位小端宽字符串,需要单独提取
strings -el -n 6 sample.bin | grep -Ei 'http|\\.exe|Software\\' | head -20
# 提取互斥体与注册表路径线索
strings -n 8 sample.bin | grep -Ei 'mutex|Global\\\\|CurrentVersion\\\\Run' | head -20
# 结果按类型分文件保存,并在文件名中标注样本哈希前缀IOC 类型与处理要求
| 类型 | 提取方式 | 规范化要求 |
|---|---|---|
| URL / 域名 | 正则匹配 http(s) 前缀字符串 | 保留原始形态,不做补全或猜测路径 |
| IPv4 / IPv6 | 正则匹配地址格式 | 区分公网与内网地址,分别登记 |
| 文件路径 | 匹配盘符与目录结构 | 保留大小写与完整层级,注意转义 |
| 注册表键 | 匹配常见配置分支 | 保留完整键路径,注明 32/64 位视图 |
| 互斥体名 | 匹配唯一命名的字符串 | 作为家族关联线索,需与样本哈希绑定 |
含变量拼接的 URL 可能只留下片段(例如主机名与路径分开存放),保留原样不要自行补全;补全后的地址若不存在,会在报告中形成错误结论。
短域名、公共库路径与常见单词容易混入噪声:提取结果需要人工过一遍,结合上下文判断哪几条值得登记为线索。