Ubuntu strings与其他系统工具的协同工作
一 工具定位与安装
- strings 是 GNU Binutils 中的命令行工具,用于从二进制文件(可执行程序、库、包等)中提取可打印字符串,常与 grep、sed、awk、objdump、readelf、hexdump 等工具组合,用于调试、逆向与安全分析。
- 在 Ubuntu/Debian 上安装:sudo apt update && sudo apt install binutils。常用参数:-n(最小长度)、-t d/x/o(偏移量进制)、-e s/S/b/l/B/L(编码)、-f(打印文件名)、-a(扫描整个文件)、-d(仅数据段)。
二 与文本处理和安全分析工具链协同
- 快速过滤与定位
- 过滤敏感信息:strings binary | grep -i “password”
- 可疑 URL:strings malware | grep -E “https?://” | grep -v “example.com”
- 疑似密钥(32位以上十六进制):strings crypto | grep -i “key” | grep -E “[a-f0-9]{32,}”
- 结构化提取与统计
- 提取字段:strings package.deb | awk -F’:’ ‘/Version/{print $2}’
- 统计高频项:strings access.log | grep “HTTP” | awk ‘{print $1}’ | sort | uniq -c | sort -nr
- 定位与取证
- 显示偏移并查看上下文:strings -t x binary | grep “keyword”;再用 hexdump -C -s -n binary 查看十六进制内容。
- 日志场景(非文本或混合内容)
- strings /path/to/logfile | grep “ERROR”;或结合 awk/cut 做字段提取与统计。
- 说明
- 对纯文本日志,直接使用 grep/sed/awk 更高效;strings 更适合“从非文本载体中找文本”的场景。
三 与二进制分析与逆向工具协同
- 关联字符串与节区/段:readelf -S binary 查看节区;strings -d binary 仅取数据段;strings -t x binary 输出偏移,配合 hexdump -C -s -n 精确定位字节。
- 多工具串联示例
- 查找关键字并查看所在段与十六进制:
- strings -t x binary | grep -i “secret”
- readelf -S binary
- hexdump -C -s 0x -n 64 binary
- 适用场景:排查硬编码信息、验证资源嵌入、快速定位版本/版权/URL 等可读文本在文件中的物理位置。
四 与版本控制、文档生成和自动化运维协同
- 版本控制与审计
- 将提取结果纳入 Git:strings package.deb > strings.txt;git add strings.txt;git commit -m “Add strings snapshot”;git push。用于追踪版本号、版权、构建信息等变更。
- 文档生成
- 提取版权/版本等元信息,交给 pandoc 生成 Markdown/HTML/PDF:
- strings package.deb | grep -i “Copyright” > copyright.txt
- strings package.deb | grep -i “Version” > version.txt
- pandoc copyright.txt version.txt -o documentation.pdf
- 自动化运维与批量处理
- 在 Ansible 中批量抽取并回写配置:
- name: Extract version
command: strings /path/to/app | grep -i “Version” | awk ‘{print $2}’
register: ver
- name: Replace placeholder
replace:
path: /etc/app/config.conf
regexp: ‘{{VERSION}}’
replace: ‘{{ver.stdout}}’
- 适用场景:发布审计、合规取证、批量变更、交付物自动生成。
五 与国际化与本地化工作流协同
- 概念区分
- 上文的 strings(GNU Binutils) 用于“从二进制里提取可读文本”;而软件本地化中的 “strings” 常指待翻译的字符串资源(如 .po/.mo 文件),由 gettext 体系管理,二者用途不同但可配合。
- 典型本地化流程
- 安装工具:sudo apt-get install gettext devscripts
- 准备源码并标记可翻译字符串(如 _() / gettext())
- 生成/更新模板:debian/extract-msgs --pot --output debian/pot-file
- 初始化翻译:msginit --input debian/pot-file --locale fr_FR --output debian/fr/LC_MESSAGES/app.po
- 编译机器码:msgfmt --output-file debian/fr/LC_MESSAGES/app.mo debian/fr/LC_MESSAGES/app.po
- 部署路径与生效:将 .mo 安装至 /usr/share/locale//LC_MESSAGES/,程序通过 gettext 加载;变更后需重新编译 .mo 并重启应用测试。
- 适用场景:多语言应用的翻译管理、打包与发布。