Skip to main content

QBinDiff

QBinDiff is an experimental binary diffing tool addressing the diffing as a Network Alignement Quadratic Problem.

But why developing yet another differ when Bindiff works well?

Bindiff is great, no doubt about it, but we have no control on the diffing process. Also, it works great on standard binaries but it lacks flexibility on some corner-cases (embedded firmwares, diffing two portions of the same binary etc...).

A key idea of QBinDiff is enabling tuning the diffing programmatically by:

  • writing its own feature
  • being able to enforce some matches
  • emphasizing either on the content of functions (similarity) or the links between them (callgraph)

In essence, the idea is to be able to diff by defining its own criteria which sometimes, is not the control-flow and instructions but could for instance, be data-oriented.

Last, QBinDiff as primarily been designed with the binary-diffing use-case in mind, but it can be applied to various other use-cases like social-networks. Indeed, diffing two programs boils down to determining the best alignment of the call graph following some similarity criterion.

Indeed, solving this problem is APX-hard, that why QBinDiff uses a machine learning approach (more precisely optimization) to approximate the best match.

Like Bindiff, QBinDiff also works using an exported disassembly of program obtained from IDA. Originally using BinExport, it now also support Quokka as backend, which extracted files, are more exhaustive and also more compact on disk (good for large binary dataset).

[!NOTE] QBinDiff is an experimental tool for power-user where many parameters, features, thresholds or weights can be adjusted. Obtaining good results usually requires tuning these parameters.

(Please note that QBinDiff does not intend to be faster than other differs, but rather being more flexible.)

[!WARNING] QBinDiff graph alignment is very memory intensive (compute large matrices), it can fill RAM if not cautious. Try not diffing binaries larger than +10k functions. For large program use very high sparsity ratio (0.99).

Documentation

The documentation can be found on the diffing portal or can be manually built with

pip install .[doc]
cd doc
make html

Below you will find some sections extracted from the documentation. Please refer to the full documentation in case of issues.

Installation

QBinDiff can be installed through pip with:

pip install qbindiff

As some part of the algorithm are very CPU intensive the installation will compile some components written in native C/C++.

As depicted above, QBinDiff relies on some projects (also developed at Quarkslab):

  • python-binexport, wrapper on the BinExport protobuf format.
  • python-bindiff, wrapper around bindiff (used to write results as Bindiff databases)
  • Quokka, another binary exported based on IDA. Faster than binexport and more exhaustive (thus diffing more relevant)

Usage (command line)

After installation, the binary qbindiff is available in the path. It takes in input two exported files and start the diffing analysis. The result can then be exported in a BinDiff file format. The default format for input files is BinExport, for a complete list of backend loader look at the -l1, --primary-loader option in the help. The complete command line options are:

 Usage: qbindiff [OPTIONS] <primary file> <secondary file>                                                                                                                                    
                                                                                                                                                                                              
 QBinDiff is an experimental binary diffing tool based on machine learning technics, namely Belief propagation.                                                                               
 Examples:                                                                                                                                                                                    
 - For Quokka exports: qbindiff -e1 file1.bin -e2 file2.bin file1.quokka file2.quokka                                                                                                         
 - For BinExport exports, changing the output path: qbindiff -o my_diff.bindiff file1.BinExport file2.BinExport                                                                               
                                                                                                                                                                                              
