温馨提示×

怎样结合脚本用linux strings

小樊
50
2026-09-14 14:42:31
栏目: 智能运维

在 Linux 下,strings 命令用来从二进制文件(可执行文件、库、core dump 等)中提取可打印字符串。结合脚本使用,可以自动化分析、过滤、统计或批量处理多个文件。

下面从基础用法 → 脚本结合方式 → 实战示例逐步说明。


一、strings 基础

strings file.bin

常用参数:

  • -n N:只显示长度 ≥ N 的字符串
  • -e encoding:指定字符编码(如 s, l, b, B)
  • -f:显示文件名
  • -a:扫描整个文件(默认已接近全扫)

示例:

strings -n 6 binary | grep PASSWORD

二、在脚本中使用 strings 的常见方式

1️⃣ 批量处理多个文件

#!/bin/bash

for f in /usr/bin/*; do
    echo "=== $f ==="
    strings "$f" | grep -i "version"
done

2️⃣ 结合 grep / awk / sed 分析内容

strings app | awk 'length > 8' | sort | uniq -c | sort -nr

用途:

  • 提取长字符串
  • 统计出现频率
  • 发现硬编码路径、密码、URL

3️⃣ 判断文件是否包含特定字符串

if strings "$1" | grep -q "DEBUG"; then
    echo "包含 DEBUG 信息"
fi

4️⃣ 自动提取 URL / IP / 路径

strings binary | grep -Eo "https?://[a-zA-Z0-9./_-]+"
strings binary | grep -Eo "[0-9]{1,3}(\.[0-9]{1,3}){3}"

三、实战脚本示例

✅ 示例 1:扫描目录下所有二进制中的敏感词

#!/bin/bash

DIR="$1"
KEYWORDS="password|secret|token|key"

find "$DIR" -type f -executable -exec sh -c '
    f="$1"
    matches=$(strings "$f" | grep -Ei "$2")
    if [ -n "$matches" ]; then
        echo "[!] $f"
        echo "$matches"
    fi
' _ {} "$KEYWORDS" \;

✅ 示例 2:提取 ELF 中的版本信息

#!/bin/bash

for bin in "$@"; do
    ver=$(strings "$bin" | grep -i "version" | head -n 1)
    echo "$bin -> $ver"
done

✅ 示例 3:CTF / 逆向辅助脚本

strings challenge | grep -i "flag{" 
strings challenge | strings -n 4 | grep -E "flag|key|secret"

四、与 objdump / readelf 配合(进阶)

strings binary | grep main
objdump -d binary | grep "call"

或用 file 判断类型:

file "$1" | grep -q ELF && strings "$1"

五、注意事项

  • strings 不能解密,只能看明文
  • 压缩 / 加密数据可能看不到有用信息
  • 对 shell / python 脚本不如直接 cat
  • 大文件建议加 -n 减少噪声

如果你有具体使用场景(比如逆向、取证、安全扫描、日志分析),我可以帮你写一套完整脚本。

0 踩