在 Ubuntu(或其他 Linux)里,strings 命令用于从一个二进制文件(可执行文件、库、core dump、固件等)中提取可打印的字符串。分析 strings 输出,通常是为了:
下面从 基本用法 → 输出分析思路 → 实战技巧 讲清楚。
strings 文件名
示例:
strings /bin/ls
常见参数:
strings -n 6 file # 只显示长度 ≥6 的字符串
strings -a file # 扫描整个文件(不跳过某些段)
strings -e l file # 指定字符编码(l=16-bit little endian)
strings -t x file # 显示字符串偏移(十六进制)
strings -f file # 显示文件名
示例输出:
/lib64/ld-linux-x86-64.so.2
Usage: %s [OPTION]... [FILE]...
GNU coreutils
%s: invalid option -- '%c'
https://www.gnu.org/
这些字符串通常来自:
strings app | grep -i error
可判断:
strings app | grep -iE 'password|token|api|secret|http'
常见发现:
⚠️ 如果发现明文密码,说明代码有严重安全问题
strings app | grep -iE 'gcc|clang|glibc|python|go|rust'
例如:
GCC: (Ubuntu 11.4.0)
GLIBC_2.34
可判断:
strings app | grep '/'
可能发现:
strings app | grep -iE 'GET|POST|HTTP|socket|connect'
用于:
strings -t x binary | grep 'main'
输出:
0x1a3f main
然后用 objdump / gdb / radare2 进一步分析。
strings binary | grep -i 'debug'
strings binary | less
xxd binary | grep 'GET'
file binary
strings binary
file unknown
strings unknown | head
strings chall | grep -i flag
strings malware | grep -iE 'bash|curl|wget|/bin/sh'
❌ strings 不是反汇编
✅ 真正分析程序行为要用:
objdumpgdbstraceltraceradare2 / ghidrastrings 是“看二进制在‘说话’”,不是“看它在‘想什么’”
如果你愿意,可以把 具体 strings 输出片段 或 分析目标(CTF / 安全 / 调试) 发出来,我可以帮你逐行分析。