在 Ubuntu(或其他 Linux 系统)中,strings 命令用于从二进制文件、核心转储或任意文件中提取可打印的字符串(通常是 ASCII/Unicode 文本)。分析 strings 的结果,关键在于结合目标文件用途、上下文和安全/调试目的来解读。
下面从基础使用 → 结果分析思路 → 实战案例 → 进阶技巧系统说明。
strings [选项] 文件
常用选项:
-n 长度:只显示长度 ≥ 指定值的字符串(默认 4)-e 编码:指定编码(s=7-bit, S=8-bit, b=16-bit, l=32-bit)-a:扫描整个文件(默认可能只扫某些段)-t x/o/d:显示字符串偏移(十六进制/八进制/十进制)-f:显示文件名示例:
strings -n 6 -t x /bin/ls
不同目的,关注点完全不同:
| 目的 | 关注内容 |
|---|---|
| 逆向/漏洞分析 | 函数名、错误信息、路径、URL |
| 取证 | 密码、IP、命令、用户名 |
| 调试 | 日志格式、配置项 |
| 合规检查 | 敏感词、密钥、token |
通常 strings 输出可分为几类:
GCC: (Ubuntu 11.2.0-19ubuntu1) 11.2.0
→ 可知编译器版本、系统环境
/etc/passwd
/var/log/syslog
→ 可能暗示程序行为或依赖
failed to open file
permission denied
→ 帮助理解程序逻辑
http://127.0.0.1:8080
api.example.com
→ 服务地址、潜在后门
password=
AES_KEY=
→ 安全审计重点
strings -t x binary
输出示例:
1a2b3c /etc/shadow
1a2b50 password=123456
然后可用:
objdump -s -j .rodata binary
或:
hexdump -C binary | grep -A2 -B2 1a2b
→ 确认字符串所在段(.rodata / .data)
strings unknown_bin | less
重点看:
main、usagesystem(、execstrings app | grep -iE "pass|pwd|token|key"
strings malware | grep -E "http|/bin|/tmp|wget|curl"
常见危险信号:
/tmp/.xwget http://...bash -i| 工具 | 用途 |
|---|---|
file |
判断文件类型 |
objdump |
看汇编和段 |
grep |
过滤关键词 |
binwalk |
固件/打包分析 |
radare2 / ghidra |
深度逆向 |
示例:
strings binary | grep -i error
objdump -d binary | less
sprintf 的内容不会出现1. file 确认类型
2. strings -a -n 6 -t x
3. grep 关键词(pass/ip/url)
4. 看偏移 → objdump/hexdump
5. 结合行为判断意图
如果你愿意,可以把某一段 strings 输出贴出来,我可以帮你逐行分析它是正常程序还是可疑样本。