温馨提示×

怎样用linux strings分析二进制

小樊
39
2026-10-08 09:20:37
栏目: 智能运维

在 Linux 下,strings 是一个常用的命令行工具,用于从二进制文件(可执行文件、库文件、镜像、core dump 等)中提取可打印字符串。它常用于逆向分析、取证、排查依赖、查看版本信息等。

下面从 基本用法 → 常用参数 → 实战示例 → 分析技巧 逐步说明。


一、基本用法

strings 文件名

例如:

strings /bin/ls

这会输出 ls 二进制中所有长度 ≥ 4 的可打印字符串。


二、常用参数详解

1️⃣ 指定最小字符串长度(默认是 4)

strings -n 6 binary

只显示长度 ≥ 6 的字符串,减少噪声。


2️⃣ 显示字符串在文件中的偏移地址

strings -a -t x binary
  • -a:扫描整个文件(不限于已加载段)
  • -t x:以 十六进制 显示偏移
  • 也可用 -t d(十进制)、-t o(八进制)

示例输出:

0x1a34 /lib64/ld-linux-x86-64.so.2
0x1a50 GLIBC_2.14

3️⃣ 只扫描特定节区(ELF 文件)

strings -e l binary
  • -e 指定字符编码:
    • s:7-bit ASCII(默认)
    • S:8-bit ASCII
    • b:16-bit big-endian
    • l:16-bit little-endian
    • B / L:32-bit

4️⃣ 结合 grep 过滤关键信息

strings binary | grep -i version
strings binary | grep -E "GLIBC|openssl|password"

三、实战示例

✅ 1. 查看程序依赖的库版本

strings /bin/ls | grep GLIBC

输出示例:

GLIBC_2.2.5
GLIBC_2.3

✅ 2. 判断二进制是否为 Debug 版本

strings app | grep -i debug

常见字符串:

  • gcc version
  • __FILE__
  • __LINE__
  • assert

✅ 3. 提取可能的 URL / IP

strings app | grep -E "https?://|([0-9]{1,3}\.){3}[0-9]{1,3}"

✅ 4. 分析恶意样本(基础)

strings malware.bin | less

重点看:

  • 命令名(/bin/sh, wget, curl)
  • 域名
  • 加密字符串(可能需进一步解密)

✅ 5. 定位字符串在二进制中的位置(逆向常用)

strings -a -t x binary | grep "password"

然后用:

objdump -s -j .rodata binary

或 gdb / radare2 定位对应逻辑。


四、strings 的局限 & 补充工具

❌ strings 的不足

  • 无法识别加密/编码字符串
  • 只提取“连续可打印字符”
  • 对压缩或混淆数据无效

✅ 配合使用的工具

工具 用途
objdump 反汇编
readelf ELF 结构分析
nm 符号表
radare2 / ghidra 逆向工程
binwalk 固件/打包分析

五、一个完整分析流程示例

# 1. 基本信息
file unknown_bin

# 2. 提取字符串
strings -a -n 6 -t x unknown_bin > str.txt

# 3. 搜索关键字
grep -iE "url|password|version|exec" str.txt

# 4. 结合反汇编
objdump -d unknown_bin | less

如果你有具体场景(比如:

  • 分析 ELF / PE
  • CTF 题目
  • 恶意样本
  • 固件
  • 找隐藏配置)

可以告诉我,我可以给你更针对性的 strings 用法和实战命令。

0 踩