strings 是 Linux 下一个非常常用的工具,用来从二进制文件(可执行文件、库文件、core dump、固件等)里提取可打印的字符串。很多初学者看到 strings 的输出会觉得“乱七八糟”,其实只要理解它的原理和用途,就能很快看懂。
下面我分几个层面讲清楚。
strings 在干什么?一句话:
把文件中连续的可打印字符(通常是 ASCII/Unicode)提取出来,按行显示。
例如:
strings /bin/ls
你会看到类似:
Usage: ls [OPTION]... [FILE]...
GNU coreutils
%s: invalid option -- '%c'
https://www.gnu.org/
...
这些字符串来自:
原因通常包括:
strings 默认只要求连续 4 个可打印字符所以:
strings的输出 ≠ 程序逻辑,只是“文本碎片”
strings 的输出内容?通常你能直接看懂的是:
例如:
/usr/lib/libc.so.6
OpenSSL 1.1.1
error: permission denied
这些信息常用于:
比如:
@%@%@
H\xc3\xa9llo
可能是:
这部分一般不需要强行理解
单独看字符串意义不大,通常是:
objdumpgdbreadelf例如:
strings -n 6 binary | grep -i password
strings -n 6 file
减少“噪音”
strings -t x file
输出示例:
401000 Usage: ls
有助于逆向分析
strings -e l file # 16-bit little endian
strings binary | grep -i "http"
strings unknown_bin | head
strings malware | grep -E "http|192\.168"
strings binary | grep -i version
❌ strings 不能:
✅ strings 只能:
如果你是想:
objdump + strings + gdbgrep 就够了如果你愿意,可以:
strings 输出我可以逐行帮你解释。