Linux命令-strings(提取二进制文件中的可打印字符串))
Linux命令-strings提取二进制文件中的可打印字符串快速参考基本用法常用选项实用场景高级技巧安全分析应用与其他工具结合性能注意事项strings用于从二进制文件可执行程序、目标文件、核心转储等中提取可打印的字符串。它扫描文件中的字节序列将连续的可打印字符序列输出。这在逆向工程、程序取证和快速了解未知二进制功能时非常有价值。快速参考strings[选项]文件...strings默认提取长度至少为 4 的 ASCII 可打印字符串。它是理解黑箱二进制文件内容的最简单入口。基本用法# 从可执行文件提取字符串strings /usr/bin/ls# 从二进制文件中提取最少 6 个字符strings-n6/usr/bin/whoami# 从多个文件中提取strings /usr/bin/*|head-50# 提取并显示偏移量十进制strings-td /usr/bin/ls# 提取并显示十六进制偏移strings-tx /usr/bin/ls# 提取并显示八进制偏移strings-to /usr/bin/ls# 指定字符串最小长度strings-n10/opt/myapp/lib/libengine.so常用选项选项说明-n N最小字符串长度默认 4-t o显示八进制偏移-t d显示十进制偏移-t x显示十六进制偏移-e ENC指定字符编码s/S/b/l/B/L-f显示文件名-a扫描整个文件默认-T FORMAT指定目标文件格式bfd 目标--encodingENC选择字符编码实用场景# 场景 1: 查找程序中的版本信息和版权声明strings /usr/bin/python3|grep-E(version|Version|Copyright|GPL)# 场景 2: 查找可执行文件依赖的库strings /usr/bin/nginx|grep\.so\.# 场景 3: 查找编译时的路径信息strings /usr/sbin/sshd|grep/# 场景 4: 查找硬编码的 URL 或 IPstrings /opt/app/binary|grep-Ehttps?://|([0-9]{1,3}\.){3}[0-9]{1,3}# 场景 5: 从核心转储core dump提取信息strings core.12345|tail-50# 场景 6: 搜索嵌入式固件中的凭证strings firmware.bin|grep-ipassword\|username\|secret# 场景 7: 查找 GLIBC 版本信息strings /usr/bin/ls|grepGLIBC# 场景 8: 提取二进制文件中的错误消息strings /usr/bin/ssh|grep-ierror\|fatal\|warning高级技巧# 提取长度为 20 的字符串通常是有意义的信息strings-n20/usr/bin/systemd|head-20# 查找程序中的 printf 格式字符串strings /usr/bin/myprogram|grep-E%[sdlu]# 从内存镜像提取字符串并分类strings memory_dump.bin|teeall_strings.txt|\grep-E[A-Za-z0-9._%-][A-Za-z0-9.-]\.[A-Za-z]{2,}emails.txt# 提取 Unicode 字符串UTF-16LE 小端strings-el binary.dll# 提取大端 Unicode 字符串strings-eb firmware.bin# 扫描整个目录下的所有文件forfin/usr/bin/*;doiffile$f|grep-qELF;thenecho$fstrings-n8$f|head-5fidone# 从特定文件偏移处开始提取ddifbinary.binbs1skip1024|strings-n4# 查找包含特定模式的长字符串strings-n20target_binary|whileread-rline;doifecho$line|grep-qpattern;thenechoFOUND:$linefidone# 查找二进制中被混淆的字符串RCE/CTF 常用strings binary|grep-E^[A-Za-z0-9/]{20,}$# Base64strings binary|grep-E^[0-9a-fA-F]{20,}$# Hex 字符串安全分析应用# 检测恶意软件中的可疑字符串MALWARE_SAMPLEsuspicious.binecho IP 地址 strings$MALWARE_SAMPLE|grep-Eo([0-9]{1,3}\.){3}[0-9]{1,3}echo URL strings$MALWARE_SAMPLE|grep-Eohttps?://[^[:space:]]echo 命令执行 strings$MALWARE_SAMPLE|grep-E(/bin/|cmd|exec|system|popen)echo 编码字符串Base64 strings$MALWARE_SAMPLE|grep-E^[A-Za-z0-9/]{20,}{0,2}$echo 文件路径 strings$MALWARE_SAMPLE|grep-E^/(etc|tmp|home|var|opt)/echo 注册表键PE 文件 strings-el$MALWARE_SAMPLE|grep-iregistry\|hkey\|software与其他工具结合# strings grep: 快速定位敏感信息strings /usr/bin/ssh|grep-iprivate\|key\|rsa\|ed25519# strings sort uniq: 去重统计strings /usr/bin/bash|sort|uniq-c|sort-rn|head-20# strings file: 批量扫描识别find/tmp/unknown/-typef|whilereadf;doecho$f($(file-b$f)) strings-n8$f|head-3done# strings xxd: 定位字符串的精确位置STRING_POS$(strings-td binary|greptarget_string|awk{print $1})if[-n$STRING_POS];thenxxd-s$STRING_POS-l64binaryfi# 结合 readelf 分析 ELF 结构readelf-a/usr/bin/lsstrings-n10/usr/bin/ls|grepGCC性能注意事项strings在处理大型文件GB 级别时可能需要较长时间。以下是一些优化策略# 大文件分块处理whileddifhuge_file.binbs1Mskip$offsetcount12/dev/null;dostrings-n8/tmp/chunk_*offset$((offset1))done# 仅扫描文件头部head-c10M huge_file.bin|strings-n6# 并行处理多个大文件ls*.bin|parallelstrings -n 8 {} {.}.strings# 限制输出长度strings-n12large_binary|head-1000top_strings.txtstrings是最直接的二进制文件探索工具。它以最简单的方式让你窥见二进制内部的文本世界无论是调试程序、安全分析还是简单的好奇心strings都是第一选择。