温馨提示×

linux strings有什么常见坑

小樊
45
2026-10-11 08:44:56
栏目: 智能运维

strings 是 Linux 下常用的工具,用来从二进制文件里提取“可打印字符串”。虽然看起来很简单,但实际使用中有不少常见坑,很多人踩过:


1. 默认只识别 ASCII(< 0x7F)

strings 默认只提取 7-bit ASCII 字符。

坑:

  • 中文、UTF-8、GBK 等字符串经常看不到
  • 看起来“没有字符串”,其实只是非 ASCII

解决:

strings -e l   # 16-bit little endian
strings -e b   # 16-bit big endian
strings -e s   # 7-bit
strings -e S   # 8-bit(含扩展 ASCII)

或者用:

strings -n 4 file | iconv -f UTF-8 -t UTF-8 -c

2. 最小长度默认是 4

默认只显示 长度 ≥ 4 的字符串。

坑:

  • "ok"、"id"、"IP" 这种会被直接忽略

解决:

strings -n 1 file

3. 只扫某些段(section),不是全文件

strings 默认会跳过一些“看起来不像代码/数据”的区域(取决于版本和实现)。

坑:

  • 某些资源、压缩数据、自定义段里的字符串看不到

解决:

strings -a file   # 扫描整个文件

4. ELF / PE / 压缩壳的误判

strings 不懂文件格式语义。

坑:

  • 加壳、加密、压缩后的程序几乎看不到有意义字符串
  • 静态链接、strip 后符号减少

解决:

  • 结合 objdump、readelf
  • 脱壳 / 反汇编后再看

5. 会输出“假字符串”

strings 不判断语义,只找连续可打印字符。

坑:

  • 随机字节中也可能凑出可读字符串
  • 分析恶意样本时容易误判

建议:

  • 不要只靠 strings 下结论
  • 结合上下文、偏移、文件格式

6. 偏移信息容易被忽略

很多人只看字符串内容,不看位置。

坑:

  • 不知道字符串在文件 / 内存中的哪里
  • 逆向、取证时非常吃亏

解决:

strings -t x file   # 十六进制偏移
strings -t d file   # 十进制偏移

7. 不同发行版行为不一致

strings 来自 binutils,但:

  • 参数细节
  • 默认最小长度
  • 编码支持

可能略有差异。

坑:

  • 脚本在 A 机器正常,B 机器结果不同

建议:

  • 脚本里显式写参数
  • 不要依赖默认值

8. 不能替代真正反汇编 / 解析

strings 只是“粗筛”。

坑:

  • 以为没字符串 = 没逻辑
  • 以为有字符串 = 一定用到

总结一句话

strings 是“快速窥探工具”,不是“分析工具”。

如果你愿意,我可以:

  • 给你一套 逆向/取证常用 strings 命令
  • 或针对 ELF / PE / 固件 / 恶意样本 讲具体用法

0 踩