strings 是 Linux 下从二进制/数据文件中提取可打印字符串的常用工具,用得好可以很快定位信息,用不好很容易刷屏或漏内容。下面从高效用法角度系统讲一下。
strings file)strings file
这是最低效的玩法,因为:
strings -n 8 file
✅ 推荐:
6~104~6strings -e l file # 16-bit little endian
strings -e b file # 16-bit big endian
strings -e s file # 7-bit ASCII
常见场景:
-e lstrings -a file # 扫描整个文件(慢但全)
strings file # 只扫加载段(快)
✅ 分析程序行为时:
-a)更快-astrings -t x file # 十六进制偏移
strings -t d file # 十进制偏移
例子:
strings -t x -n 6 binary | grep PASS
可直接拿偏移去 objdump / gdb
strings -n 6 binary | grep -i "password\|token\|key"
less(防止刷屏)strings -n 8 binary | less
搜索:/keyword
strings -n 6 -e l core.dump
strings -n 4 firmware.bin | grep -E "ip=|port=|user="
offset=$(strings -t x bin | grep "secret" | awk '{print $1}')
xxd -s 0x$offset -l 64 bin
strings -t x bin | grep main
objdump -d bin | less
❌ 不要:
strings 2G_file | grep xxx
✅ 应该:
strings -n 10 -a 2G_file > strings.txt
grep xxx strings.txt
或:
strings -n 10 2G_file | rg xxx
(rg 比 grep 快非常多)
| 误区 | 正确做法 |
|---|---|
只默认用 strings |
加 -n / -e |
| 认为 strings 能看所有字符串 | 加密 / 压缩看不到 |
| 不看偏移 | 逆向时必看 |
| 在大文件直接 grep | 先导出 |
这时应该用:
binwalkradare2 / ghidraent(熵分析)如果你有具体场景(比如:逆向、CTF、固件、日志、内存分析),我可以给你一套针对性的 strings 用法模板。