Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
refinery — 高辛烷值分流分析 | Kitploit
工具/GitHubGitHub/binref/refinery
逆向工程取证分析恶意软件分析密码学实用工具与框架二进制分析威胁情报
GitHubbinref/refinery

refinery

高辛烷值分流分析

查看仓库
86780242天前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Binary Refinery

[Documentation][docs] [Test Status][tests] [Code Coverage][codecov] [PyPI Version][pypi]

  __     __  High Octane Triage Analysis          __
  ||    _||______ __       __________     _____   ||
  ||    \||___   \__| ____/   ______/___ / ____\  ||
==||=====||  | __/  |/    \  /==|  / __ \   __\===]|
  '======||  |   \  |   |  \_  _| \  ___/|  |     ||
         ||____  /__|___|__/  / |  \____]|  |     ||
=========''====\/=========/  /==|__|=====|__|======'
                         \  /
                          \/

Binary Refinery™ 是一系列 Python 脚本的集合,用于实现二进制数据的转换,例如压缩和加密。 我们通常将其简称为 refinery,这也是对应软件包的名称。 这些脚本被设计为仅从 stdin 读取输入并将输出写入 stdout。 其核心理念是每个脚本都应是一个单元,即只完成 一项 工作, 而各个单元可以通过命令行上的管道操作符 | 组合成 管道,以执行更复杂的任务。 该项目的主要关注点是恶意软件分类分析, 并尝试在命令行上实现类似 CyberChef 的功能。

简短版本

创建一个 Python 虚拟环境。你需要 Python 3.11 或更高版本。像这样安装 refinery:

python -m pip install -U pip
python -m pip install -U binary-refinery[extended]

使用 -h 运行单元以了解其工作原理,通过 [docs][] 进行 grep 搜索,或使用 binref 命令来查找它们。 如果你想观看实际演示,请观看[最近的视频][VOD3]。 但同时也请阅读本 readme 的其余部分。

发布计划

没有固定的发布计划,但发布非常频繁,建议定期更新。 错误修复不会在 GIT 之外记录,但所有其他更改(即新功能)都记录在变更日志中。 在 [Mastodon][] 上关注我,以获取有关特别重要版本的更新。

文档

使用 -h 或 --help 开关执行单元时显示的帮助文本是其主要文档。 [自动生成的文档][docs]在顶层包含了每个单元该输出的汇编, 但也包含了该工具包三个基本概念的规范: [分帧][frame]、[multibin 参数][argformats]和[元变量][meta]。 每个单元的描述和帮助文本的全文搜索也可在命令行上通过提供的 binref 命令获得。鉴于参考文档可能有些枯燥, 我们正在努力制作一系列教程;我非常推荐你去看看。 除此之外,我还在下面收集了额外的资源(包括一些第三方制作的资源)。

[!NOTE]
Refinery 仍处于 alpha 阶段,接口有时会发生变化, 即单元和参数可能会被移除或重命名。 因此,旧视频和博客文章中的特定命令行可能不再有效。

  • [2021/08] [OALabs][OA] 非常友好地让我[在专题视频中演示该工具包][VOD1]。 在视频中,我基本上按照 第一个教程的内容进行操作。
  • [2021/11] [Johannes Bader][JB] 写了一篇关于使用 binary refinery 分析恶意垃圾邮件的精彩[博客文章][BLOG]。
  • [2024/03] [Malware Analysis For Hedgehogs][MH] 制作了[一个关于使用 refinery 解包 XWorm 样本的视频][VOD2]。
  • [2024/11] [the CyberYeti][CY] 邀请我[在直播中展示 refinery][VOD3]。
  • [2025/06] 我再次[与][CY] [the CyberYeti][CY] [一起直播][VOD4],这次的内容更加原始。 你在这里看到的所有 bug 都已修复。😉

展示内容再次包括下面示例部分中的样本以及教程。

许可证

Binary Refinery 版权 (c) 2019 Jesko Hüttenhain,根据 [3-Clause BSD License][license] 发布。 此仓库还包含完整许可证文本的副本。 如果你想做本许可证未涵盖的事情,请随时联系作者。

警告与建议

Refinery 需要至少 Python 3.11。 建议将其安装到自己的[虚拟环境][venv]中: 该软件包可能会引入大量依赖项, 将其安装到全局 Python 中容易产生版本冲突。 此外,由于该工具包引入了大量新命令, 这些命令在某些系统上很可能会发生冲突, 将它们保存在单独的虚拟环境中是防止这种情况的一种方法。

如果你希望所有 refinery 命令始终在 shell 中可用(即无需切换到自定义虚拟环境), 你也可以选择为安装指定一个 前缀, 该前缀将被添加到所安装的每个命令 shim 的前面。 例如,如果你选择 r. 作为前缀,那么 [emit][] 单元将被安装为命令 r.emit。 额外的好处是,你可以输入 r. 并连按两次 Tab 来获取所有可用 refinery 命令的列表。 但请注意,文档中不假定任何前缀,并且 refinery 的开发目标是在大多数系统上_不_发生冲突。 作者不使用前缀,并提供此选项作为安全措施。

安装

安装和更新 refinery 最直接的方法是通过 pip。 首先确保你运行的是最新版本:

python -m pip install -U pip

然后直接安装 refinery 包:

pip install -U binary-refinery

如果你想为所有单元选择前缀,可以通过环境变量 REFINERY_PREFIX 指定。 例如,以下命令将在 Linux 上将 refinery 安装到当前 Python 环境中,前缀为 r.:

REFINERY_PREFIX=r. pip install -U binary-refinery

在 Windows 上,你需要运行以下命令:

set REFINERY_PREFIX=r.
pip install -U binary-refinery

指定特殊前缀 ! 将导致完全不创建 shell 命令, 并且 binary refinery 将仅作为库安装。 如果你想安装当前的 refinery HEAD,可以重复上述所有步骤,指定此仓库而不是 pip 包。 例如,以下命令将安装最新的 refinery 提交:

pip install -U git+git://github.com/binref/refinery.git

最后,如果你使用的是 [REMnux][remnux-main],你可以使用他们的 [refinery docker 容器][remnux]。

Claude Skill 安装

如果你想教你本地的恶意软件分析 [claude][] 使用 binary refinery,请查看 [Binary Refinery Skill][agent]。

Shell 支持

以下是当前对各种 shell 环境支持情况的总结:

Shell平台状态备注
BashPosix🔵 良好作者偶尔使用。
CMDWindows🔵 良好作者广泛使用。
PowerShellWindows🟡 合理[只要 PowerShell 版本至少为 7.4,它就能正常工作。][psh1]
ZshPosix🟠 小问题经过[讨论][zsh1]后,有一个[修复][zsh2]。
FishPosix🟠 小问题参见 issue [#55][fsh1] 和讨论 [#22][fsh2]。

如果你使用的是其他 shell 并有反馈要分享,请告诉我!

模块化依赖

有一些非常情境化的单元带有(有时很大的)外部依赖。 例如,[stego][] 是一个需要图像解析库 Pillow 的单元。 为了将 refinery 的安装时间保持在首次用户的合理水平,某些库默认不安装。 当缺少依赖时,相应的单元会告诉你该怎么做:

$ emit config.png | stego RG
(13:37:00) failure in stego: dependency Pillow is missing; run pip install Pillow

然后你可以手动安装这些缺失的依赖。 如果你不想被缺失的依赖困扰,并且不介意较长的 refinery 安装时间,可以按如下方式安装软件包:

pip install -U binary-refinery[all]

这将在必需依赖的基础上安装_所有_依赖。 更准确地说,有以下额外的类别可用:

名称包含的依赖
default合理依赖的推荐选择,作者的选择
extended扩展选择,仅排除最冷门的依赖
all所有 refinery 单元的所有依赖

这些按升序列出,即 extended 将安装 default 会安装的所有内容。

前沿版本

或者,你可以克隆此仓库并使用脚本 update.sh(在 Linux 上)或 update.ps1(在 Windows 上)将 refinery 包安装到本地虚拟环境中。 此方法的安装和更新过程就是简单地运行脚本:

  • 它拉取仓库,
  • 激活虚拟环境,
  • 卸载 binary-refinery,
  • 然后安装 binary-refinery[all]。

生成文档

你也可以在本地生成所有文档。 为此,请执行 run-pdoc3.py 脚本。 除非你在已将 binary refinery 作为 Python 包安装的环境中运行它,否则这将失败。 要运行它,你必须将虚拟环境的路径指定为 run-pdoc3.py 的第一个命令行参数, 这将导致脚本使用该环境的解释器再次运行自身。 如果你确定要运行 run-pdoc3.py, 有一个命令行开关可以强制脚本使用当前默认的 Python 解释器运行。 该脚本安装 [pdoc3 包][pdoc3] 并使用它为 refinery 包生成 HTML 文档。 然后可以在本 readme 文件旁边的 html 子目录中找到文档。

教程是 Jupyter notebook,如果你的虚拟环境[安装了 Jupyter][jupyter],你可以直接运行和执行它们。 值得指出的是,[Visual Studio Code 对 Jupyter 有非常舒适的支持][jupyter-vscode]。

示例

基本示例

单元 [emit][] 和 [dump][] 扮演特殊角色: 前者用于输出数据,后者用于将数据转储到剪贴板或磁盘。 例如,考虑以下管道:

emit M7EwMzVzBkI3IwNTczM3cyMg2wQA | b64 | zl | hex 

这里,我们输出字符串 M7EwMzVzBkI3IwNTczM3cyMg2wQA, 使用 [b64][] 对其进行 base64 解码, 使用 [zl][] 对结果进行 zlib 解压缩, 最后对解压缩后的数据进行 [hex][] 解码。 默认情况下,每个单元执行某种转换的_“解码”_操作,但其中一些也实现了反向操作。 如果实现了,总是通过提供命令行开关 -R 或 --reverse 来完成。 你可以使用以下命令生成上述 base64 字符串,因为 [hex][]、[zl][] 和 [b64][] 都提供反向操作:

emit "Hello World" | hex -R | zl -R | b64 -R

给定一个包含 base64 编码有效载荷缓冲区的文件 packed.bin,以下管道将所述有效载荷提取到 payload.bin:

emit packed.bin | carve -l -t1 b64 | b64 | dump payload.bin

[carve][] 单元可用于从输入缓冲区中雕刻出数据块, 在这种情况下,它查找 base64 编码的数据,按长度排序(-l)并返回其中的第一个(-t1), 即从 packed.bin 中雕刻出最大的看起来像 base64 的数据块。 然后对数据进行 base64 解码并转储到文件 payload.bin。

单元 [pack][] 将从文本缓冲区中选取所有数字表达式并将其转换为二进制表示。 一个简单的例子是管道

emit "0xBA 0xAD 0xC0 0xFF 0xEE" | pack | hex -R 

它将输出字符串 BAADC0FFEE。

简短精悍

下载工具