Linux 中的 strings
命令是一个用于提取二进制文件中可打印字符序列的实用工具,它在分析二进制文件时非常有用。以下是它的核心作用、使用场景和注意事项:
提取可打印字符串
strings
会扫描二进制文件(如可执行程序、库文件、固件等),提取其中所有连续的可打印字符序列(默认长度 ≥4 字节的 ASCII 字符串)。
绕过编码/结构直接查看内容
无需理解二进制文件的格式(如 ELF、PE),直接输出人类可读的部分,适合快速分析。
逆向工程与分析
strings malware.bin | grep -i "password"
调试与故障排查
取证分析
查看编译信息
strings /bin/ls | grep "GCC"
参数 | 作用 |
---|---|
-n <长度> |
设置最小字符串长度(默认 4) |
-a |
扫描整个文件(默认跳过非文本段) |
-t {d,o,x} |
显示字符串在文件中的偏移量(十进制/八进制/十六进制) |
-e {l,b} |
指定字符编码(l 为 16 位 Unicode,b 为 32 位) |
-f |
打印文件名(扫描多个文件时有用) |
示例:
strings -n 8 -t x /usr/bin/ssh # 提取长度≥8的字符串,显示十六进制偏移量
输出可能包含干扰
二进制中随机字节可能被误识别为字符串,需结合 grep
等工具过滤。
编码限制
默认仅识别 ASCII,Unicode 字符串需指定 -e l
或 -e b
。
结合其他工具
更深入分析需配合 objdump
、readelf
、hexdump
或逆向工具(如 Ghidra)。
权限问题
读取系统二进制文件可能需要 sudo
。
# 提取 /bin/ls 中所有字符串并统计高频词
strings /bin/ls | sort | uniq -c | sort -nr | head
通过 strings
,可以快速窥探二进制文件的文本内容,是系统分析、安全研究和调试的必备工具。