《Sysinternals实战指南》Strings 学习笔记(12.1):从二进制里“扒”出明文信息的瑞士军刀
个人主页杨利杰YJlio❄️个人专栏《Sysinternals实战教程》 《Windows PowerShell 实战》 《WINDOWS教程》 《IOS教程》《微信助手》 《锤子助手》 《Python》 《Kali Linux》《那些年未解决的Windows疑难杂症》让复杂的事情更简单让重复的工作自动化Strings 学习笔记12.1从二进制里“扒”出明文信息的瑞士军刀1. 问题背景不懂逆向也能先看见一点线索2. Strings 是什么从二进制里提取可见字符串3. 工作原理简单粗暴但非常实用4. 基本用法先跑通三个核心命令4.1 扫描单个文件4.2 指定最小字符串长度4.3 递归扫描目录5. 常用参数真正高频的就这几个6. 实战场景安全初筛、运维排障、开发调试6.1 安全初筛先看网络、命令、持久化线索6.2 运维排障黑盒程序里找错误信息和路径6.3 开发调试从黑盒里找 API 和异常线索7. 日志、固件、转储文件Strings 不只看 EXE7.1 固件镜像7.2 内存 / 转储文件8. 使用建议与避坑把 Strings 当作线索发现工具9. 总结Strings 的价值是快速找到第一批线索1. 问题背景不懂逆向也能先看见一点线索在 Windows 运维、安全排查、开发调试里经常会遇到一种情况你拿到一个 EXE、DLL、SYS、BIN 或 DMP 文件但你暂时不知道它里面有什么也不想一上来就打开 IDA、x64dbg 或复杂逆向工具。这时候Sysinternals 的Strings就很适合做第一轮粗筛。它不执行目标文件不修改文件内容也不要求你懂汇编。它做的事情非常直接从二进制文件里提取连续的可见字符串。这些字符串可能是 URL、域名、API 名称、注册表路径、配置文件路径、错误提示、命令行参数、服务名称、甚至可疑的 PowerShell 或 cmd 调用。它们不一定直接给你答案但能给你方向。这张图展示的是 Strings 的核心概念从 EXE / DLL / SYS 这类二进制文件中扫描并提取 URL、API、ERROR、CONFIG、CMD 等可见明文线索。从图中能看出Strings 更像一个“字符串扫描引擎”。左侧是二进制文件中间是扫描过程右侧输出可读信息。它不负责判断这些字符串一定恶意也不负责完整还原程序逻辑但它可以快速帮你找到值得继续看的线索。建议把 Strings 当作“第一眼观察工具”。遇到陌生二进制文件先扫一遍看有没有域名、路径、错误信息、命令行、配置键名再决定后续是做运维排查、安全分析还是进入更深入的逆向调试。2. Strings 是什么从二进制里提取可见字符串Strings 的作用可以用一句话说清楚扫描文件内容把连续可打印字符提取出来。它适合处理很多类型的文件例如 EXE、DLL、SYS、BIN、DMP、固件镜像、二进制日志等。只要文件里存在未加密、未压缩、未混淆的明文字符串Strings 就有机会把它们提取出来。它有几个明显特点特点说明不执行目标文件只是读取文件内容不运行程序不依赖符号文件不需要 PDB也不要求源码使用门槛低命令行直接扫描输出量可能很大需要配合过滤命令只能看明文被压缩、加密、动态生成的内容可能看不到Strings 不是逆向分析工具的替代品而是逆向、取证、运维排查之前的低成本入口。它帮你先回答一个很朴素的问题这个文件里有没有能直接读出来的东西比如你看到下面这些字符串方向就已经出来了https://example.com/api/upload cmd.exe /c whoami powershell -enc ... HKEY_LOCAL_MACHINE\Software\App\Config ERROR_ACCESS_DENIED C:\ProgramData\App\config.json但要注意看到可疑字符串不等于文件一定恶意没看到可疑字符串也不等于文件一定安全。Strings 只能发现明文线索不能替你完成定性判断。3. 工作原理简单粗暴但非常实用Strings 的工作方式并不神秘。它会把目标文件当成字节流读取然后识别其中连续出现的可打印字符。当连续字符长度达到设定阈值时就把它当成一个字符串输出。这张图展示的是 Strings 的基本工作流程字节流读取、ASCII / Unicode 检测、最小长度过滤最后输出可见明文。从图中能看出Strings 的逻辑非常直接。先读取文件中的原始字节再分别按 ASCII 和 Unicode 视角尝试识别字符串接着通过最小长度过滤掉短噪音最后输出可读内容。最小长度过滤是 Strings 用得好不好的一道分水岭。如果阈值太低会输出大量短碎片如果阈值太高又可能漏掉短命令、短 Key、短错误码。可以用下面这个流程理解读取二进制字节流识别 ASCII 字符串识别 Unicode 字符串按最小长度过滤输出可见字符串配合 findstr / PowerShell 筛选ASCII 和 Unicode 的区别也要稍微知道一点。ASCII 通常是一个字节一个字符Unicode 在 Windows 里很多时候是 UTF-16 LE常见表现是字符之间夹着 00 字节。Strings 会尝试从这些不同编码视角里提取可见文本。机制人话理解对分析的影响ASCII常规英文字符、路径、URL、命令常见于命令、协议、API 名称UnicodeWindows 程序里常见的宽字符常见于界面文字、路径、注册表键最小长度只输出达到长度要求的字符串用于降低噪音偏移量字符串在文件中的位置便于进一步定位和逆向分析一般排查时建议先用 -n 6 或 -n 8。这个范围通常能过滤掉不少短噪音同时又不至于漏掉太多有意义的线索。不要把 Strings 的输出当成完整事实。它只告诉你文件里存在这些明文片段不告诉你这些字符串是否一定会被执行也不告诉你执行路径是什么。4. 基本用法先跑通三个核心命令Strings 上手很简单。真正要注意的是不要一上来就递归扫整个大目录也不要直接盯着海量输出硬看。先从单文件开始再加长度过滤最后再做目录递归。这张图展示的是 Strings 的三个基础命令扫描单文件、限制最小长度、递归扫描目录。从图中能看出Strings 的基础用法非常清楚strings.exe sample.exe 用来扫描单个文件strings.exe -n 6 sample.exe 用来限制最小字符串长度strings.exe -s C:\Apps 用来递归扫描目录。4.1 扫描单个文件最基础的用法就是直接指定文件路径strings.exe C:\Tools\sample.exe如果输出太长可以配合 more 分页查看strings.exe C:\Tools\sample.exe | more也可以直接过滤 URL、域名、API 等线索strings.exe C:\Tools\sample.exe | findstr /i http:// https:// .com .cn api4.2 指定最小字符串长度实际使用中-n 很重要。它可以降低噪音只输出长度达到要求的字符串。strings.exe -n 6 C:\Tools\sample.exe常见经验值如下参数适合场景说明-n 4粗略扫描输出较多噪音也多-n 6常规排查平衡线索和噪音-n 8安全初筛更容易保留有意义字符串-n 10高噪音文件输出更少但可能漏短线索推荐先用 -n 6如果噪音仍然多再提高到 -n 8 或 -n 10。4.3 递归扫描目录如果要扫描整个目录可以使用 -sstrings.exe -s C:\Apps C:\Temp\apps_strings.txt再配合关键字过滤strings.exe -s C:\Apps | findstr /i password pwd token api递归扫描大目录会产生巨大输出。尤其是 Program Files、Windows、用户目录这类路径建议先限定范围再重定向到文件分析。更稳的做法是先扫描单个可疑文件再扫描可疑目录不要一上来全盘扫。5. 常用参数真正高频的就这几个Strings 参数不算复杂但日常高频使用的并不多。对企业运维和安全初筛来说先掌握 -n、-s、ASCII / Unicode 相关参数、-o 偏移量就够了。参数作用典型命令说明-n length设置最小字符串长度strings.exe -n 8 sample.exe降低短字符串噪音-s递归扫描目录strings.exe -s C:\Apps用于目录级搜索-a只扫描 ASCIIstrings.exe -a sample.exe视版本支持情况-u只扫描 Unicodestrings.exe -u sample.exe视版本支持情况-o输出偏移量strings.exe -n 6 -o sample.exe便于后续定位偏移量对安全分析和逆向同学更有价值。它能告诉你字符串大概在文件中的哪个位置后续可以用十六进制编辑器、调试器或反汇编工具继续定位。strings.exe -n 6 -o malware.exe偏移量不是普通运维每天都要用但一旦进入取证或逆向分析它会变得很关键。如果你只是做日常排障优先记住下面三条就行strings.exe sample.exe strings.exe -n 6 sample.exe strings.exe -n 6 -s C:\Apps工具学习不要一上来背全参数。先把常用场景跑通再逐步补高级参数。6. 实战场景安全初筛、运维排障、开发调试Strings 最好用的地方是它不局限于安全分析。安全同学可以用它看样本线索运维同学可以用它找配置路径和错误信息开发同学也可以用它辅助调试黑盒程序。这张图展示的是 Strings 的三个典型实战场景安全初筛、运维排障、开发调试。从图中能看出同一个 Strings 工具在不同角色手里关注点不同。安全关注 URL、命令、PowerShell、注册表持久化运维关注错误信息、配置路径、服务名、日志路径开发关注 API、异常、源码路径和调试开关。6.1 安全初筛先看网络、命令、持久化线索拿到可疑样本时第一轮可以先过滤网络行为strings.exe -n 6 malware.exe | findstr /i http:// https:// ftp:// .onion .top .cn .com再看命令执行和脚本调用strings.exe -n 5 malware.exe | findstr /i cmd.exe powershell.exe wscript.exe cscript.exe rundll32 schtasks reg add如果看到类似下面内容就说明值得继续分析powershell -enc ... cmd.exe /c whoami schtasks /create ... reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run安全场景里不要直接运行可疑样本。Strings 的优势就是可以在不执行文件的情况下先看一眼明文线索。6.2 运维排障黑盒程序里找错误信息和路径有些程序界面报错很简略日志也不好找。这时可以用 Strings 扫一下 EXE 或 DLL找里面写死的错误信息、日志路径、配置文件路径。strings.exe app.exe | findstr /i Exception Error Failed Timeout config log ProgramData可能会看到类似内容Database connection failed Timeout when contacting service C:\ProgramData\App\logs\app.log C:\ProgramData\App\config.json Invalid license key运维排障时Strings 很适合用来找“程序可能会写到哪里、读哪里、报什么错”。这对定位日志路径、配置路径、服务名非常有帮助。6.3 开发调试从黑盒里找 API 和异常线索开发场景里如果你手头只有一个发布版程序没有源码也可以先用 Strings 看看里面有没有关键 API、异常类型、调试开关。strings.exe -n 6 app.exe | findstr /i CreateFile ReadFile WriteFile Exception DebugMode如果输出中出现源码路径、异常类型、配置键名可能就能帮助你更快理解程序行为。Strings 在开发调试中不是为了替代源码而是用于分析黑盒程序暴露出来的文本痕迹。7. 日志、固件、转储文件Strings 不只看 EXE很多人以为 Strings 只适合 EXE 和 DLL其实不是。只要是二进制文件都可以尝试扫一下。固件镜像、内存转储、崩溃 Dump、未知格式日志都可能包含明文信息。7.1 固件镜像比如分析路由器固件或设备镜像可以先查默认账号、管理路径、调试接口strings.exe router.bin -n 6 | findstr /i admin password telnet ssh http如果出现默认账号、Web 路径、调试服务名称就能作为后续分析入口。7.2 内存 / 转储文件对 Dump 或内存镜像可以搜索邮件、Token、密码等敏感明文。但这类操作要注意合规边界。strings.exe memory.dmp -n 8 | findstr /i gmail.com password token key涉及内存、转储、账号、Token、密码的分析必须遵守公司制度和合规要求。不要把敏感信息随意截图、外发或写进公开博客。写公开文章时可以使用模拟样例和脱敏路径。不要把真实客户系统、真实账号、真实域名、真实 Token 放出来。8. 使用建议与避坑把 Strings 当作线索发现工具Strings 最大的问题不是不会用而是输出太多、噪音太多、容易误读。很多新手一跑满屏都是字符串碎片然后就觉得这个工具没用。问题不在工具而在筛选方式。这张图展示的是 Strings 的推荐做法和常见避坑调高 -n、导出结果再筛选、优先看 URL / 路径 / 错误信息同时要警惕输出太多、噪音干扰以及“看不到不等于没有”。从图中能看出Strings 应该被当作线索发现工具而不是最终判断工具。推荐做法是先通过 -n 降低噪音再把结果导出到文件然后用 findstr、PowerShell 或文本编辑器继续筛选。优先看高价值线索URL、路径、错误信息、注册表键、命令行、API 名称、配置键名。这些信息通常比随机短字符串更有分析价值。常见问题表现处理建议输出太多一屏看不完无法分析使用-n 6、-n 8降噪噪音干扰很多短词和无意义符号调高最小长度配合过滤线索分散关键信息混在大量输出中重定向到文件再分析看不到目标没有明显 URL 或命令可能被加密、压缩、动态生成误判风险看到字符串就下结论结合路径、行为、签名、哈希判断推荐三条常备命令可以直接放进工具箱:: 1可疑 EXE 初筛 strings.exe -n 6 malware.exe | findstr /i http:// https:// cmd.exe powershell.exe reg.exe schtasks :: 2软件目录快速搜索配置路径 strings.exe -n 6 -s C:\Program Files\AppX | findstr /i HKEY_ .ini .json .xml C:\ProgramData :: 3转储文件中搜索潜在敏感明文注意合规 strings.exe -n 8 dump.bin | findstr /i token password key最重要的一点看不到不等于没有。文件可能加壳、压缩、加密也可能在运行时动态生成字符串。Strings 只能看到静态文件中直接可见的那一层。9. 总结Strings 的价值是快速找到第一批线索Strings 是 Sysinternals 文件工具里非常适合作为入门篇的工具。它简单、直接、无侵入却能在很多场景里迅速给你方向。在安全场景里它可以帮你初筛域名、命令、持久化线索在运维场景里它可以帮你找错误信息、日志路径和配置路径在开发调试里它可以帮你从黑盒程序里看见 API、异常和调试提示。如果只记一个结论那就是Strings 不是结论工具而是线索工具。它帮你回答“这个文件里有没有值得继续追的明文信息”而不是替你完成最终定性。推荐日常使用时固定三步先设置合适的 -n再配合 findstr 或 PowerShell 过滤最后把结果纳入证据链判断。工具小不代表价值小。很多排障和分析真正缺的不是复杂工具而是第一批方向明确的线索。Strings 正好干这件事。 返回顶部点击回到顶部