Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
|build-status| |python-versions| |installs-month| |installs-ever|
.. |build-status| image:: https://github.com/dargueta/binobj/actions/workflows/ci.yml/badge.svg :alt: Build status
.. |python-versions| image:: https://img.shields.io/badge/python-3.9,%203.10,%203.11,%203.12,%203.13-blue.svg :alt: Python versions
.. |installs-month| image:: https://pepy.tech/badge/binobj/month :alt: Installs per month :target: https://pepy.tech/project/binobj
.. |installs-ever| image:: https://pepy.tech/badge/binobj :alt: Total installs :target: https://pepy.tech/project/binobj
A cross-platform Python 3 library for reading and writing structured binary data in an object-oriented (ish) style.
binobj
?You may have used Python's built-in struct
library to load and dump binary
data. It's unwieldy for larger or more complex data structures, and the format
strings are easy to get wrong. binobj
is different in that it takes a class-based
approach to declaring binary structures.
Take a look at this example using struct
:
.. code-block:: python
data = (b'BM', 1024, 0, 12, 40, 32, 32, 1, 1, 0, 0, 72, 72, 2, 2)
header_bytes = struct.pack('<2sIIIIiiHHIIiiII', *data)
loaded = struct.unpack('<2sIIIIiiHHIIiiII', header_bytes)
n_pixels = loaded[5] * loaded[6]
The same example rewritten using binobj
:
.. code-block:: python
class BMP(binobj.Struct):
class Meta:
argument_defaults = {
"endian": "little"
}
magic: Bytes = b"BM"
file_size: UInt32
_reserved: binobj.Bytes(const=b"\0\0\0\0", discard=True)
pixels_offset: UInt32
# Legacy DIB header
header_size: UInt32 = 40
image_width: Int32
image_height: Int32
n_color_planes: UInt16
n_bits_per_pixel: UInt16
compression_method: UInt32 = 0
bitmap_size: UInt32
v_resolution: Int32
h_resolution: Int32
n_palette_colors: UInt32
n_important_colors: UInt32
bmp = BMP(file_size=1024, pixels_offset=12, image_width=32, image_height=32, ...)
header_bytes = bytes(bmp)
loaded = BMP.from_bytes(header_bytes)
n_pixels = loaded.image_width * loaded.image_height
binobj
also has other advantages in that it supports strings in any encoding
Python supports, toggling endianness on a per-field basis (necessary for ISO 9660
images), a variety of integer encodings, computed fields, validation, and more.
mixed-endian
_ system. Those are pretty rare
nowadays so chances are you won't have a problem... _mixed-endian: https://en.wikipedia.org/wiki/Endianness#Mixed
You can install this with pip
like so:
.. code-block:: sh
pip3 install binobj
pip3
and not pip
, because pip
defaults to Python 2... code-block:: sh
pip3 install --user binobj
Side note: Don't use sudo
(even sudo -EH
) to force a package to install,
as that's a security risk. See this answer <https://stackoverflow.com/a/42021993>
_
on Stack Overflow to find out why.
This package uses Tox <https://tox.readthedocs.io/en/latest/>
_ to run tests on
multiple versions of Python.
Setup
To set up your development environment, you'll need to install a few things.
* For Python version management, I use `pyenv-virtualenv <https://github.com/pyenv/pyenv-virtualenv>`_.
Follow the installation instructions there.
* You'll also need ``make``. Depending on your platform you can install it in
one of several ways:
* macOS: ``brew install make``
* Debian systems (e.g. Ubuntu): ``sudo apt-get install make``
* Windows: Use `Cygwin <https://www.cygwin.com/>`_ and install it during setup.
Once you have those installed, in the root directory of this repo run:
.. code-block:: sh
make setup
Running the Tests
To run the unit tests for all supported versions of Python, run make test
.
The environments will automatically be rebuilt if needed.
Issues and Feature Requests
To report an issue, request a feature, or propose a change, please file a
report on the project's GitHub page `here <https://github.com/dargueta/binobj/issues>`_.
License
-------
I'm releasing this under the terms of the `3-Clause BSD License`_. For the full
legal text, see ``LICENSE.txt`` in the repository.
.. _3-Clause BSD License: https://tldrlegal.com/license/bsd-3-clause-license-(revised)
FAQs
A Python library for reading and writing structured binary data.
We found that binobj demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.