当前位置: 首页 > news >正文

Linux 二进制分析利器:strings 命令从入门到实战全解

一、命令简介

strings 命令用于在二进制文件、可执行文件、对象文件或任何数据文件中查找并提取可打印的字符串序列。它默认识别长度至少为 4 个字符的可打印 ASCII 字符串(以换行符或空字符终止)。

该工具在逆向工程、调试和二进制文件分析中非常有用,常用于查找硬编码的路径、版本信息、错误消息、密钥或分析未知的文件格式。

二、语法格式

基本语法

bash

运行

strings [选项]... [文件]...

可以指定一个或多个文件进行扫描。 如果未指定文件,或文件参数为 -,则默认从标准输入(stdin)读取数据。

三、常用选项及说明

表格

选项长选项说明
-a--all扫描整个文件,而不仅仅是目标文件(如 ELF)中已初始化的加载段(如 .data、.text)。对于普通数据文件,此行为通常是默认的。
-f--print-file-name在输出的每个字符串前显示其所属的文件名。这在同时检查多个文件时非常有用。
-n <长度>--bytes=<长度>设置被识别为字符串的最小长度(字符数)。默认值为 4。
-<数字>传统简写,功能等同于 -n <数字>。例如,-8 等价于 -n 8。
-t <格式>--radix=<格式>在输出的每一行前显示字符串在文件中的偏移量(位置)。<格式> 可以是:o:八进制偏移量d:十进制偏移量(默认)x:十六进制偏移量
-o等同于 -t o,以八进制显示偏移量。
-e <编码>--encoding=<编码>指定要搜索的字符编码和字节序。可选值:s:7-bit ASCIIS:8-bit ASCIIb:16-bit 大端序 (Big-endian) Unicode (UTF-16BE)l:16-bit 小端序 (Little-endian) Unicode (UTF-16LE)B:32-bit 大端序L:32-bit 小端序
-T <目标>--target=<目标>指定二进制文件的目标格式(如 elf64-x86-64, elf32-i386 等)。这会影响节区(section)的解析方式。
-一个传统选项,指示扫描整个文件(类似于 -a)。现代版本中通常不需要显式使用。
--help显示帮助信息并退出。
--version显示版本信息并退出。

四、示例用法

示例 1:基本用法

查找 /bin/ls 可执行文件中的所有默认长度(≥4 字符)的可打印字符串。

bash

运行

strings /bin/ls

示例 2:指定最小字符串长度

只显示 /usr/bin/bash 中长度至少为 10 个字符的字符串。

bash

运行

strings -n 10 /usr/bin/bash # 或使用传统格式 strings -10 /usr/bin/bash

示例 3:显示字符串在文件中的位置

显示 /bin/cat 中的字符串及其在文件中的十六进制偏移量。

bash

运行

strings -t x /bin/cat

输出示例:

plaintext

1b20 /lib64/ld-linux-x86-64.so.2 1b7a libc.so.6 ...

示例 4:扫描多个文件并显示文件名

同时扫描多个共享库文件,并在每行输出前显示来源文件名。

bash

运行

strings -f /lib/x86_64-linux-gnu/libc*.so.6 | head -20

示例 5:结合管道进行过滤

查找 /sbin/init 中所有包含 “error” 的字符串(不区分大小写)。

bash

运行

strings /sbin/init | grep -i error

示例 6:扫描整个文件(包括非加载段)

强制扫描 a.out 对象的每一个字节,即使它不在标准的节区内。

bash

运行

strings -a a.out

示例 7:搜索宽字符(Unicode)字符串

在 Windows PE 文件(如 .exe)或某些数据文件中查找 UTF-16LE 编码的字符串。

bash

运行

strings -e l suspicious_file.bin

五、注意事项

输出内容: strings 的输出可能包含大量看似无意义的文本,因为任何连续的 4 个及以上可打印字节都会被当作 “字符串” 输出。通常需要结合 grep、awk 等工具进行过滤和针对性分析。

编码问题: 默认只查找 ASCII 字符串。如果文件包含 UTF-8(多字节)、UTF-16 或其他编码的文本,需要使用 -e 选项指定正确的编码,否则可能无法识别或输出乱码。

二进制文件格式: 对于复杂的可执行文件(如 ELF、PE),strings 默认可能只扫描某些特定的节区(如 .rodata)。使用 -a 选项可以确保扫描整个文件,但可能会更慢并产生更多输出。

性能: 扫描非常大的文件(如数 GB 的内存转储或磁盘镜像)时,strings 可能会消耗较多时间和内存。可以考虑先使用 dd 等工具提取感兴趣的区域再进行分析。

安全与隐私: strings 常被用于提取二进制文件中可能硬编码的敏感信息(如密码、API 密钥、内网地址)。在发布软件前,建议使用此工具检查是否有意外泄露的信息。

http://www.jsqmd.com/news/1296851/

相关文章:

  • MCP 2026-07-28 无状态核心之后:身份、任务、幂等与审计状态到底放在哪里?
  • 当“肉鸽抽卡“遇上“自走棋“:一款三国题材手游的战斗内核设计
  • 计算机毕业设计之20222私人小医院病历管理系统
  • ffmpeg-static 跨平台多媒体处理架构解析与技术实践
  • 7步掌握KMS智能激活工具:Windows和Office永久激活完整方案
  • HsMod终极指南:55项功能全面优化你的炉石传说游戏体验
  • 英雄联盟智能助手Seraphine:告别繁琐查询,专注游戏体验的终极解决方案
  • 低空监管全面重构,在沈阳学无人机,选对路子比盲目考证更重要!
  • 数据汇聚与“一图可视”,打破信息孤岛的治理逻辑
  • 如何高效使用直播录制工具:DouyinLiveRecorder专业用户指南
  • 如何掌握Magisk实战:Android系统Root与定制的完整进阶指南
  • 【万字文档+源码】 基于springboot+vue学生信息管理系统-可用于毕设-课程设计-练手学习-学习资料分享
  • Python批量巡检系统资源将结果保存到文件
  • LLM微服务架构评审全链路解析,从Prompt注入到推理延迟的11个关键审查节点
  • Akagi麻将AI助手:3分钟学会用AI提升麻将水平的终极指南
  • 江西省赣州市会昌县君和小镇,三层住宅楼梯中间切割改造,观光曳引龙门架家用电梯落地案例
  • 突破Docker Hub限制:awx-on-k3s私有容器registry部署与配置
  • C#方法:从声明到调用指南
  • 城市生命线采购转向软硬一体,风险评估与监测系统闭环落地
  • Hello,World! [从 0 开始的 C++ 之旅 1.1]
  • 全面掌握NBTExplorer:高效编辑Minecraft游戏数据的跨平台NBT编辑器
  • Zotero插件市场:如何用3个步骤彻底改变你的学术工具管理体验?
  • svmjs实战教程:用JavaScript实现异或问题分类,掌握SVM训练技巧
  • 智能体面试准备(十一):Agent 评估体系——轨迹、工具选择与成功率的量化方法
  • 2026年旧衣服回收能当场拿到现金吗?上门回收流程与平台推荐对比 - 快递物流资讯
  • 揭秘VengeanceUI核心技术:GSAP动画与Three.js 3D效果的完美结合
  • 如何快速安装BetterNCM插件管理器:网易云音乐PC版终极增强指南
  • 从ChatGPT到Codex:AI开发为什么正在进入多Agent协作阶段?
  • 沟槽MOS(Trench MOSFET)——把电流“直译“成效率的秘密
  • IoTaWatt Open WiFi Electric Energy Monitor:打造智能家庭能源管理系统的终极指南