strings命令用于从linux二进制文件中提取可打印字符串,帮助查找调试信息、路径、函数名等隐藏文本。1. 使用基本方式为“strings 文件名”,默认输出≥4字符的字符串;2. 通过“-n n”设置最小长度,如“strings -n 6 filename”找至少6字符的字符串;3. “-t x”显示字符串偏移地址;4. “-e s”指定编码格式如unicode小端;5. 实际场景包括分析程序行为、逆向工程辅助、安全检查等,例如用“strings -n 8 program | grep http”找内嵌api地址。掌握这些参数能有效提升排查问题效率。
有时候你想看看一个linux二进制文件里有没有什么隐藏的文本信息,比如调试信息、路径、函数名或者配置参数,但又不想用太复杂的工具。这时候,strings 命令就能派上用场了。
什么是 strings 命令?
strings 是 Linux 下一个非常实用的小工具,它可以从二进制文件中提取出可打印的字符串。虽然二进制文件本身不是给人看的,但里面常常嵌入了一些明文字符,比如错误信息、URL、变量名等等。
使用 strings 的基本方式很简单,只需要在终端输入:
strings 文件名
它会默认输出所有长度≥4个字符的连续可打印字符串。这个最小长度可以通过参数调整,后面会提到。
如何查看特定格式或长度的字符串?
有时候你只想找特定类型的字符串,比如长一点的路径、更短的关键字,或者想排除一些干扰信息。这时可以加几个常用选项:
-
-n N 或 –bytes=N:设置最小字符串长度,默认是4,比如要找至少6个字符的字符串:
strings -n 6 filename
-
-t d|x:显示字符串在文件中的偏移地址,十进制或十六进制形式都有:
strings -t x filename
-
-e S|s|b:指定编码格式,比如支持16位Unicode(S表示大端,s小端):
strings -e s filename
这些选项可以根据需要组合使用,帮助你更快定位目标信息。
实际使用场景有哪些?
你在日常工作中可能会遇到几种典型情况:
- 分析未知程序行为:比如某个程序调用了哪些库、访问了哪些路径,用 strings 看一下说不定能找到蛛丝马迹。
- 逆向工程辅助:配合其他工具(如 objdump、readelf)一起使用,能帮你快速找到关键字符串位置。
- 取证或安全检查:有些恶意程序会在二进制中硬编码敏感信息,strings 能作为初步筛查手段。
举个例子,如果你拿到一个没有文档说明的可执行文件,想看看它是否连接了某个网络服务,你可以这样试试:
strings -n 8 program | grep http
这会列出所有至少8个字符的字符串,并筛选出包含“http”的行,说不定就能看到内嵌的API地址。
总结
strings 不是个复杂命令,但它在排查问题和分析二进制方面很实用。掌握几个常用参数之后,你会发现它经常能解决一些看似棘手的问题。像 -n 控制长度、-t 显示偏移、过滤输出这些技巧,都是日常用得上的。
基本上就这些,简单但挺有用。