Compare two binaries byte by byte and export a deterministic patch locked to SHA-256. Apply, undo and verify entirely in your browser.
Text diff tools give up at the first non-printable byte. This one works on the bytes directly: load two artifacts, get a deterministic comparison, navigate the changes, and export a patch that is cryptographically bound to the file it was built from.
The diff is expressed as a sequence of copy and insert operations, which is what makes it deterministic and what makes the patch format compact. Alongside that you get a similarity score, an estimate of how many bytes changed, an operation list you can step through, and a same-offset byte preview so you can see the before and after side by side at any position.
For most real comparisons the operation list is the useful view. A recompile of the same source produces a long copy, a short insert where a timestamp or build ID moved, and another long copy. A genuinely different binary produces a shredded operation list. You can usually tell those apart in seconds, before looking at a single byte.
An exported patch uses the inventivehq-binary-patch/v1 JSON format and records the SHA-256 of both the source and the target. Applying it verifies the source hash first. Apply it to the file it was built from and you get a result whose hash matches the recorded target. Apply it to anything else and it is rejected rather than producing quiet corruption.
That property is the point of the tool. A patch that silently applies to the wrong input is worse than no patch, because the damage shows up later and somewhere else.
Patches run in both directions. A reverse patch takes the target back to the source, which is what you want when you are testing whether a change is the one causing a regression.
This release compares bytes. It does not understand executable sections, so inserting a few bytes near the start of a file can shift everything after it and produce a diff that looks enormous for a small logical change. It does not match functions across builds, does not diff semantically, and does not know that two different instruction encodings mean the same thing.
Section-aware and entropy-aware diffing, along with native semantic diffing and function matching, are deliberately scoped as later work rather than half-implemented here. For now, if a diff looks implausibly large, check whether an early insert shifted the alignment before concluding the files are unrelated.
Two files compiled from identical source rarely produce an empty diff. Build timestamps, embedded paths, GUIDs, module IDs and signature blobs all move between builds, and each one shows up as a small insert. A handful of tiny operations scattered through a long copy is the normal signature of a rebuild, not evidence that something changed.
Alignment is the other common trap. Insert four bytes near the front of a file and every subsequent offset shifts, so a byte-level comparison reports a large fraction of the file as different even though almost nothing changed logically. When the similarity score looks implausibly low, step to the first operation: if it is an early insert followed by one enormous copy at a shifted offset, the files are closely related and the raw percentage is misleading.
Signed binaries deserve their own note. The signature blob sits at the end of the file and changes completely whenever anything before it changes, so it will always appear as a large trailing difference. Use the certificate table offset from the Executable & Object Inspector to identify that range and read the diff before it.
Comparison is bounded in both input size and operation count, and imported patches are schema-validated and size-limited before anything is applied. Patched output lands in the Binary Lab workspace as a derived artifact that references its parent, so you can send the result straight into the Executable & Object Inspector or the disassembler without saving anything to disk.
A patch records the exact base and target size and SHA-256. Application refuses the wrong base, bounds-checks every operation, and hashes the reconstructed target.
Generate a reverse patch while both artifacts are loaded. It uses the former target as the hash-locked base and reconstructs the former base.
No. It uses the versioned inventivehq-binary-patch JSON format so operations and cryptographic identities remain inspectable and portable.
Free online hex editor and binary file viewer. Upload a file to view and edit raw bytes in hex/ASCII, inspect int/float/string values with endianness, search hex or text, and export. 100% client-side.
Keep binary artifacts, hashes, notes, findings, derived files, and analysis-tool handoffs together in a private browser workspace.
Generate MD5, SHA-1, SHA-256, and SHA-512 hashes from text or files. HMAC support, multiple output formats, 100% client-side.
Inspect PE, ELF, Mach-O, universal binaries, and Unix archives with bounded parsers, sections, imports, exports, mitigations, signatures, and suspicious regions.