当前位置: 首页 > 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.cnnetsun.cn/news/3757229.html

相关文章:

  • 为什么选择InboxLayout?5个理由让你的App手势体验超越竞品
  • basic-ftp源码探秘:Typescript实现的FTP协议解析原理
  • WinBtrfs实战指南:Windows平台Btrfs文件系统完全手册
  • 为什么选择SVG2TikZ?5大优势助你轻松生成高质量LaTeX图形代码
  • 如何快速获取QQ音乐资源:MCQTSS_QQMusic解析工具完全指南
  • CC27xx无线MCU架构解析:Cortex-M33与HSM协同设计实现物联网安全与低功耗
  • 粉笔公考980网课有效期多久能看几年
  • 霸王餐API接口对接数据加密:Java实现RSA+AOP组合的请求响应自动加解密方案
  • 多语言支持轻松实现:shadcn-docs-nuxt国际化(i18n)配置全攻略
  • enumerate 的用法
  • CocoaPods-Rome:让Xcode外框架构建变得前所未有的简单
  • CPSW以太网交换机网络统计机制:从硬件计数器到网络诊断实战
  • 如何让PDF文档在小屏幕上获得最佳阅读体验?Briss 2.0的智能裁剪解决方案
  • 运维实战分享|富士通 Fujitsu 服务器 ESXi 8 全套原厂 OEM 资源实操指南
  • CocoaPods-Rome源码解析:探索框架自动构建的实现原理
  • 笔记十三:PPO(近端策略优化)从零到一完全指南(终极干净版)
  • C++实现气候突变检测:滑动T检验与MK检验算法详解与工程实践
  • 【限时开源】2024最新AI蒸馏评估框架发布:覆盖17个SOTA模型、9类硬件平台、5维量化指标(含延迟/功耗/精度三维帕累托前沿分析)
  • 2026年英语教学工具深度测评:5款主流方案实测对比与选型指南
  • Beyond Compare 5密钥生成器:从逆向工程到一键激活的完整解决方案
  • KRAS[G12D]突变体的生物学特性与靶向治疗进展
  • VengeanceUI未来路线图:即将发布的5个令人期待的新功能预览
  • 大语言模型编程实战:从入门到工程化应用
  • 现在的 cursor 或者agent 系统怎么实现执行python代码的,怎么执行cli命令的,需要什么环境
  • 深度解析:Windows平台微信QQ防撤回补丁的技术实现原理
  • 探索Aidoku:您专属的iOS漫画阅读神器如何实现无广告沉浸体验?
  • 后端开发者转型大模型应用开发的实战指南
  • 同样是SMT贴片,为什么车载PCBA代工门槛高?认准这5项资质和设备标准
  • Python pandas高效处理CSV数据实战指南
  • 西门子PLC S7协议TCP通信实战:第三方上位机数据采集避坑指南