温馨提示×

如何看懂linux strings输出

小樊
49
2026-09-29 14:41:50
栏目: 智能运维

strings 是 Linux 下一个非常常用的工具,用来从二进制文件(可执行文件、库文件、core dump、固件等)里提取可打印的字符串。很多初学者看到 strings 的输出会觉得“乱七八糟”,其实只要理解它的原理和用途,就能很快看懂。

下面我分几个层面讲清楚。


一、strings 在干什么?

一句话:

把文件中连续的可打印字符(通常是 ASCII/Unicode)提取出来,按行显示。

例如:

strings /bin/ls

你会看到类似:

Usage: ls [OPTION]... [FILE]...
GNU coreutils
%s: invalid option -- '%c'
https://www.gnu.org/
...

这些字符串来自:

  • 程序里的提示信息
  • 编译进去的常量字符串
  • 路径、URL
  • 第三方库信息

二、为什么输出看起来“很乱”?

原因通常包括:

  1. 二进制数据被误判为字符串
    • strings 默认只要求连续 4 个可打印字符
  2. 混合了不同语言的字符串
  3. 代码段、数据段混在一起
  4. 有编码(UTF‑8、宽字符)

所以:

strings 的输出 ≠ 程序逻辑,只是“文本碎片”


三、如何理解 strings 的输出内容?

1️⃣ 看“像人话”的部分

通常你能直接看懂的是:

  • 错误信息
  • 帮助文档
  • 文件路径
  • URL
  • 版本号

例如:

/usr/lib/libc.so.6
OpenSSL 1.1.1
error: permission denied

这些信息常用于:

  • 判断程序用途
  • 安全审计
  • 逆向分析

2️⃣ 识别“非人类字符串”

比如:

@%@%@
H\xc3\xa9llo

可能是:

  • 编码字符串
  • 压缩/加密数据
  • 随机数据

这部分一般不需要强行理解


3️⃣ 结合上下文看字符串

单独看字符串意义不大,通常是:

  • 配合 objdump
  • 配合 gdb
  • 配合 readelf

例如:

strings -n 6 binary | grep -i password

四、常用参数(很关键)

1️⃣ 最小字符串长度

strings -n 6 file

减少“噪音”


2️⃣ 显示字符串地址

strings -t x file

输出示例:

401000 Usage: ls

有助于逆向分析


3️⃣ 只扫描某个段

strings -e l file   # 16-bit little endian

4️⃣ 结合 grep

strings binary | grep -i "http"

五、实际用途举例

✅ 判断二进制用途

strings unknown_bin | head

✅ 查找隐藏 URL / IP

strings malware | grep -E "http|192\.168"

✅ 找版本信息

strings binary | grep -i version

✅ 取证分析

  • 看命令行参数
  • 看日志格式
  • 看残留路径

六、重要提醒(新手常踩坑)

❌ strings 不能:

  • 还原源码
  • 解密数据
  • 显示变量名

✅ strings 只能:

  • 给“线索”
  • 辅助分析

七、推荐学习路径

如果你是想:

  • 安全分析 → 学 objdump + strings + gdb
  • 普通使用 → 会用 grep 就够了
  • 逆向 → 必须配合反汇编

如果你愿意,可以:

  • 贴一段 strings 输出
  • 或说明你是用它来干什么(安全 / 调试 / 好奇)

我可以逐行帮你解释。

0 踩