温馨提示×

怎样用linux strings学逆向

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

用 strings 学 Linux 逆向,是一个非常合适、门槛很低的起点。它不能替代完整逆向,但能帮你建立“程序里有什么”的直觉。下面我按学习路径 + 实战方法来讲。


一、strings 是什么(先搞清楚)

strings 用来从一个二进制文件中提取可打印字符串(默认长度 ≥ 4)。

strings ./a.out

常见用途:

  • 看程序里写了什么提示、错误信息
  • 找硬编码密码、URL、路径
  • 判断程序语言、库、框架
  • 辅助定位关键逻辑

二、最基础:从一个 crackme 开始

1️⃣ 准备一个练习程序

自己写一个最简单的:

#include <stdio.h>
#include <string.h>

int main() {
    char buf[100];
    printf("Enter password: ");
    scanf("%s", buf);
    if (strcmp(buf, "secret123") == 0)
        printf("Access granted\n");
    else
        printf("Access denied\n");
    return 0;
}

编译:

gcc crack.c -o crack

2️⃣ 用 strings 分析

strings crack

你会看到:

Enter password:
secret123
Access granted
Access denied

✅ 重点:密码直接暴露

这就是最基础的“逆向思维”:

不看汇编,也能猜出逻辑


三、strings 常用进阶技巧(学逆向必会)

✅ 1. 指定最小长度

strings -n 6 binary

避免噪音,只看“像样”的字符串。


✅ 2. 显示字符串偏移

strings -t x binary

输出示例:

401000 Enter password:
401020 secret123

用途:

  • 配合 objdump / gdb
  • 定位字符串在文件中的位置

✅ 3. 同时看代码段(关键!)

strings -a binary

-a 扫描整个文件,不只是 .rodata


✅ 4. 结合 file / readelf

file binary
readelf -h binary

判断:

  • 是 ELF 吗?
  • 32 / 64 位?
  • stripped 了吗?

四、strings → 汇编(逆向进阶)

例子:找到密码判断逻辑

1️⃣ 找到字符串偏移

strings -t x crack

2️⃣ 用 objdump 搜索

objdump -d crack | less

搜索 secret123 附近:

  • strcmp
  • test
  • je / jne

这就是从 strings 到汇编的桥梁。


五、strings 能教你的“逆向思维”

✅ 程序不是黑盒
✅ 字符串 = 线索
✅ 硬编码 = 弱点
✅ 错误信息 = 逻辑提示

常见训练目标:

  • 找密码
  • 找隐藏命令
  • 找 flag 格式(flag{...})
  • 判断是否加壳

六、推荐练习资源(Linux)

  • strings + 简单 C 程序
  • CTF 入门题(picoCTF)
  • crackme 系列
  • reverse engineering for beginners(免费书)

七、重要提醒(防误区)

❌ strings ≠ 真正逆向
❌ 加壳 / 加密后字符串会消失
✅ 它是侦查阶段工具


如果你愿意,我可以:

  • 带你一步步逆向一个真实 crackme
  • 教你 strings + gdb
  • 或给你 Linux 逆向学习路线图

你想从哪一步开始?

0 踩