╭─ Output parameters ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 --output  -o   Output file path. (FILE) [default: qbindiff_results.csv]                                                                                                
 --format  -ff  Output file format. (bindiff|csv) [default: csv]                                                                                                        
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
╭─ Primary file options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 --primary-loader      -l1  Enforce loader type. (binexport|quokka|ida)                                                                                                
 --primary-executable  -e1  Path to the raw executable (required for quokka exports). (PATH)                                                                           
 --primary-arch        -a1  Enforce disassembling architecture. Format is like 'CS_ARCH_X86:CS_MODE_64'. (TEXT)                                                        
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
╭─ Secondary file options ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 --secondary-loader      -l2  Enforce loader type. (binexport|quokka|ida)                                                                                              
 --secondary-executable  -e2  Path to the raw executable (required for quokka exports). (PATH)                                                                         
 --secondary-arch        -a2  Enforce disassembling architecture. Format is like 'CS_ARCH_X86:CS_MODE_64'. (TEXT)                                                      
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
╭─ Global options ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 --verbose  -v  Activate debugging messages. (-v|-vv|-vvv)                                                                                                             
 --quiet    -q  Do not display progress bars and final statistics.                                                                                                     
 --help     -h  Show this message and exit.                                                                                                                            
 --version      Show the version and exit.                                                                                                                             
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
╭─ Diffing parameters ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 --feature         -f   Features to use for the binary analysis, it can be specified multiple times.                  (<feature>)                                      
                        Features may be weighted by a positive value (default 1.0) and/or compared with a                                                              
                        specific distance (by default the option -d is used) like this <feature>:<weight>:<distance>.                                                  
                        For a list of all the features available see --list-features.                                                                                  
 --list-features        List all the available features.                                                                                                               
 --normalize       -n   Normalize the Call Graph (can potentially lead to a partial matching).                                                                         
 --distance        -d   Available distances: (canberra|euclidean|cosine|haussmann) [default: haussmann]                                                                
 --tradeoff        -t   Tradeoff between function content (near 1.0) and call-graph information (near 0.0). (FLOAT) [default: 0.8]                                     
 --sparsity-ratio  -s   Ratio of least probable matches to ignore. Between 0.0 (nothing is ignored) to 1.0 (only perfect matches are considered) (FLOAT) [default: 0.6]
 --sparse-row      -sr  Whether to build the sparse similarity matrix considering its entirety or processing it row per row.                                           
 --epsilon         -e   Relaxation parameter to enforce convergence. (FLOAT) [default: 0.9]                                                                            
 --maxiter         -i   Maximum number of iteration for belief propagation. (INTEGER) [default: 1000]                                                                  
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
╭─ Passes parameters ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ --pass-feature-hash    Anchor matches when function have the same feature hash.                                                                                       
│ --pass-user-defined    Anchor matches using user defined matches. Format is like 'primary-addr1:secondary-addr2,...'. (TEXT)                                          
│ --pass-flirt-hash      Anchor matches using FLIRT/FunctionID like signatures.                                                                                         
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Quokka example

Quokka exporter needs the path of the executable file so one should also use -e1 and -e2.

$ qbindiff -e1 primary.exe -e2 secondary.exe primary.exe.Quokka secondary.exe.Quokka

Note that we use default values for all parameters, but one can configure the different features used and the various parameters used.

$ qbindiff -e1 primary.exe \
           -e2 secondary.exe \
           -f bnb \             # basic block number
           -f cc:3.0 \          # cyclomatic complexity feature
           -f cst:5.0 \         # feature based on constants
           --maxiter 100 \      # maximum number of iterations 
           primary.exe.Quokka \
           secondary.exe.Quokka

BinExport example

The most simple example generating a diff file in a .BinDiff format is:

$ qbindiff primary.BinExport secondary.BinExport -ff bindiff -o out.BinDiff

Binexport backend used, also relies on capstone for the disassembly of instructions and some features. Thus for some architecture and especially ARM/thumb mode, one should provide the exact disassembly mode using capstone naming for architecture identifier and mode identifiers. Thus to diff two binexport files and specifying the exact architecture one can do:

$ qbindiff primary.BinExport secondary.BinExport -a1 CS_ARCH_ARM:CS_MODE_THUMB -a2 CS_ARCH_ARM:CS_MODE_THUMB

Library usage

The strength of qBinDiff is to be usable as a python library. The following snippet shows an example of loading to binexport files and to compare them using the mnemonic feature.

from qbindiff import QBinDiff, Program
from qbindiff.features import MnemonicTyped
from pathlib import Path

p1 = Program("primary.BinExport")
p2 = Program("secondary.BinExport")

differ = QBinDiff(p1, p2)
differ.register_feature_extractor(MnemonicTyped, 1.0)
# Add other features if you want to

differ.process()

mapping = differ.compute_matching()
output = {(match.primary.addr, match.secondary.addr) for match in mapping}

Citing this work

If you use QBinDiff in your work, please consider to cite it using these references :

@inproceedings{CAIDQBinDiff,
  author    = "Cohen, Roxane and David, Robin and Mori, Riccardo and Yger, Florian and Rossi, Fabrice",
  title     = "Improving binary diffing through similarity and matching intricacies",
  booktitle = "Proc. of the 6th Conference on Artificial Intelligence for Defense",
  year      = 2024,
}
@misc{SSTICQBinDiff,
  title        = "QBinDiff: A modular differ to enhance binary diffing and graph alignment",
  author       = "Cohen, Roxane and David, Robin and Mori, Riccardo and Yger, Florian and Rossi, Fabrice",
  howpublished = "\url{https://www.sstic.org/2024/presentation/qbindiff_a_modular_differ/}",
  year         = 2024,
}

Contributing & Contributors

Any help, or feedback is greatly appreciated via Github issues, pull requests.

Current:

  • Robin David
  • Riccardo Mori
  • Roxane Cohen

