在 Ubuntu(或其他 Linux 系统)中,strings 命令用于从一个二进制文件(可执行文件、库、core dump、固件等)中提取可打印的字符串。分析 strings 输出通常是逆向分析、排查问题或安全审计的第一步。
下面从基本用法 → 输出内容 → 分析方法 → 实战示例逐步说明。
strings 文件名
常见选项:
strings -n 6 文件 # 只显示长度 ≥6 的字符串
strings -a 文件 # 扫描整个文件(包括非文本段)
strings -e l 文件 # 指定字符编码(l=16位小端)
strings -t x 文件 # 显示字符串偏移(十六进制)
strings -f 文件 # 显示文件名
示例:
strings -n 6 -t x ./app
strings 输出一般包括:
编译信息
函数名 / 符号
错误提示 / 日志
"File not found""Connection failed"URL / IP / 端口
http://api.example.com127.0.0.1:8080密钥 / 密码(如果硬编码)
password=123456协议 / 格式标识
GET / HTTP/1.1SQLite format 3file 程序
not stripped → 信息丰富stripped → 只有少量字符串strings app | grep -E "http|://|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"
strings app | grep -iE "password|secret|token|key"
strings app | grep "/"
strings app | grep -i "gcc\|ubuntu\|version"
strings -t x app
输出示例:
1a2f main
1a34 /etc/passwd
然后用:
objdump -s -j .rodata app
或 IDA / Ghidra 定位该地址。
⚠️ 安全角度:
示例:
strings app | grep -i "sk-"
例如看到:
sqlite3_exec
SELECT * FROM users
→ 程序使用 SQLite,且操作 users 表
看到:
system
/bin/sh
→ 可能执行 shell 命令(漏洞风险)
strings unknown_bin | less
你可能会看到:
Usage: scan -i eth0
Starting sniffer...
pcap_open_live
→ 这是一个网络抓包工具
strings crackme | grep -i flag
输出:
Enter password:
Correct! Flag is: CTF{...}
→ 直接拿到 flag 逻辑
❌ 不能:
✅ 通常配合:
objdumpgdbltrace / stracestrings 是“看二进制在‘说’什么”,不是“看它在‘做’什么”
如果你愿意,可以:
strings 输出片段我可以帮你具体解读。