插件窝 干货文章 Linux strings命令能否自定义输出格式

Linux strings命令能否自定义输出格式

字符串 偏移 strings 输出 184    来源:    2025-05-07

strings 命令默认以简单的文本行形式输出二进制文件中的可打印字符串,但它本身不支持直接自定义输出格式(如指定列宽、添加分隔符等)。不过,你可以通过以下方法间接实现格式控制:


1. 结合 grep/awk/sed 进行过滤和格式化

示例:提取特定长度的字符串并添加格式

strings file.bin | awk '{printf "[String %d]: %s\n", NR, $0}'

输出效果:

[String 1]: Hello
[String 2]: SecretPassword
[String 3]: EOF

示例:仅输出长度大于10的字符串

strings file.bin | awk 'length($0) > 10'

2. 控制字符串的最小长度 (-n)

strings 允许通过 -n 指定最小字符串长度,但无法直接控制最大长度。

strings -n 8 file.bin  # 只输出长度≥8的字符串

3. 结合 hexdumpxxd 获取偏移地址

若需要字符串在文件中的偏移量(地址),使用 -t 选项:

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

输出示例:

   1234 Password123
   5678 Key=Value

4. 输出到CSV/JSON等结构化格式

通过管道将结果传递给其他工具(如 jq)生成结构化数据:

strings file.bin | jq -R -s 'split("\n") | map(select(. != ""))' > output.json

5. 使用 radare2binwalk 替代

如果需要更高级的二进制分析(如带偏移、编码、上下文),建议使用专业工具:

radare2 -q -c 'iz' file.bin  # 显示字符串及偏移
binwalk -e file.bin          # 提取嵌入的字符串和文件

总结

  • 直接自定义格式strings 本身不支持,需依赖管道和文本处理工具(awk/sed)。
  • 常用场景:通过 -n-t 控制基础输出,再通过脚本进一步格式化。
  • 复杂需求:换用更专业的逆向工程工具(如 radare2)。

如果有具体格式需求,可以提供更多细节,我可以帮你编写更精确的命令组合!