Past:

  • Alexis Challande
  • Elie Mengin

All contributions

Metadata

Release files for qbindiff 1.2.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for qbindiff 1.2.3
File Size Uploaded
qbindiff-1.2.3.tar.gz 4.0 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for qbindiff 1.2.3
File
qbindiff-1.2.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl PyPy 3.10 PyPy 3.10 7.3 Linux glibc 2.17+ x86-64 Details
qbindiff-1.2.3-cp312-cp312-musllinux_1_2_x86_64.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ x86-64 Details
qbindiff-1.2.3-cp312-cp312-musllinux_1_2_i686.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ x86-32 Details
qbindiff-1.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
qbindiff-1.2.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-32 Details
qbindiff-1.2.3-cp311-cp311-musllinux_1_2_x86_64.whl CPython 3.11 CPython 3.11 Linux musl 1.2+ x86-64 Details
qbindiff-1.2.3-cp311-cp311-musllinux_1_2_i686.whl CPython 3.11 CPython 3.11 Linux musl 1.2+ x86-32 Details
qbindiff-1.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64 Details
qbindiff-1.2.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-32 Details
qbindiff-1.2.3-cp310-cp310-musllinux_1_2_x86_64.whl CPython 3.10 CPython 3.10 Linux musl 1.2+ x86-64 Details
qbindiff-1.2.3-cp310-cp310-musllinux_1_2_i686.whl CPython 3.10 CPython 3.10 Linux musl 1.2+ x86-32 Details
qbindiff-1.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64 Details
qbindiff-1.2.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-32 Details

Total release size: 16.7 MB

Release files / qbindiff-1.2.3.tar.gz

Download URL qbindiff-1.2.3.tar.gz
Size 4.0 MB
Tags Source
SHA-256 checksum
How to use checksums
18ae6d5bbb1df0cd5687c7aeacc384b7dff45d9f1042081bf2868b2262c81e97
BLAKE2b-256 checksum
How to use checksums
135c5af67aef3eed0d31d65031c23f7cea5fdf8f2dae5967f37c92757bd13d42
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 5, 2025.

Transparency log

Release files / qbindiff-1.2.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL qbindiff-1.2.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 399.6 kB
Tags Linux glibc 2.17+ x86-64 PyPy 3.10 PyPy 3.10 7.3
SHA-256 checksum
How to use checksums
7c3e50af279e8b343602460f312b4a86113b6e8fd86c662ef7a85b0c234913ba
BLAKE2b-256 checksum
How to use checksums
a0bcd9560fedab52219c454a46ce7759ddf5e0697985eae976cec001746a7302
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 5, 2025.

Transparency log

Release files / qbindiff-1.2.3-cp312-cp312-musllinux_1_2_x86_64.whl

Download URL qbindiff-1.2.3-cp312-cp312-musllinux_1_2_x86_64.whl
Size 1.6 MB
Tags CPython 3.12 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
835bf0afa44cb8285dc67c87516b011f7f4e7ed5d8649f0c5f862b8ded6fc496
BLAKE2b-256 checksum
How to use checksums
4eb4b84c210d6bfd5205be57349faadcb4834e8a26ae8b3b9aee7554f0c2dc9f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 5, 2025.

Transparency log

Release files / qbindiff-1.2.3-cp312-cp312-musllinux_1_2_i686.whl

Download URL qbindiff-1.2.3-cp312-cp312-musllinux_1_2_i686.whl
Size 1.7 MB
Tags CPython 3.12 Linux musl 1.2+ x86-32
SHA-256 checksum
How to use checksums
6cf403c0bc923dfb6e79c2bd575c7f08dd6dff8cf2a968dc3c4051b063b538ee
BLAKE2b-256 checksum
How to use checksums
ec92d3b455fd8d78a16f9d2fcc1162ac8aad1826e20e4e08998251730771272a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 5, 2025.

Transparency log

Release files / qbindiff-1.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL qbindiff-1.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 425.8 kB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
32aeb135c5809879b0a86dbb224d478212fe976bb7c7cbdbf9b866718e60bd7f
BLAKE2b-256 checksum
How to use checksums
feced28779c496846e11b9bc5657d2af42541b7427cdb5276cb1b05c01518227
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 5, 2025.

Transparency log

Release files / qbindiff-1.2.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl

Download URL qbindiff-1.2.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl
Size 434.4 kB
Tags CPython 3.12 Linux glibc 2.17+ x86-32
SHA-256 checksum
How to use checksums
ca2688296711cc96438805c2be11e03ddf0ffd9aebd224e88f1d921d8cbab176
BLAKE2b-256 checksum
How to use checksums
5253a2f53813cededa60d1061ab620636a786d0425b8b736d334da734adca304
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 5, 2025.

