strings 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,聚焦
strings——文本处理命令族(见文本处理与搜索命令族),但常用来"窥探"非文本文件。当你拿到一个不明二进制,想知道它里面藏了什么路径、URL、版本号时,它是第一手工具。
strings 扫描文件,把其中连续的可打印字符序列提取出来。可执行文件、core dump、压缩包里往往夹着明文字符串,strings 能把这些"露出来的线索"揪出来。
一、基本用法
bash
strings app.bin # 列出二进制里所有可读字符串
strings -n 8 app.bin # -n 只显示长度 ≥ 8 的字符串(过滤噪声)
strings app.bin | grep -i url # 配合 grep 找 URL/路径默认会吐出大量短碎片,用
-n设最小长度能滤掉大部分无意义噪声,只留像样的字符串。配合 grep 直接锁定关键词(版本号、域名、配置键)是高招。
二、看程序里硬编码的路径与版本
bash
strings /usr/bin/nginx | grep -i version
strings myapp | grep '/etc/' # 看它默认读哪些配置路径很多程序把版本、默认配置路径、报错信息、甚至是后门地址硬编码进二进制。strings 是静态"白盒"初探,不用运行就能看到不少信息——安全审计、排查"这程序到底连哪"时常用。
三、指定编码:-e
bash
strings -e l app.bin # -e l 按 16 位小端 Unicode 提取
strings -e s app.bin # -e s 按 7 位 ASCII默认按单字节 ASCII 提取。如果目标程序用了 UTF-16 等宽字符存字符串,需要
-e指定字节序/编码,否则会扫不到。常见值:s(7-bit)、S(8-bit)、l(小端 16-bit)、B(大端 16-bit)。
四、踩坑:字符串 ≠ 真实逻辑
bash
# strings 看到的只是"躺"在文件里的文本,不反映运行时的条件分支
strings malware | grep pass # 可能只是字符串常量,未必是真实密码处理strings 只是"提取可见文本",不能反推程序逻辑。看到敏感词要先冷静:它可能是日志模板、错误提示,未必是真实行为。要做真正的行为分析得配合 strace 或反汇编(objdump/readelf)。
五、实战:快速识别未知文件类型与来源
bash
file mystery.bin # 先看是不是已知格式(见 file 命令 /linux/cmd/file.md)
strings mystery.bin | head -50 # 再扫一眼里面有没有路径/版权/URL 线索一句话总结
strings = 从二进制里抠可读字符串:-n 设最短长度过滤噪声、-e 指定编码;常用于静态初探未知程序里的路径/版本/URL。但它只提取文本、不反映运行时逻辑——行为分析要上 strace。先看格式用 file。