在 Debian(或一般的 Linux)环境下,strings 命令用于从二进制文件、库文件或核心转储中提取可打印字符串。分析 strings 输出通常是逆向、排查依赖、定位错误、合规检查或安全审计的一部分。
下面系统性地讲一下如何分析 Debian 上的 strings 输出。
strings /bin/ls
strings -n 6 libc.so.6
strings -e l binary_file
常用参数:
-n <长度>:只显示长度 ≥ n 的字符串-e:编码(s=7-bit, l=16-bit little endian, b=big endian)-a:扫描整个文件(默认可能跳过某些段)-t x / -t d:显示字符串偏移(十六进制 / 十进制)strings 输出通常包含:
第一步:过滤噪声
strings binary | less
strings binary | grep -i error
strings binary | grep -i http
Debian 包通常在二进制中嵌入:
GCC: (Debian 10.2.1-6)GNU C Library 2.31Build ID示例:
strings binary | grep -i debian
strings binary | grep -i "gcc\|glibc"
用途:
strings binary | grep -i "failed\|cannot\|invalid"
这些常用于:
安全分析重点:
strings binary | grep -i "password\|token\|secret\|key"
strings binary | grep -E "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"
strings binary | grep -i "http://\|https://"
注意:
如果有 -dbgsym 包:
strings binary | grep -i ".c$"
常见输出:
net/core/dev.c
fs/ext4/inode.c
用途:
strings -t x binary
输出示例:
0x1a2b3c /etc/passwd
然后在 objdump 或 gdb 中:
objdump -s -j .rodata binary
用途:
如果你在分析 .deb 包:
dpkg-deb -x package.deb ./out
strings ./out/usr/bin/xxx
或与官方包对比:
strings official_binary > a.txt
strings suspect_binary > b.txt
diff a.txt b.txt
| 场景 | 分析重点 |
|---|---|
| 漏洞评估 | GCC/glibc 版本、Build ID |
| 恶意软件 | URL、IP、命令字符串 |
| 逆向工程 | 错误提示、函数名残留 |
| 合规检查 | 版权、许可证字符串 |
| 调试 | 日志格式、配置文件路径 |
如果你愿意,可以:
strings 输出我可以直接帮你“读”这些字符串。