Transparency log

Release files / qbindiff-1.2.3-cp311-cp311-musllinux_1_2_x86_64.whl

Download URL qbindiff-1.2.3-cp311-cp311-musllinux_1_2_x86_64.whl
Size 1.6 MB
Tags CPython 3.11 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
07461bb507e4898802d404a1323b01496ae7f0851df2a0e84273877a4ce012de
BLAKE2b-256 checksum
How to use checksums
bbbefa75e450e1231a39c71aa5ba497c8e8277286c48b420f7d264ca99fa45e7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 5, 2025.

Transparency log

Release files / qbindiff-1.2.3-cp311-cp311-musllinux_1_2_i686.whl

Download URL qbindiff-1.2.3-cp311-cp311-musllinux_1_2_i686.whl
Size 1.7 MB
Tags CPython 3.11 Linux musl 1.2+ x86-32
SHA-256 checksum
How to use checksums
1468fea23afbfc2327a5587a02d4b933b6462463f23ccebd572d5797251a5332
BLAKE2b-256 checksum
How to use checksums
7dbabef34c2d95f4d645fc3820b8f1a1c55621f8d2c606c44b09d5f033fd7cdd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 5, 2025.

Transparency log

Release files / qbindiff-1.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL qbindiff-1.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 435.6 kB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
dd98a8e48dd7208fda3463c5a1caa8566611fcaef10c861aaff16df5a7deb328
BLAKE2b-256 checksum
How to use checksums
564459439f5b6e9e74b6e47ca80d53979bee0793ed366ef632ebba1dfc3df8b2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 5, 2025.

Transparency log

Release files / qbindiff-1.2.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl

Download URL qbindiff-1.2.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Size 444.1 kB
Tags CPython 3.11 Linux glibc 2.17+ x86-32
SHA-256 checksum
How to use checksums
b8c2c00cabe080a015f212188fb04811b0da3d09cac538209cb3308af5ff00ba
BLAKE2b-256 checksum
How to use checksums
9bd603338816296976814d13cf3ce3b26bcff1f2abaf497833776d2bc590f5b6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 5, 2025.

Transparency log

Release files / qbindiff-1.2.3-cp310-cp310-musllinux_1_2_x86_64.whl

Download URL qbindiff-1.2.3-cp310-cp310-musllinux_1_2_x86_64.whl
Size 1.6 MB
Tags CPython 3.10 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
6ef671cc405614d88dc615992ecaf7c9feecf93b6b7c7405c4be6a296d007101
BLAKE2b-256 checksum
How to use checksums
d3af89c85ee835a51ca3a52b9b84ace642e1dac9deed2bd9b7b3cf4e459067a2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 5, 2025.

Transparency log

Release files / qbindiff-1.2.3-cp310-cp310-musllinux_1_2_i686.whl

Download URL qbindiff-1.2.3-cp310-cp310-musllinux_1_2_i686.whl
Size 1.7 MB
Tags CPython 3.10 Linux musl 1.2+ x86-32
SHA-256 checksum
How to use checksums
f76755312b639bbd654f94ff3514c41d9def0f9f523e03fa29e0a411f6b745e1
BLAKE2b-256 checksum
How to use checksums
23f127b7efb5a5e538aa353a09d9891ba6f8195dafddae63f3d6796e2b61b5d8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 5, 2025.

Transparency log

Release files / qbindiff-1.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL qbindiff-1.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 439.7 kB
Tags CPython 3.10 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
22803711520054d11c3fcd238696abd02193146372c94c8ddcf95f59994cda9b
BLAKE2b-256 checksum
How to use checksums
3398065120b4d70a2a5065b545859431b911329aa56e12e44589f4911b1d448a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 5, 2025.

Transparency log

Release files / qbindiff-1.2.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl

Download URL qbindiff-1.2.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
Size 447.2 kB
Tags CPython 3.10 Linux glibc 2.17+ x86-32
SHA-256 checksum
How to use checksums
6d8274c3ba8bcba96f506e809a09879af9bf10d547d79e13bab8f342e363c4ec
BLAKE2b-256 checksum
How to use checksums
4ee858cd8ad4f6d46342e194500469ed0828e7202c48ac11636ab8560eea7cb1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 5, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

1.2.3 This release

14 release files

1.2.2

14 release files

1.2.1

15 release files

1.2.0

15 release files

1.1.1

10 release files

1.1.0

10 release files

1.0.0

10 release files

0.2.0

10 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page