
strings 命令基本介绍strings用于从二进制文件中提取可打印字符串。它扫描文件内容找出由连续 4 个默认或更多可打印字符组成的序列并将其输出。资料合集https://pan.quark.cn/s/6fe3007c3e95、https://pan.quark.cn/s/561de99256a5、https://pan.quark.cn/s/985f55b13d94、https://pan.quark.cn/s/d0fb20abd19a语法strings[选项][文件...]不指定文件时从标准输入读取。指定一个或多个文件时逐个提取字符串。常用选项-a、--all扫描整个文件默认行为。早期版本中-a用于覆盖默认仅扫描可加载段的行为。-n 长度设置最小字符串长度默认 4。-t 格式输出字符串的偏移量。-t d十进制、-t o八进制、-t x十六进制。-d、--data仅扫描已初始化的数据段data段跳过代码段。-e 编码指定字符编码。s单字节ASCII/Latin-1默认。b大端 16 位。l小端 16 位UTF-16LE。B大端 32 位。L小端 32 位UTF-32LE。-f、--print-file-name在每个字符串前显示文件名。-T 格式以指定二进制格式显示偏移量B大端、L小端、H大端十六进制等。-w、--include-all-whitespace将空白字符空格、Tab、换行等视为可打印字符。--target格式指定目标二进制格式如elf64-x86-64。- 文件从文件读取选项。--help显示帮助信息。--version显示版本信息。输出格式默认输出/lib64/ld-linux-x86-64.so.2 libc.so.6 printf GLIBC_2.2.5 __libc_start_main Hello, World!每行一个字符串按在文件中的出现顺序输出。带偏移量输出-t820 /lib64/ld-linux-x86-64.so.2 845 libc.so.6偏移量后跟空格和字符串。带文件名输出-fprogram: /lib64/ld-linux-x86-64.so.2 program: libc.so.6使用示例1. 基本用法strings program.bin提取所有长度 4 的可打印字符串。2. 设置最小字符串长度strings-n6program.bin仅提取长度 6 的字符串。较长的阈值可过滤噪声。3. 只提取 1 个字符以上的字符串strings-n1program.bin提取所有长度 1 的可打印字符序列非常冗长。4. 显示偏移量strings-tx program.bin以十六进制显示每个字符串在文件中的偏移量334 /lib64/ld-linux-x86-64.so.2 34d libc.so.65. 显示文件名strings-fprogram1.bin program2.bin多文件时区分来源program1.bin: Hello program2.bin: World6. 从标准输入提取catprogram.bin|strings或stringsprogram.bin7. 查找 URLstrings-n5program.bin|grep-Ehttps?://查找二进制文件中嵌入的 URL。8. 查找版本信息strings-n5program.bin|grep-iEversion|v[0-9]\.[0-9]9. 提取 UTF-16 字符串strings-el document.docx使用小端 16 位编码扫描适合提取 Windows / Office 文件中的 UTF-16LE 字符串。10. 提取 UTF-32 字符串strings-eL data.bin使用小端 32 位编码扫描。11. 仅扫描数据段strings-dprogram.elf仅从已初始化的数据段中提取跳过代码段中的指令字节。12. 包含空白字符strings-wprogram.bin将空格、Tab、换行等也视为可打印字符避免在空白处截断字符串。在脚本中使用分析未知二进制文件#!/bin/bashset-euopipefailFILE$1echo 文件类型 file$FILEechoecho 字符串摘要前 20 条长度 6strings-n6$FILE|head-20echoecho 嵌入的 URL strings-n5$FILE|grep-iEhttps?://|ftp://||echo(无)echoecho 嵌入的文件路径 strings-n5$FILE|grep-E^/|[A-Za-z]:\\||echo(无)比较两个版本的二进制文件#!/bin/bashset-euopipefaildiff(strings-n6v1.bin|sort)(strings-n6v2.bin|sort)提取固件中的配置#!/bin/bashset-euopipefail strings-el-n4firmware.bin|sort-ufirmware_strings.txtecho提取完成共$(wc-lfirmware_strings.txt)个字符串字符编码说明编码-e参数典型文件ASCII / Latin-1s默认Linux ELF、通用二进制UTF-16LE小端lWindows PE、DOCX、XLSXUTF-16BE大端b部分 Java 类文件、旧 macOSUTF-32LE小端L少见UTF-32BE大端B少见在分析 Windows 文件EXE、DLL、Office 文档时字符串通常以 UTF-16LE 存储需要使用-e l。在脚本中使用检查编译后的程序是否包含敏感信息#!/bin/bashset-euopipefailFILErelease/appecho 检查硬编码密码 strings-n4$FILE|grep-iEpassword|passwd|secret|api[_-]?key|token||echo(无)echoecho 检查数据库连接串 strings-n8$FILE|grep-iEmysql://|postgres://|mongodb://||echo(无)echoecho 检查 IP 地址 strings-n7$FILE|grep-oE([0-9]{1,3}\.){3}[0-9]{1,3}|sort-u||echo(无)strings 与相关命令的对比命令功能典型用途strings提取可打印字符串逆向分析、调试hexdump十六进制转储逐字节查看xxd十六进制转储反向转换二进制编辑od八进制转储POSIX 兼容转储objdump反汇编目标文件汇编级分析readelf显示 ELF 文件信息ELF 结构分析nm列出符号表函数/变量名提取strings与hexdump的区别strings只输出可打印字符序列自动过滤不可打印内容。hexdump输出所有字节的十六进制和 ASCII不自动过滤。strings适合快速概览二进制中的文本信息。hexdump适合精确查看字节布局。strings与nm的区别nm从符号表中提取函数名和变量名需要符号表未剥离。strings从文件内容中提取所有可打印字符串不依赖符号表。nm提供符号的地址、类型和段信息。strings更通用但信息不够精确。退出状态0成功完成。1发生错误如文件不存在。2命令行参数错误。注意事项默认最小字符串长度为 4 个字符。使用-n可调整阈值。strings只能提取连续的可打印字符序列不能还原被非打印字符分隔的完整文本。默认扫描 ASCII单字节编码。分析 Windows 文件时需使用-e lUTF-16LE。提取的字符串可能包含误报如恰好由可打印字节组成的二进制数据。strings不依赖文件格式可以扫描任何文件类型ELF、PE、固件、镜像等。对于已剥离符号表stripped的二进制文件strings仍可工作但nm无法使用。在 macOS 上strings随 Xcode / Command Line Tools 安装。可通过man strings查看完整文档。相关命令hexdump十六进制转储查看。xxd十六进制查看与反向转换。odPOSIX 标准八进制转储。nm列出目标文件中的符号表。objdump反汇编目标文件。readelf显示 ELF 文件结构和信息。file通过 Magic Number 识别文件类型。grep配合管道过滤strings的输出。总结strings是从二进制文件中提取可打印字符串的基础工具适用于逆向工程、调试、安全分析和未知文件格式探索。它不依赖文件格式和符号表能从任何文件中快速提取嵌入的文本信息。通过-n调整最小长度、-e切换字符编码、-t显示偏移量配合grep过滤可以高效定位关键信息。在分析 Windows 文件时记得使用-e l提取 UTF-16LE 字符串。