refinery is an open-source collection of Python command-line units, distributed as a pip package, that transform binary data through operations like decompression, decryption, and carving, chained together with the pipe operator into pipelines. It is run from the terminal, one unit per job, and is aimed at malware analysts doing triage work rather than automated pipeline integration. Its README describes it as an attempt to build something like CyberChef for the command line, giving reverse engineers a scriptable equivalent to that browser tool's recipe-based transforms. Typical pipelines decode base64 or XOR-obfuscated payloads, carve embedded PE files, list PE sections with hashes, or extract IOCsIOCsAn indicator of compromise, an observable clue that may point to malicious activity, such as a suspicious file hash or domain. It is evidence to investigate, rather than proof by itself. recursively from a directory of samples. First committed in 2019 and still under heavy development, with 24 contributors and over two thousand commits in the past year.
What is actually hiding inside this blob of base64 or XOR-obfuscated data?
pipes the sample through decoding and decompression units chained with the pipe operator, peeling one encoding layer per unit until the plaintext or embedded file falls out
Is there a Windows executable buried inside this sample?
carves the payload out by scanning for PE headers and structure, pulling the embedded binary out of the surrounding bytes without needing to know its offset in advance
What sections does this PE file have, and have I seen them before?
lists every section with its computed hash, so sections can be diffed or matched against known-good or known-bad samples
What indicators of compromise are scattered across this pile of samples?
recurses through a directory, running the same extraction pipeline against every file and collecting the indicators it finds along the way
What key or byte was used to obfuscate this payload?
brute-forces single-byte XOR (or tries a supplied key against AES-CBC with a PBKDF2-derived key) and reports which one produces recognizable output, such as a carved PE
Can I reconstruct the exact sequence of transforms that unpacked this sample?
expresses the whole decode as one chained command of single-purpose units, so the pipeline itself becomes the documented, rerunnable record of how the payload was unpacked
41 capabilities
· 4 backed by code, an API document or a real run
Built from refinery's releases, docs, README and our own runs.
“Seen” marks the month we first spotted a release the vendor didn't date.
Group names and tags are our labels.
+Cryptographic transformationsshippedProvides units for various cryptographic operations including XOR, RSA, RNCryptor, HMAC, and multiple cipher algorithms (HC128, RABBIT, Salsa, ChaCha).23 releases · 3 other sources · first seen Jan 2020▸
The units xsalsa, xchacha, and chacha20poly1305 were added. The latter only performs the decryption part of the scheme.
0.7.6 · Oct 2024
· source
· release history
autoxor key scaling method adjusted for larger keys to reduce false positives in scanning results.
0.7.4 · Oct 2024
· source
· release history
Improves the capabilities of the vbastr unit.
0.6.24 · Nov 2023
· source
· release history
salsa and chacha units accept a 64-byte key for full initial state matrix initialization
0.6.14 · Oct 2023
· source
· release history
All stream cipher units now support the --discard option to drop initial keystream bytes.
0.6.8 · May 2023
· source
· release history
example
Scan an encrypted file using the new speck cipher unit.$ refinery -u speck cipher.bin
0.8.2 · Jan 2025
· source
Scan for NetBIOS names embedded in binary data.$ refinery --unit netbios <input_file>
0.2.1 · Jun 2020
· source
Instantiate an XOR unit using a raw byte string key directly in code$ xor(B's3cr3t')
0.1.0 · Jan 2020
· source
+Binary and archive carvingshippedExtracts specific file formats such as ZIP, XML, JSON, and PE sections directly from raw binary buffers or streams.19 releases · 3 other sources · first seen Feb 2020▸
release
19 total
Adds strarray pattern support in the carve unit for matching arrays of strings
0.9.5 · Oct 2025
· source
· release history
Adds --stripspace argument support to csb and csd shortcuts for carve.
0.8.14 · Apr 2025
· source
· release history
Adds the rtfc unit for file carving operations.
0.8.14 · Apr 2025
· source
· release history
Adds the xtpdf unit for extracting embedded objects from PDF documents.
0.4.7 · Nov 2021
· source
· release history
Adds an option to xtpyi to unpack but not decompile PYZ contents.
0.4.5 · Oct 2021
· source
· release history
Adds the xtvba unit to extract Office document macros.
0.4.4 · Aug 2021
· source
· release history
example
Strip whitespace from the output of a carve operation using the new argument.$ refinery csb <input> --stripspace
0.8.14 · Apr 2025
· source
Process XML data using the new xtxml unit$ data | xtxml | str
0.3.30 · Jun 2021
· source
Extract JSON keys using the new xtjson unit$ data | xtjson | str
0.3.30 · Jun 2021
· source
+Archive and container extraction expansionshippedAdds support for extracting content from additional formats including 7Z, ACE, ISO, CPIO, PyInstaller archives, EVTX logs, and MessagePack.17 releases · 4 other sources · first seen May 2021▸
release
17 total
The xt7z unit now reports the archive checksum as checksum rather than crc32 — pipelines referencing crc32 from xt7z will break.
0.11.3 · Oct 2026
· source
· release history
Adds the xtvhd unit to extract files from VHD/VHDX images, available via xt
0.11.2 · Jul 2026
· source
· release history
Adds the xtrar unit for extracting RAR archives.
0.10.2 · Mar 2026
· source
· release history
Adds the xtdmg unit for extracting DMG volumes.
0.10.2 · Mar 2026
· source
· release history
Adds the carve-tar unit for carving TAR files
0.10.0 · Feb 2026
· source
· release history
Allows xtzip unit to extract archives partially and supports --lenient option.
0.9.0 · Sep 2025
· source
· release history
example
Unpack a WIM archive and list its contained files for triage.$ emit payload.wim | xtwim
0.11.3 · Oct 2026
· source
Decompress PKWare archives using the new pkw unit.$ refinery pkw <path_to_pkw_archive>
0.8.21 · Jun 2025
· source
Extract archives created by Smart Install Maker using the new unit.$ refinery xtsim archive.ism
0.8.5 · Feb 2025
· source
Get flattened tabular output from ppjson$ ppjson --tabular input.json
0.3.30 · Jun 2021
· source
+Multi-seed fuzzing sweepverifiedFuzzes a range of seeds in parallel and reports any divergences found across runs.15 releases · 3 other sources · first seen Dec 2019▸
release
15 total
Adds the vcall unit to emulate and call a single function inside an input executable
0.11.2 · Jul 2026
· source
· release history
Switches the speakeasy emulator backend from a fork to speakeasy 2.0
0.11.0 · May 2026
· source
· release history
Adds qr unit for decoding barcodes (especially QR codes).
0.9.0 · Sep 2025
· source
· release history
Adds xtxs unit for extracting data from Microsoft Access databases
0.8.19 · Jun 2025
· source
· release history
Changes standard path formatting in xtxml and xthtml units to simplify filtering elements by tag.
0.8.15 · Apr 2025
· source
· release history
Adds switches to control fuzzy matching behavior in path extractor units
0.6.0 · Apr 2023
· source
· release history
command line
sweep — fuzz a range of seeds and report divergences
0.11.2 · Jul 2026
· command-line history
--workers — parallel worker processes (default: min(8, CPU count))
0.11.2 · Jul 2026
· command-line history
example
Decode QR codes from an image or video stream using the new qr unit.$ refinery --input code.png --unit qr --decode
0.9.0 · Sep 2025
· source
+Meta variable handlingshippedSupports preliminary manipulation of meta variables within pipeline frames.14 releases · 1 other source · first seen Apr 2020▸
release
14 total
Every unit that reports a start meta variable now also reports the matching end offset.
0.11.3 · Oct 2026
· source
· release history
The meta variable kind was renamed to type in xtw and xtpdf — pipelines referencing kind from those units will no longer find the value.
0.11.3 · Oct 2026
· source
· release history
The xtpdf unit metadata paths now end in .json.
0.11.3 · Oct 2026
· source
· release history
The meta variable offset was renamed to start in carve, rex, xtp, xtw, all carve* units, ngrams, perc, vsect, vsnip, and xtasar — pipelines referencing offset will no longer find the value.
0.11.3 · Oct 2026
· source
· release history
Adds pefix unit for fixing PE binary issues
0.8.21 · Jun 2025
· source
· release history
Allows the dedup unit to specify a meta variable for deduplication via a new optional argument
0.7.8 · Nov 2024
· source
· release history
example
Switch legacy trivia unit references to the new name.$ refinery cm <input>
0.3.28 · Mar 2021
· source
+Specialized binary and executable extractionshippedAdds support for extracting resources from various packed or obfuscated executables including AutoIt, Node.js (pkg/nexe), Nuitka, MSI installers with stream metadata, .NET bundles (xtnode/xtdnsfx), and SIMH tapes.8 releases · 5 other sources · first seen Mar 2023▸
release
8 total
Adds the xtinno unit for extracting files from InnoSetup installers
0.8.2 · Jan 2025
· source
· release history
binref command changes default search logic to conjunctive
0.8.0 · Dec 2024
· source
· release history
Enables xtmsi unit to extract all MSI tables as CSV alongside the JSON blob
0.7.8 · Nov 2024
· source
· release history
Adds the httprequest unit for parsing HTTP requests.
0.7.7 · Nov 2024
· source
· release history
The pym unit was added which provides an interface to Python's marshal serialization.
0.7.6 · Oct 2024
· source
· release history
Adds optional argument to reduce to consume only a limited number of chunks instead of processing all available data
0.6.28 · Feb 2024
· source
· release history
example
Extract files from an InnoSetup installer using the new xtinno unit.$ refinery -u xtinno setup.exe
0.8.2 · Jan 2025
· source
Extract files from a Nuitka-compiled Python executable to inspect the bundled archive content.$ refinery xtnuitka compiled_app.exe
0.6.11 · Sep 2023
· source
Extract contents of an MSI installer and get its streams as JSON$ refinery -i app.msi xtmsi
0.6.4 · May 2023
· source
Extract files from a Node.js binary packed by pkg or nexe$ refinery xtnode payload.exe -o output_dir
0.6.3 · Apr 2023
· source
Specify the segment size for rc5 or rc6 when using CFB mode.$ refinery rc5 --segment-size 8 <input_file>
0.5.10 · Mar 2023
· source
+PE and ELF section analysisshippedExtracts and parses sections from PE, ELF, and MachO executable formats.10 releases · 2 other sources · first seen Aug 2020▸
release
10 total
Simplifies modular dependency system with new options: default, extended, and all
0.10.6 · Mar 2026
· source
· release history
Adds vmemref and vstack units (experimental)
0.5.2 · Dec 2022
· source
· release history
vaddr unit added to convert virtual addresses to file offsets
0.5.0 · Nov 2022
· source
· release history
The pemeta unit now also displays the module name stored in the export directory.
0.4.49 · Nov 2022
· source
· release history
example
Parse PE CDB debug info using the new pecdb unit.$ refinery pecdb <path_to_pe_file>
0.8.21 · Jun 2025
· source
View PE header data in a tabular format for quick review.$ refinery pemeta --view table input.exe
0.3.28 · Mar 2021
· source
+NET resource extractionshippedExtracts strings and resources from ConfuserEx obfuscated and managed .NET binaries.7 releases · 4 other sources · first seen Feb 2020▸
release
7 total
The qr unit can no longer parse arbitrary bar codes but is restricted to QR codes.
0.10.2 · Mar 2026
· source
· release history
Reworks dnfields unit to extract prettier paths based on method, type, and namespace
0.8.6 · Mar 2025
· source
· release history
Adds a reverse operation to the csv unit to convert simple JSON documents back to CSV format
0.6.4 · May 2023
· source
· release history
Adds the xlmdeobf unit, wrapping XLMMacroDeobfuscator to extract and deobfuscate Excel V4 macros
0.4.21 · Feb 2022
· source
· release history
xtpyi unit extracts Python disassembly when decompilation fails.
0.4.13 · Dec 2021
· source
· release history
dnmr unit was added for unpacking managed .NET resources
0.2.1 · Jun 2020
· source
· release history
example
Process hard-coded arrays from a .NET binary with the new dnarrays unit.$ refinery -u dnarrays assembly.dll
0.8.2 · Jan 2025
· source
Convert a simple JSON array of objects into CSV format using the reverse csv operation$ echo '[{"a":1}]' | refinery -i - csv --reverse
0.6.4 · May 2023
· source
Run the new deobfuscation pipeline on a suspicious script file.$ refinery deob-vba -i malware_sample.vbs
0.4.27 · Mar 2022
· source
Extract and deobfuscate Excel V4 macros to analyze potential malicious payloads in a suspicious spreadsheet.$ refinery xlmdeobf <input_file.xlsx>
0.4.21 · Feb 2022
· source
+Structural data manipulation and routingshippedProvides units for conditional processing, queuing chunks in frames, looping multibin suffixes, picking specific frame chunks, and utilizing regular expression handlers or switches for control flow.11 releases · first seen Feb 2024▸
release
11 total
Adds --try as a new global option to forward input when a unit fails to process it
0.10.0 · Feb 2026
· source
· release history
Adds b2f unit as a shortcut for pick ::-1
0.8.19 · Jun 2025
· source
· release history
Adds a named date regular expression pattern available inside xtp expressions.
0.8.14 · Apr 2025
· source
· release history
The ps1str unit has been renamed to escps
0.8.6 · Mar 2025
· source
· release history
Adds escvb unit to escape and unescape Visual Basic strings
0.8.6 · Mar 2025
· source
· release history
Adds input forward format character to rex for improved common use case support
0.8.6 · Mar 2025
· source
· release history
+Enhanced data parsing and conversionshippedAdds support for reading interlaced integers, extracting unparsed remainder data from structures, performing case-insensitive trimming, and converting JSON arrays to CSV formats.7 releases · 3 other sources · first seen May 2023▸
Also counts toward: CSV data export
release
7 total
The csv unit now outputs minified JSON.
0.11.3 · Oct 2026
· source
· release history
Makes path extraction units match paths case-insensitively when unambiguous
0.7.8 · Nov 2024
· source
· release history
Adds support for aPLib compressed data with headers.
0.7.7 · Nov 2024
· source
· release history
xtmsi unit now extracts embedded CAB files
0.7.1 · Sep 2024
· source
· release history
Isolates the path formatting feature in the xthtml and xtxml units
0.6.16 · Oct 2023
· source
· release history
trim unit performs case-insensitive trimming via new behavior
0.6.14 · Oct 2023
· source
· release history
example
Deduplicate extracted fields based on a specific meta variable rather than the entire record.$ refinery --unit dedup --args "--meta_field id" --input logs.txt
0.7.8 · Nov 2024
· source
Extract remaining unparsed data after structure matching using the new --more flag.$ refinery in -u struct:header --more payload.bin
0.6.15 · Oct 2023
· source
Convert a simple JSON array of objects into CSV format using the reverse csv operation$ echo '[{"a":1}]' | refinery -i - csv --reverse
0.6.4 · May 2023
· source
+Encoding and hashing utilitiesshippedProvides units for base85, base32, and various hashing algorithms including SHA256, MD5, MD2, and MD4.9 releases · 1 other source · first seen Mar 2020▸
ripemd160 and ripemd128 units added for RIPEMD hash calculations
0.4.22 · Feb 2022
· source
· release history
Improves hexload unit (formerly hexdmp) with better pattern matching
0.4.6 · Oct 2021
· source
· release history
example
Calculate RIPEMD-256 hash of a file's contents using the new ripemd160 unit.$ cat data.bin | ripemd160
0.4.22 · Feb 2022
· source
+Structured data parsingshippedParses structured binary or text formats using the `struct` unit with meta variable support.8 releases · 1 other source · first seen Mar 2021▸
release
8 total
In struct, the format modifier !0 now reads a bit field and : was added as a prefix option for peeking — existing struct format strings using !0 for other purposes will behave differently.
0.11.3 · Oct 2026
· source
· release history
The pd and pb path handlers lost their separator argument and now always split on both slash and backslash — any invocation passing a separator argument will break.
0.11.3 · Oct 2026
· source
· release history
In struct, the format modifier !0 now reads a bit field and : was added as a prefix option for peeking a value.
0.11.3 · Oct 2026
· source
· release history
Adds the --more option to the struct unit for unparsed rest data
0.6.15 · Oct 2023
· source
· release history
struct unit gains new syntax for byte alignment handling
0.4.22 · Feb 2022
· source
· release history
resub now strips whitespace from input by default
0.4.20 · Feb 2022
· source
· release history
example
Extract remaining unparsed data after structure matching using the new --more flag.$ refinery in -u struct:header --more payload.bin
0.6.15 · Oct 2023
· source
+Advanced cryptographic key management and modesshippedSupports advanced configuration for block ciphers (e.g., xxtea, rc5/rc6 segment sizes), stream cipher keystream discard, big-endian support, and full state matrix initialization for ChaCha/Salsa.5 releases · 4 other sources · first seen Mar 2023▸
Also counts toward: Command-line interface
release
The units xsalsa, xchacha, and chacha20poly1305 were added. The latter only performs the decryption part of the scheme.
0.7.6 · Oct 2024
· source
· release history
salsa and chacha units accept a 64-byte key for full initial state matrix initialization
0.6.14 · Oct 2023
· source
· release history
All stream cipher units now support the --discard option to drop initial keystream bytes.
0.6.8 · May 2023
· source
· release history
Adds --block-size argument to xxtea unit to enable block cipher mode
0.5.10 · Mar 2023
· source
· release history
Adds --swap flag to tea and xtea units to switch endianness
0.5.10 · Mar 2023
· source
· release history
example
Configure xxtea to operate as a block cipher with a specific size (e.g., 128 bits).$ refinery xxtea --block-size 128 <input_file>
0.5.10 · Mar 2023
· source
Specify the segment size for rc5 or rc6 when using CFB mode.$ refinery rc5 --segment-size 8 <input_file>
0.5.10 · Mar 2023
· source
Process tea data with big endian byte order instead of the default little endian.$ refinery tea --swap <input_file>
0.5.10 · Mar 2023
· source
Decrypt AES-CBC with PBKDF2-derived key$ emit data | aes --mode cbc --iv cut::16 pbkdf2[32,s4lty]:swordfish
+Windows registry data extractionshippedReads Windows registry hives from file paths.6 releases · 3 other sources · first seen Dec 2019▸
release
ngrams and bruteforce units added for simple brute forcing tasks
0.6.14 · Oct 2023
· source
· release history
Adds --swap flag to tea and xtea units to switch endianness
0.5.10 · Mar 2023
· source
· release history
Adds support for extracting data from Windows registry editor exports (.reg files) through the winreg unit
0.4.14 · Dec 2021
· source
· release history
Adds dexstr unit for string decoding operations.
0.4.13 · Dec 2021
· source
· release history
Adds brieflz support to the universal decompress unit
0.3.24 · Feb 2021
· source
· release history
Adds the winreg unit to read Windows registry hives, adding a dependency on python-registry.
0.0.5 · Dec 2019
· source
· release history
example
Process tea data with big endian byte order instead of the default little endian.$ refinery tea --swap <input_file>
0.5.10 · Mar 2023
· source
Analyze Windows Event Log files using the new evtx unit.$ refinery run 'evtx' < event.evtx
0.4.6 · Oct 2021
· source
Read Windows registry hives from a file path.$ refinery winreg -i system.hiv
0.0.5 · Dec 2019
· source
+Compression and encoding enhancementsshippedAdds LZW decompression support and improves base85 resilience against whitespace in decoded streams.7 releases · 1 other source · first seen Oct 2023▸
release
7 total
Adds flz unit implementing FastLZ, now included in the universal decompressor.
0.9.0 · Sep 2025
· source
· release history
+Script deobfuscation and analysisshippedProvides parsers, emulators, and specific extraction units for PowerShell, VBA, JavaScript, Batch files, and NSIS scripts.5 releases · 2 other sources · first seen Apr 2026▸
Also counts toward: JavaScript scripting support, Scripting language support
release
Script deobfuscator commands were renamed: js is now djs, ps1 is now dps1, vba is now dvba, and php is now dphp — any pipeline or script using the old names will break.
0.11.3 · Oct 2026
· source
· release history
Renames script deobfuscator commands (js becomes djs, ps1 becomes dps1, vba becomes dvba, php becomes dphp) to remove shadowing of real script interpreters, and improves deobfuscation quality and speed in both djs and dps1.
0.11.3 · Oct 2026
· source
· release history
Adds new capabilities to the script deobfuscation engine
0.11.0 · May 2026
· source
· release history
The old deobfuscation units (deob-ps1-*, deob-vba-*, deob-js-*) have been replaced by new units (ps1, vba, js, defu)
0.10.11 · Apr 2026
· source
· release history
Rewrites deobfuscation system with full parsers and emulators: new ps1, vba, js, and universal defu units replace old deob-ps1-*, deob-vba-*, deob-js-*
0.10.11 · Apr 2026
· source
· release history
example
Deobfuscate a suspicious AutoIt3 script dropped by malware.$ emit suspicious.au3 | dau3
0.11.3 · Oct 2026
· source
Extract and decode largest base64 blob$ emit file.exe | carve -ds b64
+Conditional processing unitsshippedProvides conditional routing and filtering of data streams using `iff`, `iffs`, `iffx`, and `iifp` units.6 releases · first seen Jul 2021▸
release
Adds iffc unit for filtering chunks by size constraints
0.8.19 · Jun 2025
· source
· release history
Adds --iff option to units for format-specific application
0.7.1 · Sep 2024
· source
· release history
Adds an option to the iff unit to check for the existence of a certain meta variable.
0.4.24 · Mar 2022
· source
· release history
New comparison operator switches added to the iff unit
0.4.22 · Feb 2022
· source
· release history
Renames existing conditional units to iff, iffs, iffx, and iifp.
0.3.34 · Jul 2021
· source
· release history
Existing conditional unit names have been renamed: use iff, iffs, iffx, or iifp instead of the previous names.
0.3.34 · Jul 2021
· source
· release history
+External tool integrationshippedWraps external command-line tools within the pipeline using a dedicated unit.5 releases · 1 other source · first seen Mar 2020▸
release
Enables reduce unit to work with multibin suffix
0.7.1 · Sep 2024
· source
· release history
Allows piping a Chunk object directly to a pipeline
0.7.1 · Sep 2024
· source
· release history
Adds the ability to instantiate units via string arguments imported from refinery.shell
0.6.15 · Oct 2023
· source
· release history
Adds the ppjscript unit (wrapper around jsbeautifier) to process JavaScript files.
0.3.17 · Dec 2020
· source
· release history
Adds the couple unit to wrap any stdin/stdout command line tool as a refinery unit
0.1.5 · Mar 2020
· source
· release history
example
Wrap an external tool like file into a refinery pipeline using the new couple unit.$ refinery -u couple,file input.txt
0.1.5 · Mar 2020
· source
+Length-prefixed data parsingshippedParses data structures where the length of the content is specified at the beginning.6 releases · first seen Sep 2020▸
release
trim unit performs case-insensitive trimming via new behavior
0.6.14 · Oct 2023
· source
· release history
Adds min and max units to replace sorted [| pick 0 ] patterns
0.5.2 · Dec 2022
· source
· release history
Allows meta variables in struct formats.
0.3.29 · May 2021
· source
· release history
Adds a count restriction argument to the resplit and resub units to limit match count.
0.3.17 · Dec 2020
· source
· release history
lprefix unit added for parsing length-prefixed data.
0.3.12 · Sep 2020
· source
· release history
+Source code highlightingshippedProvides syntax highlighting for source code on the terminal with various style flavors.5 releases · first seen Nov 2025▸
release
Adds -x switch support for exclusion patterns in all path extraction units
0.11.2 · Jul 2026
· source
· release history
Adds new capabilities to the script deobfuscation engine
0.11.0 · May 2026
· source
· release history
The old deobfuscation units (deob-ps1-*, deob-vba-*, deob-js-*) have been replaced by new units (ps1, vba, js, defu)
0.10.11 · Apr 2026
· source
· release history
Rewrites deobfuscation system with full parsers and emulators: new ps1, vba, js, and universal defu units replace old deob-ps1-*, deob-vba-*, deob-js-*
0.10.11 · Apr 2026
· source
· release history
Adds the hl unit for highlighting source code on the terminal
0.9.9 · Nov 2025
· source
· release history
+XML pretty-printingshippedPretty-prints XML data.3 releases · 2 other sources · first seen Dec 2019▸
release
Adds --block-size argument to xxtea unit to enable block cipher mode
0.5.10 · Mar 2023
· source
· release history
Adds the --tabular option to ppjson to produce a flattened output
0.3.30 · Jun 2021
· source
· release history
Adds the ppxml unit to pretty-print XML data.
0.0.5 · Dec 2019
· source
· release history
example
Configure xxtea to operate as a block cipher with a specific size (e.g., 128 bits).$ refinery xxtea --block-size 128 <input_file>
0.5.10 · Mar 2023
· source
Get flattened tabular output from ppjson$ ppjson --tabular input.json
0.3.30 · Jun 2021
· source
+Execution timeout and parallelism controlsverifiedLets users set a per-program node timeout and the number of parallel worker processes to control throughput and resource use.1 release · 3 other sources · first seen Oct 2023▸
release
Adds the --length option to the snip unit
0.6.15 · Oct 2023
· source
· release history
command line
--timeout — per-program node timeout in seconds (default 5.0)
0.11.2 · Jul 2026
· command-line history
--workers — parallel worker processes (default: min(8, CPU count))
0.11.2 · Jul 2026
· command-line history
example
Quickly list all available binary refinery units for documentation or discovery.$ binref --brief
0.10.3 · Mar 2026
· source
+Seed-based program generationverifiedGenerates a deterministic program from an integer seed, allowing users to inspect or reproduce the program under test.1 release · 3 other sources · first seen Jan 2021▸
release
Adds the global --lenient option to admit partial results as output.
0.3.23 · Jan 2021
· source
· release history
command line
gen — print the generated program for a seed
0.11.2 · Jul 2026
· command-line history
Process binary streams while allowing partial output if an error occurs.$ refinery --lenient -h accu,input.bin
0.3.23 · Jan 2021
· source
+Shellcode execution environmentshippedAllows the initialization of virtual stack registers using shell environment variables and the direct execution of shellcode blobs within the pipeline.3 releases · 1 other source · first seen Oct 2023▸
release
vstack unit now supports three emulator engines: unicorn, speakeasy, and icicle (with unicorn as default)
0.8.0 · Dec 2024
· source
· release history
vstack unit can now execute shellcode blobs
0.6.14 · Oct 2023
· source
· release history
vstack registers can be initialized using shell environment variables
0.6.14 · Oct 2023
· source
· release history
example
Use speakeasy engine for vstack emulation instead of the default unicorn$ refinery vstack --engine speakeasy <input_file>
0.8.0 · Dec 2024
· source
+Advanced executable and resource extractionshippedAdds support for extracting specific parts of AutoIt binaries, SetupFactory archives, and calling individual functions within executables.3 releases · first seen Mar 2026▸
release
Adds the vcall unit to emulate and call a single function inside an input executable
0.11.2 · Jul 2026
· source
· release history
Adds the xtsf unit for extracting SetupFactory binaries.
0.10.2 · Mar 2026
· source
· release history
Adds the a3xs unit for extracting only the script part of an AutoIt3 binary.
0.10.2 · Mar 2026
· source
· release history
+PE file cleaning and analysisshippedProvides capabilities to remove unwanted overlays from PE files for static analysis and extract detailed metadata, including resource languages.2 releases · 1 other source · first seen Sep 2023▸
Introduces petrim unit to remove overlays from PE files
0.6.11 · Sep 2023
· source
· release history
example
Clean a PE file by removing unwanted overlays, often used for static analysis or cleanup before further processing.$ refinery petrim target.exe
0.6.11 · Sep 2023
· source
+Java class file disassemblyshippedDisassembles Java class files for inspection.3 releases · first seen Aug 2020▸
release
Extends dnfields unit to extract string fields assigned a unique value.
0.4.27 · Mar 2022
· source
· release history
Redesigns asm unit using an Angr-based fallback for better disassembly
0.4.6 · Oct 2021
· source
· release history
Adds jvdasm unit for disassembling Java class files.
0.3.2 · Aug 2020
· source
· release history
+URL guard supportshippedDecodes or processes URLs guarded by third-party services such as ProofPoint and TrendMicro.3 releases · first seen Jan 2020▸
release
Enables pcap-http unit to extract source URLs from downloaded data
0.4.6 · Oct 2021
· source
· release history
Adds TrendMicro Clicktime URL guard support in the urlguards unit
0.1.2 · Feb 2020
· source
· release history
The urlguards unit now supports ProofPoint V3 guarded URLs
0.1.0 · Jan 2020
· source
· release history
+PE file carvingshippedExtracts carved PE files from raw binary input.2 releases · 1 other source · first seen Dec 2019▸
Also counts toward: Command-line interface
release
Converts the carve-pe unit to a path extractor unit, adding new command-line options.
0.3.21 · Jan 2021
· source
· release history
Adds the carve-pe unit to extract carved PE files from binary streams.
0.0.5 · Dec 2019
· source
· release history
example
Extract carved PE files from raw binary input.$ refinery carve-pe < input.bin
0.0.5 · Dec 2019
· source
+Email parsing capabilitiesshippedExtracts bodies, attachments, and headers from Outlook and MIME email formats.3 releases · first seen Mar 2020▸
Also counts toward: JSON data export
release
message type attachments in Outlook email formats are now supported by xtmail
0.3.9 · Aug 2020
· source
· release history
xtmail unit can extract headers in text and json format
0.2.1 · Jun 2020
· source
· release history
Adds xtmail unit to extract email body and attachments (Outlook/MIME formats)
0.1.4 · Mar 2020
· source
· release history
+AutoIt3 script deobfuscationshippedDeobfuscates AutoIt3 scripts via the `dau3` unit, enabling analysis of AutoIt3 payloads dropped by malware.1 release · 1 other source · first seen Oct 2026▸
Also counts toward: Scripting language support
release
Adds dau3 script deobfuscator for AutoIt3 scripts, xtwim unit for unpacking WIM archives, xtiex unit for unpacking IExpress setup files, dns unit for parsing DNS packets from PCAPs (used with the pcap and udp units), huffman unit as a low-level option to directly handle huffman-compressed data, batev…
0.11.3 · Oct 2026
· source
· release history
example
Deobfuscate a suspicious AutoIt3 script dropped by malware.$ emit suspicious.au3 | dau3
0.11.3 · Oct 2026
· source
+DNS packet parsing from PCAPsshippedParses DNS packets from PCAP captures to extract queried hostnames, supporting triage of C2 or data-exfiltration domains.1 release · 1 other source · first seen Oct 2026▸
release
Adds dau3 script deobfuscator for AutoIt3 scripts, xtwim unit for unpacking WIM archives, xtiex unit for unpacking IExpress setup files, dns unit for parsing DNS packets from PCAPs (used with the pcap and udp units), huffman unit as a low-level option to directly handle huffman-compressed data, batev…
0.11.3 · Oct 2026
· source
· release history
example
Extract DNS hostnames queried in a PCAP to quickly triage C2 or data-exfil domains.$ emit capture.pcap | pcap | udp | dns
0.11.3 · Oct 2026
· source
+Single-seed reproduction and inspectionverifiedRuns one seed end-to-end so users can reproduce and inspect its behaviour in detail.1 release · 1 other source · first seen Dec 2019▸
release
Adds the winreg unit to read Windows registry hives, adding a dependency on python-registry.
0.0.5 · Dec 2019
· source
· release history
command line
run — reproduce and inspect one seed end-to-end
0.11.2 · Jul 2026
· command-line history
+Robust pipeline execution controlshippedAdds support for forwarding input on unit failure and managing modular dependencies to ensure stable execution.2 releases · first seen Feb 2026▸
Also counts toward: Command-line interface
release
Simplifies modular dependency system with new options: default, extended, and all
0.10.6 · Mar 2026
· source
· release history
Adds --try as a new global option to forward input when a unit fails to process it
0.10.0 · Feb 2026
· source
· release history
+Configuration discovery and managementshippedProvides commands to list available units for documentation and manages modular dependencies with simplified options.1 release · 1 other source · first seen Mar 2026▸
Also counts toward: Command-line interface
release
--brief (-b) flag added to binref command to list all available units for quick reference.
0.10.3 · Mar 2026
· source
· release history
example
Quickly list all available binary refinery units for documentation or discovery.$ binref --brief
0.10.3 · Mar 2026
· source
+Password management for PDFsshippedAllows adding or removing passwords from PDF documents.1 release · 1 other source · first seen Sep 2025▸
release
Adds pdfcrypt unit for removing & adding passwords from & to PDF documents.
0.9.0 · Sep 2025
· source
· release history
+Brute force and pattern generationshippedIntroduces units for generating n-grams and performing simple brute-force tasks on data streams.1 release · 1 other source · first seen Oct 2023▸
release
ngrams and bruteforce units added for simple brute forcing tasks
0.6.14 · Oct 2023
· source
· release history
example
Extract indicators from all files recursively$ ef "**" [| xtp -n6 ipv4 socket url email | dedup ]]
+Mach-O binary extractionshippedEnables the extraction of metadata from Mach-O executables (macOS binaries) to identify libraries or build details.1 release · 1 other source · first seen Sep 2023▸
release
Adds machometa unit to extract Mach-O binary metadata
0.6.11 · Sep 2023
· source
· release history
example
Extract metadata from a Mach-O executable (e.g., macOS binary) to identify libraries or build details.$ refinery machometa target.dylib
0.6.11 · Sep 2023
· source
+Steganography supportshippedExtracts hidden image data from files, formerly part of binpng.1 release · 1 other source · first seen Sep 2020▸
release
binpng unit renamed to stego for more flexible image data extraction.
0.3.12 · Sep 2020
· source
· release history
example
Use the new reduce handler to combine processed segments.$ refinery -h reduce,processed.bin
0.3.23 · Jan 2021
· source
+WIM archive extractionshippedUnpacks WIM archives and lists their contained files via the `xtwim` unit.1 other source · first seen Oct 2026▸
example
Unpack a WIM archive and list its contained files for triage.$ emit payload.wim | xtwim
0.11.3 · Oct 2026
· source
+Barcode decodingshippedDecodes barcodes, including QR codes, from images or video streams.1 release · first seen Sep 2025▸
release
Adds qr unit for decoding barcodes (especially QR codes).
0.9.0 · Sep 2025
· source
· release history
Lines in monospace are the tool's own words: help text
parsed from its source, or an endpoint from its API document. Under
release, a line is our summary of a dated release. Under
docs, it is quoted from the tool's own documentation or
website. Each links back to the source it came from.
Command line
View
Source
No command matches.
load a captured run
composed command
No matchesTry a different search, or clear a filter to see more.
option surface across analysed releases
options at that releaseadded, per releaseremoved, per release
option
found in
since
description
No matchesTry a different search, or clear a filter to see more.
option changes per release — drag across the rail to set a range
→
Values are placeholders taken from each option’s declared default.
Nothing is executed here — the output shown is a recording of a run
that already happened.
Score card
Shipping velocityreleases a month, last 12 months
Documentation qualityrelease-notes rubric, 0–100
Breaking-change disciplinehow rarely a release breaks users, and notice given
Maintenance riskquiet time against its own cadence, maintainers
Innovation & surfacenew capabilities, API and MCP surface
Community health
Contributor trenddistinct committers, this year against last
Maintainer concentrationbus factor now against a year ago
Issue backlog trendissues closed per issue opened, 12 months
Responsivenessmedian time to a maintainer’s first reply
Nine scores for refinery, each built from the releases, notes and API history this site tracks — and, on Researcher and Business, where it stands among every measured tool in its category and how that has moved.
Each score is 0–100 on a published rubric, derived from data this site already shows.
A dimension we cannot measure says so — it is never scored 0 and never enters a rank.
How this is scored
Shipping velocity — releases a month over the last 12 months, on a log scale where 16 a month scores 100. Needs 3 releases in the window.
Documentation quality — the release-notes rubric published on the analytics page, unchanged.
Breaking-change discipline — the share of releases carrying a breaking change (none scores 100, half or more scores 0). Only projects that label breaking changes are measured: a clean record cannot be told from an unlabelled one.
Maintenance risk — quiet time measured against the tool's own release cadence (quiet longer than 90 days and three typical gaps scores 0), plus the number of active maintainers and whether contributors are growing, where known. Higher is lower risk.
Innovation & surface — new capabilities in the feature ledger this year, API and MCP operations added, and the share of commits that are features: the mean of whichever we hold.
Community health (open-source tools only) — each is a direction, not a size: contributors this year against last, the bus factor now against a year ago, and issues closed per issue opened, where steady scores 50, doubled 100 and halved 0; plus the median time to a maintainer's first reply (an hour scores about 100, a month or more 0). A commercial card has no repository and carries none of the four.
Documented delivery (commercial tools) — when a vendor's documented new capabilities have slowed against its own baseline, that counts against the overall standing as heavily as two low dimensions. Steady delivery, or too little history to judge, leaves the standing alone; it is never a sixth score.
Open-source tools are scored on repository signals; commercial tools on their published changelog. Ranks compare tools within one category and one profile and need at least five measured peers; the overall standing needs three ranked dimensions. Best-in-breed or consolidator is a shape, not a quality, and is never scored.
Release-note detail over time
See how much detail refinery puts in its release notes, quarter by quarter, and compare it with tracked tools in the same category. This history uses up to ten retained, reviewed notes per tool; sparse or blank older quarters may reflect that limit.
Issue, contributor and maintainer activity in binref/refinery, 2023-10 – 2026-09,
as of 2026-09-25. Twelve-month figures first; the trend lines run
the whole window.
Contributors5±0 vs prior 12 months
Maintainers1+0 joined · −0 left, last 12 months
Bus factor1committers behind half the commits
Community-filed93%of issues opened, last 12 months
Median time to close3.9 daysfirst maintainer reply 13 hours
Open backlog2of 68 issues ever filed
Issues opened / month0 · 0communitymaintainers
Open backlog2
Contributors / month1
Commits / month271
Stars872
Issue themes, last 12 months
other 100%
Counts from the project's public repository and git history; no individuals
are identified. Maintainers are the committers covering 80% of the last year's
commits. how we measure this
Add the badge to your README
Maintain this project? The badge links readers straight to this page, so they can
follow every release here.