温馨提示×

怎样解读linux strings输出

小樊
36
2026-09-23 18:39:04
栏目: 智能运维

strings 是 Linux 下一个常用命令,用来从二进制文件、镜像、core dump、固件等“非纯文本”文件中提取可打印的字符串。解读它的输出,核心在于:知道你在看什么、哪些信息有用、如何结合上下文分析。

下面按“是什么 → 怎么看 → 实战技巧”来讲。


一、strings 输出到底是什么?

strings /bin/ls

输出类似:

Usage: %s [OPTION]... [FILE]...
ls (GNU coreutils) 8.32
%s: invalid option -- '%c'
/etc/passwd

这些内容来自:

  • 程序中的 字符串常量
  • 错误信息
  • 路径、URL、命令
  • 调试信息(如果有)
  • 符号名、函数名(部分)

⚠️ 注意:

  • 不是“源码”
  • 不包含逻辑、流程
  • 很多是噪音(随机字节刚好可打印)

二、基础解读思路

1️⃣ 先看“像人话的”

重点关注:

  • 错误信息
  • 文件路径
  • URL / IP
  • 命令名
  • 配置项

例子:

/home/user/config.json
https://api.example.com/check
password=
Authorization: Bearer

这些通常最有用。


2️⃣ 看程序“在干什么”

比如看到:

Usage: %s [options]
--help
--version

→ 说明这是一个命令行工具

看到:

mysql_query
SELECT * FROM users

→ 可能和数据库有关


3️⃣ 区分“有用 vs 噪音”

噪音包括:

  • 乱码似的短字符串
  • 编译器内部符号
  • 库函数名(如 __libc_start_main)

有用的是:

  • 明确语义
  • 和业务相关
  • 和安全/配置相关

三、常用参数(很重要)

1️⃣ 最小长度(过滤噪音)

strings -n 8 binary

只显示 ≥8 字符的字符串


2️⃣ 显示偏移(定位用)

strings -t x binary

输出:

  1a2f /lib/ld-linux.so.2

→ 字符串在文件中的十六进制偏移

常用于:

  • 配合 hexdump / gdb
  • 固件分析

3️⃣ 只看某段(结合 od / dd)

strings -e l binary   # 16-bit little endian

四、实战解读场景

✅ 场景 1:逆向 / 木马分析

关注:

connect
socket
execve
/bin/sh
wget http://

可能说明:

  • 有远程下载
  • 有命令执行

✅ 场景2:固件分析

admin
password
telnetd
192.168.1.1

→ 默认账号 / 服务


✅ 场景3:找隐藏配置

DEBUG=1
API_KEY=
SECRET=

→ 可能有硬编码密钥


五、配合其他命令更好用

grep 过滤

strings binary | grep -i pass

排序去重

strings binary | sort | uniq

和 file 配合

file binary
strings binary

六、常见误区

❌ 以为 strings = 反编译
✅ 它只是“文本提取”

❌ 看到字符串就当真
✅ 可能是死代码 / 测试字符串

❌ 忽略编码
✅ 中文/UTF-16 可能需要 -e


七、一句话总结

strings 输出 = 程序“说出来的话”
解读的关键不是“看全”,而是快速找到和人、配置、行为有关的线索。

如果你有具体文件或一段 strings 输出,我可以直接帮你逐行解读。

0 踩