用 strings 学 Linux 逆向,是一个非常合适、门槛很低的起点。它不能替代完整逆向,但能帮你建立“程序里有什么”的直觉。下面我按学习路径 + 实战方法来讲。
strings 用来从一个二进制文件中提取可打印字符串(默认长度 ≥ 4)。
strings ./a.out
常见用途:
自己写一个最简单的:
#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
strings crack
你会看到:
Enter password:
secret123
Access granted
Access denied
✅ 重点:密码直接暴露
这就是最基础的“逆向思维”:
不看汇编,也能猜出逻辑
strings -n 6 binary
避免噪音,只看“像样”的字符串。
strings -t x binary
输出示例:
401000 Enter password:
401020 secret123
用途:
objdump / gdbstrings -a binary
-a 扫描整个文件,不只是 .rodata
file binary
readelf -h binary
判断:
1️⃣ 找到字符串偏移
strings -t x crack
2️⃣ 用 objdump 搜索
objdump -d crack | less
搜索 secret123 附近:
strcmptestje / jne这就是从 strings 到汇编的桥梁。
✅ 程序不是黑盒
✅ 字符串 = 线索
✅ 硬编码 = 弱点
✅ 错误信息 = 逻辑提示
常见训练目标:
flag{...})strings + 简单 C 程序crackme 系列reverse engineering for beginners(免费书)❌ strings ≠ 真正逆向
❌ 加壳 / 加密后字符串会消失
✅ 它是侦查阶段工具
如果你愿意,我可以:
你想从哪一步开始?