strings
是 Linux 中一个非常实用的工具,用于从二进制文件中提取可打印字符串。结合其他 Linux 命令,可以发挥更强大的作用。以下是一些常见的组合用法和示例:
grep
过滤特定字符串strings file.bin | grep "keyword"
bash
strings /usr/bin/ls | grep "GNU"
输出 ls
二进制文件中所有包含 "GNU" 的字符串。wc
统计字符串数量strings file.bin | wc -l
bash
strings /bin/bash | wc -l
统计 bash
二进制文件中的字符串数量。sort
和 uniq
去重并排序strings file.bin | sort | uniq -c | sort -nr
bash
strings /usr/bin/python3 | sort | uniq -c | sort -nr
列出 python3
二进制文件中最常见的重复字符串。less
或 more
分页查看strings file.bin | less
bash
strings /sbin/init | less
file
先确认文件类型file file.bin && strings file.bin | head -n 20
bash
file /usr/bin/curl && strings /usr/bin/curl | head -n 20
od
或 xxd
分析二进制上下文strings -td file.bin | awk '{print $1}' | xargs -I{} od -j {} -N 16 -Ax -tx1 file.bin
-td
显示十进制偏移),并用 od
查看该位置的十六进制内容。bash
strings -td /bin/ls | head -n 1 | awk '{print $1}' | xargs -I{} od -j {} -N 16 -Ax -tx1 /bin/ls
查看 /bin/ls
中第一个字符串的二进制上下文。strace
动态分析程序调用的字符串strace -e trace=open,read,write ./program 2>&1 | strings
bash
strace -e trace=open,read /bin/ls 2>&1 | strings
find
批量分析目录下的二进制文件find /usr/bin -type f -exec strings {} + | grep "libc"
/usr/bin
下所有文件,提取包含 "libc" 的字符串。-type f
:仅限普通文件。-exec strings {} +
:对每个文件执行 strings
。objdump
反汇编后提取字符串objdump -s -j .rodata file.bin | strings
.rodata
(只读数据段)中提取字符串。perl
或 python
处理复杂逻辑strings file.bin | perl -ne 'print if length($_) > 20'
strings -a
:扫描整个文件(默认跳过非文本段)。strings -n 5
:仅显示长度 ≥5 的字符串(默认 ≥4)。strings -t x
:显示字符串的十六进制偏移量。通过灵活组合这些命令,可以高效地完成二进制文件分析任务!