
StringRipper:从运行中的 Windows 进程中提取 URL 和字符串
来源标题:Show HN: StringRipper – pull URLs and strings out of running Windows processes
开发者发布了一款小型 Windows 工具 StringRipper,可从运行中的进程、文件或整个文件夹中提取 URL 及自定义正则匹配的字符串。该工具支持 ASCII、ANSI、UTF-8、UTF-16 LE/BE 编码,并能自动解开一层 Base64、hex 或转义编码,将混淆的 URL 还原为明文。工具为单文件便携 exe,可一次性扫描同名进程的所有实例并标注命中来源的 pid 和内存位置。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
Show HN:StringRipper——从运行中的 Windows 进程里提取 URL 和字符串
一个小巧的 Windows 工具,可以从运行中的进程、文件或整个文件夹里提取字符串。
给它一个进程,它就会翻遍可读内存,寻找 URL 或者你给的任何正则表达式。支持 ASCII/ANSI/UTF-8、UTF-16 LE/BE,还会顺带解开一层 Base64、hex 或转义。所以 JSON 块和查询字符串里的 https://、https%3A%2F%2F 和 \u002F 都会还原成普通 URL。
变音符号和其他非 ASCII 字母会保留在字符串里,C:\Users\Jürgen... 会完整输出,而不会在 ü 处被截断。UTF-8、ANSI 和 UTF-16 都是如此。URL 里也一样:像 /ufs/Pulsación.rar 这样的路径会保留其中的 ó,Download 预设里也一样。主机名保持 ASCII。如果一段孤立的非 ASCII 词周围没有任何 ASCII 字符,仍然会被漏掉,这样可以避免随机内存被误当成文本。
All instances 会一次性扫描所有具有所选名称的进程。浏览器往往一开就是二十个。每个命中结果都会标明它来自哪个 pid。
内存命中还会标明位置:app.dll 的 .rdata、映射的 foo.dat、栈、堆或私有内存。这部分属于来源信息,所以过滤框能搜到它们。heap 指进程堆的基段,其余未命名的都算 private。
单个便携 exe。无需安装程序,没有一堆 DLL。真正的便携:工作区、更新设置和预设都放在 exe 旁边的 data 文件夹里(workspace.sqlite、update.ini、regex-user-presets.ini),所以这个文件夹就是完整安装。复制到 U 盘上,所有东西都跟着走。在不可写的文件夹里(Program Files),它会改用 %LOCALAPPDATA%\StringRipper\data,About 里会告诉你用的是哪个。旧版布局会在首次启动时迁移进来:exe 旁边的 1.3.0 文件以及拖入的 regex-user-presets.ini 会移入 data,1.2.x 的应用数据会复制一次。
启动时它会检查 GitHub 上有没有新版本(首次运行时询问一次),并且可以就地下载安装,即使装在另一个盘上也没问题。你的预设和已保存的扫描都会保留。如果你选择否,检查就会关闭;手动检查在 About 按钮后面。关闭窗口会取消正在进行的更新。
读取窗口重叠可以保证命中结果完整,而不会多出一个被截断的副本。来自不同来源的命中保持分开(GUI 列表会把同一值的重复项折叠成一行,导出则全部保留);分组按 Z-A 排序。
URL 模式识别 http/https、ftp、ws、rtsp、rtmp、mms、udp 等。我故意让 URL 检测器挑一点。主机名必须看起来像真的,这样包含 :// 的随机内存垃圾就不会淹没结果。
长文本段也会被搜索;URL scheme 能扛住前面多余的字母,重定向链接里编码过的 URL 也能找到,UTF-16 在两种字节对齐下都能读取。
正则模式内置了常见内容的预设:email、IPv4/IPv6、GUID、API key、文件路径、下载 URL……或者你也可以用自己的 ECMAScript 正则。
StringRipper 始终以 URL 模式启动。在正则模式下,自定义字段初始为空,旁边的下拉列表按你的顺序列出预设,点一下即可应用。把 regex-user-presets.ini 放到 exe 旁边,首次启动时它会被移入 data。Edit user presets... 可以创建、编辑、校验并保存预设,包括解码器和内置开关。列表带编号;Up、Down 和 Sort A-Z 用来设定顺序,Save all 之后文件和下拉列表都会遵循这个顺序。未保存的编辑会一直保留,直到你保存或放弃。编辑器可以调整大小和最大化;它打开期间主窗口在任务栏等待,关闭后恢复。
预设可以带示例行。Test sample 会用粘贴的文本(2048 字符,不保存)跑一遍模式,Run saved cases 检查每一条已保存的行,Add to profile 把预设叠加成一次扫描。
每次保存都先写入临时文件,旧文件保留为 regex-user-presets.ini.bak。ini 损坏时会从它恢复。构建版本只在没有文件时才放入起始文件。
每个预设一个 section,只有 Regex 是必填的。文件里反斜杠要写成双份,\n 和 \r 代表换行。编辑器会帮你做转义。
[Regex User Preset: Support ticket IDs] Description=Find ticket references such as TKT-123456. Regex=\bTKT-[0-9]{6}\b Positive=TKT-123456 Negative=ABC-123456 ASCII=1 UTF-16=1 HEX=0 BASE64=0 ESCAPED=1 Custom=1 Email、IPv4、IPv6、GUID、APIKey、Filepath 和 Download 用来打开(1)或关闭(0)对应的内置模式。
Workspace... 把扫描会话保存在本地 SQLite 文件里(exe 旁边的 data\workspace.sqlite),可以并排比较两个会话(新增、移除、未变),并保存命名任务:来源、配置、文件过滤、实时间隔。进程任务会跨重启跟随程序名;旧的仅 PID 任务需要重新保存。常用进程和路径也放在那里,忽略列表也一样。Dashboard 按模式、来源和编码统计发现结果。任何东西都不会离开你的机器。
直接的 ASCII/UTF-16 命中以及未转义的命中会带上文件偏移或内存地址、一点上下文,以及像 (?<version>...) 这样的命名捕获。双击命中查看详情,右键可以检查字节、打开源文件或收藏来源。字节检查器用三个同步滚动的窗格显示偏移、hex 和 ASCII,所以在 hex 或 ASCII 窗格里选中复制时只复制内容本身,不带偏移或分隔符。它从命中位置周围 4 KiB 开始并标记命中处,往两边各再加载 4 KiB。解码得到的 Base64/hex 命中不声明偏移。
右键一个命中,可以忽略其主机或仅忽略该值,它会从列表中消失。Ignore list 标签可以开关它,状态行会统计它隐藏了多少。不会删除任何东西,导出只反映你看到的内容。Edit ignore list...(同一菜单)每行一条规则: microsoft.com 该主机及其所有子域 telemetry 匹配该模式的值,支持 * 和 ? =https://x.y/z 精确匹配该值
注释
大小写不敏感。CLI 通过 --ignore 接受同样的规则,可重复使用。
(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。