A multi-platform GUI for bit-based analysis, processing, and visualization

Overview

semantic-release Discord Chat

master develop
Master Build Status Develop Build Status

Documentation

The documentation is available at mahlet-inc.github.io.

Pre-built binaries

There are pre-built binaries of the latest release on the GitHub releases page.

Using Hobbits

Read the user guide in the documentation and/or watch this walkthrough video

Building with Conan, Python 3, and CMake 3.12+

  1. Install Conan with pip: pip install conan
  2. Configure Conan to use a custom remote and keep *.pyc files:
conan remote add hobbitsconan https://helloadam.jfrog.io/artifactory/api/conan/conan
conan config set general.keep_python_files=True
  1. Use conan to get/build dependencies, then build and package hobbits:
mkdir build
cd build
conan install .. --build=missing
conan build ..
conan package ..

If you have any issues building, you can check out more detailed steps and environmental setup in the continuous integration files or open an issue.

Plain CMake (no Conan) building also works if you have your dependencies handled. The CentOS 7 GCC 4.8 CI build does this.

Adding plugins

Read the plugin developer guide in the documentation. As of v0.50.0, the plugin interfaces are pretty stable. It is possible, maybe even likely, that plugins built to the current interfaces will be version 1.x.x-compatible.

Get Involved

Join our Discord server, send us an email at [email protected], and tell your colleagues. We'd love contributions and resumes, but we'll settle for bug reports and memes.

Screenshot of the Hobbits GUI

Comments
  • Implementation improvements for Kaitai Struct Plugin

    Implementation improvements for Kaitai Struct Plugin

    Kaitai is a declarative language for parsing binary formats. We need plugins that will:

    • compile and run the kaitai parser on a bitcontainer (using python?)
    • display the parsed information kind of like kaitai Web IDE
    • easily allow blobs to be broken off into their own bitcontainers for further isolated analysis

    https://kaitai.io/

    @KOLANICH

    enhancement integration 
    opened by hello-adam 13
  • Conan install fails creating Makefile on Fedora 35

    Conan install fails creating Makefile on Fedora 35

    System information:

    hostname = fedora
    uname -m = x86_64
    uname -r = 5.16.16-200.fc35.x86_64
    uname -s = Linux
    uname -v = #1 SMP PREEMPT Sat Mar 19 13:52:41 UTC 2022
    
    /usr/bin/uname -p = x86_64
    /bin/uname -X     = unknown
    
    /bin/arch              = x86_64
    /usr/bin/arch -k       = unknown
    /usr/convex/getsysinfo = unknown
    /usr/bin/hostinfo      = unknown
    /bin/machine           = unknown
    /usr/bin/oslevel       = unknown
    /bin/universe          = unknown
    
    PATH: /home/alex/.cargo/bin
    PATH: /home/alex/.local/bin
    PATH: /home/alex/bin
    PATH: /usr/local/bin
    PATH: /usr/local/sbin
    PATH: /usr/bin
    PATH: /usr/sbin
    

    g++ version: g++ (GCC) 11.2.1 20220127 (Red Hat 11.2.1-9) Python version: Python 3.10.4 conan version: Conan version 1.47.0 OpenSSL version: OpenSSL 1.1.1n FIPS 15 Mar 2022 cmake version: cmake version 3.22.2

    Build log attached below.

    hobbits-fedora-conan-build.log

    My guess is that it's failing to build the Makefile properly, perhaps some values are not included. I know one of the errors is that python cannot locate g++ in ./configure even though it's installed so CXX=/usr/bin/g++ took care of that, but didn't change the error much.

    opened by alextairbekov 12
  • Fails to start on macOS 11

    Fails to start on macOS 11

    > /Applications/hobbits.app/Contents/MacOS/hobbits 
    dyld: Library not loaded: /usr/local/opt/gettext/lib/libintl.8.dylib
      Referenced from: /Applications/hobbits.app/Contents/Frameworks/hobbits-cpython/lib/libpython3.9.dylib
      Reason: image not found
    fish: Job 1, '/Applications/hobbits.app/Conte…' terminated by signal SIGABRT (Abort)
    

    I would suggest using macdeployqt for mac builds. It packages Qt a bit more nicely.

    Mac 11.5.2, hobbits-0.51.1

    opened by RazrFalcon 9
  • [windows] Application crashes if

    [windows] Application crashes if "Split view" is applied after loading a file (import menu)

    Hi,

    I detect a problem when the "split view" is applied after 'import' file or data -> the application crashes ; the "split view" is possible only before 'import', add other view crashes application after 'import'.

    i m using pre-built binaries v0.46.7 (Hobbits (64-bit Windows 2016 msvc2017), Same issue with v0.46.4. Tested under 2 x Windows 10 pro 64-bit (20H2 & 2004).

    Have you already observed this ?

    Thanks Best regards

    bug windows 
    opened by SFX72 6
  • Instance set by value does not appear in Kaitai Struct output

    Instance set by value does not appear in Kaitai Struct output

    In the Kaitai Struct plugin, if you have an instance set by a value, it fails to appear in the "Parsed" tab.

    for example:

    instances:
      test1:
        pos: 0
        size: 1
      test2:
        value: 0xff
    

    should result in something like this (from kaitai struct visualizer): image

    however, in Hobbits, it appears like this: image

    opened by jakecrowley 5
  • [Bug Report] Program Crashes When Using Kaitai Struct to Analyze BMP and PNG

    [Bug Report] Program Crashes When Using Kaitai Struct to Analyze BMP and PNG

    When I use the Kaitai Struct analyzer plugin on PNGs or BMPs the program closes (I presume it's crashing) with no error messages. I'm using the pre-built binary for Windows.

    bug released python 
    opened by CooperW824 5
  • Some questions for plugins in python

    Some questions for plugins in python

    Hi,

    got some question about plugins in python :

    • In the JSON file, when I put "decimal" or "integer" type for my parameter, it doesn't change anything, in the both cases it's an integer, is it normal ? Do i miss something ?

    • Can we put negative values in our integer field ? And so, can we precise a maximum and a minimum value in the JSON file for a specific parameter ?

    • When I try to add a boolean parameter in my JSON file and execute my plugin in Hobbits, I've always this error :

    "Operator Plugin Error: Plugin 'test' reported an error with its processing: Other errors:
    Failed to parse arg 4"
    (here the arg 4 is of course my boolean, if i put more parameters, it will say 'arg 5' or 'arg 6')
    

    and this is my script in python :

    def operate_on_bits(input, output_bits, output_info, perso_var, progress):
      if input.bits.size() > 300 and perso_var:  # the perso_var is my boolean
        output_info.add_highligt("python", "mychunck", 20, 3000)
    
      output_bits.resize(input.bits.size())
      for i in range(0, input.bits.size()):
        output_bits.set(i, input.bits.at(i))  # this is the only other modification in the default plugin (I removed the 'not')
        if progress.is_cancelled():
          return
        progress.set_progress(i, input.bit.size())
    

    and my JSON file :

    {
      "name": "test",
      "description": "plugin test",
      "tags": ["test"],
      "script": "main.py",
      "type": "operator",
      "extra_paths": [],
      "parameters": [
        {
          "name": "perso_var",
          "type": "boolean"
        }
      ]
    }
    
    bug documentation python 
    opened by Pagalom 5
  • Replace FFTW library with the PFFFT library

    Replace FFTW library with the PFFFT library

    The FFTW library was utilized in two Hobbits plugins, the Spectrogram and the Width Framer. Due to licensing conflicts, the FFTW library could no longer be used in Hobbits. After researching different libraries, @hello-adam and I decided to use the PFFFT library.

    I have refactored the code for both the Spectrogram and the Width Framer. Also, I implemented a QComboBox that allows users to change the FFT Size within the Spectrogram. Prior to adding this, FFT Size was a QSpinBox that allowed users to manually enter the FFT size or use up and down arrows to increment. The QComboBox allows users to choose FFT sizes in powers of two, ranging from 2^5 to 2^14 (or, 32 to 16,384).

    released 
    opened by melissascode 4
  • Feature: USB reader importer plugin for Hobbits

    Feature: USB reader importer plugin for Hobbits

    A new plugin to be able to read the data coming off of Bulk and Interrupt USB device Endpoints.

    A UI to select from various devices that are plugged in or operating on the USB bus, after selecting a device, select the interface, the alternate setting, and endpoint to read from.

    Select the number of times you want to read from a device, the delay in between transfers (so that you can use the device while its being read from), and the maximum duration to wait for a transfer before the transfer times out.

    Hit "OK" to read the requested data from the device, hobbits will prompt you if an error is met.

    released 
    opened by CooperW824 4
  • making a plugin using QtCreator

    making a plugin using QtCreator

    May i miss something but the old way to make a plugin in C was to install wizards like said in the tutorial, but I'm unable to find it. Is their something i miss ? Did the way to do that improved ?

    I made some researches and found this, from Adam. But i can't find the file in the Code part.

    Can someone help me on this point ?

    Thanks !

    question 
    opened by Pagalom 4
  • bug on highligthing with kaitai

    bug on highligthing with kaitai

    A file generated with the following command

     echo 2f fe b8 9b 22 00 00 00  00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00  00 00 a4 0f 08 00 1a 06 08 af d0 bc 82 06 | xxd -r -p > file.bin
    

    opened with hobbits with the following ksy:

    meta:
      file-extension: bla
      id: servermod
      endian: le
      imports:
        - /serialization/google_protobuf
    seq:
      - id: records
        type: record
        repeat: eos
    types:
      main_header:
        seq:
          - id: ip1
            type: u1
          - id: ip2
            type: u1
          - id: ip3
            type: u1
          - id: ip4
            type: u1
          - id: body_len
            type: u4le
      record:
        seq:
          - id: len_record
            type: main_header
            doc: Size of whole record, including all headers, footers and data
          - id: ctype
            type: u1
            doc: ctype
          - id: flow
            type: u1
            doc: flow
          - id: cid
            type: u4le
            doc: cid
          - id: did
            type: u4le
            doc: did
          - id: seq1
            type: u8le
            doc: seq1
          - id: command
            type: u2le
            doc: command
          - id: protobuf
            size: len_record.body_len - 24
            type: google_protobuf
    

    When you open the file with the struct in kaitai IDE works correctly, but opening in hobbits when you select the protobuf part (the last 10 bytes - 08 af d0 bc 82 06 ) it's highligthed the start of the file.

    If you concatenate some times and select the protobuf of any of the registers always it's highligthed the starting bytes of the file.

    The command to generate with 3 concats is:

    echo 2f fe b8 9b 22 00 00 00  00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00  00 00 a4 0f 08 00 1a 06 08 af d0 bc 82 06 | xxd -r -p > file.bin ; echo 2f fe b8 9b 22 00 00 00  00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00  00 00 a4 0f 08 00 1a 06 08 af d0 bc 82 06 | xxd -r -p >> file.bin ; echo 2f fe b8 9b 22 00 00 00  00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00  00 00 a4 0f 08 00 1a 06 08 af d0 bc 82 06 | xxd -r -p >> file.bin
    
    opened by accountgit 4
  • analyzing Kaitai Structs fails on missing 'pkg_ressources' python module

    analyzing Kaitai Structs fails on missing 'pkg_ressources' python module

    If your system python is not 3.9 you're pretty screwed on analizing Kaitai Structs:

    Python stderr:
    Traceback (most recent call last):
      File "/tmp/HobbitsPythonrBHuvX/thescript.py", line 162, in parse_data
        struct_module = importlib.__import__(package_name, fromlist=[class_name])
      File "<frozen importlib._bootstrap>", line 1109, in __import__
      File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
      File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
      File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
      File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
      File "<frozen importlib._bootstrap_external>", line 850, in exec_module
      File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
      File "/tmp/hobbits-GGgAzl/png.py", line 3, in <module>
        from pkg_resources import parse_version
    ModuleNotFoundError: No module named 'pkg_resources'
    
    opened by derVedro 3
  • Kaitai Struct parsed output table missing 'value' column for some KSY files

    Kaitai Struct parsed output table missing 'value' column for some KSY files

    Take this ksy for example:

    meta:
      id: test
    seq:
    - id: test
      type: test
    types:
      test:
        seq:
        - id: t
          type: u1
    

    The parsed output table only contains columns 1 and 2, not the third 'value' column. image

    Modifying the ksy by adding a field which uses a builtin type at the start of the sequence fixes the issue

    meta:
      id: test
    seq:
    - id: test1
      type: u1
    - id: test
      type: test
    types:
      test:
        seq:
        - id: t
          type: u1
    

    image

    opened by noperator-zz 2
  • Copying hex from hex viewer

    Copying hex from hex viewer

    Hello,

    Thank you very much for the wonderful software!

    I was wondering, how do I copy to clipboard from the hex editor? I can't seem to select anything.

    image

    opened by radio-satellites 1
  • hobbits-runner shouldn't need a display?

    hobbits-runner shouldn't need a display?

    I have limited knowledge of Qt so I'm not sure if this is even possible with the way hobbits-runner is implemented currently, but it for some reason still needs a display to run, even though it is a purely CLI tool. When trying to run it over SSH i get the error in the screenshot below.

    hobbits-runner

    opened by jakecrowley 3
  • Display decimal integer and float representation at cursor

    Display decimal integer and float representation at cursor

    Would be very valuable to interpret the bits beginning at cursor as a decimal number or floating point while in hex and binary view. In other hex editors this feature is useful to identify file offsets, for example.

    opened by markasoftware 1
Releases(v0.53.2)
Owner
Mahlet
Because Engineering Matters.
Mahlet
Project: Netflix Data Analysis and Visualization with Python

Project: Netflix Data Analysis and Visualization with Python Table of Contents General Info Installation Demo Usage and Main Functionalities Contribut

Kathrin Hälbich 2 Feb 13, 2022
Integrate bus data from a variety of sources (batch processing and real time processing).

Purpose: This is integrate bus data from a variety of sources such as: csv, json api, sensor data ... into Relational Database (batch processing and r

null 1 Nov 25, 2021
Statistical Analysis 📈 focused on statistical analysis and exploration used on various data sets for personal and professional projects.

Statistical Analysis ?? This repository focuses on statistical analysis and the exploration used on various data sets for personal and professional pr

Andy Pham 1 Sep 3, 2022
A set of functions and analysis classes for solvation structure analysis

SolvationAnalysis The macroscopic behavior of a liquid is determined by its microscopic structure. For ionic systems, like batteries and many enzymes,

MDAnalysis 19 Nov 24, 2022
TE-dependent analysis (tedana) is a Python library for denoising multi-echo functional magnetic resonance imaging (fMRI) data

tedana: TE Dependent ANAlysis TE-dependent analysis (tedana) is a Python library for denoising multi-echo functional magnetic resonance imaging (fMRI)

null 136 Dec 22, 2022
Retentioneering 581 Jan 7, 2023
Created covid data pipeline using PySpark and MySQL that collected data stream from API and do some processing and store it into MYSQL database.

Created covid data pipeline using PySpark and MySQL that collected data stream from API and do some processing and store it into MYSQL database.

null 2 Nov 20, 2021
A collection of robust and fast processing tools for parsing and analyzing web archive data.

ChatNoir Resiliparse A collection of robust and fast processing tools for parsing and analyzing web archive data. Resiliparse is part of the ChatNoir

ChatNoir 24 Nov 29, 2022
A neural-based binary analysis tool

A neural-based binary analysis tool Introduction This directory contains the demo of a neural-based binary analysis tool. We test the framework using

Facebook Research 208 Dec 22, 2022
A powerful data analysis package based on mathematical step functions. Strongly aligned with pandas.

The leading use-case for the staircase package is for the creation and analysis of step functions. Pretty exciting huh. But don't hit the close button

null 48 Dec 21, 2022
Python-based Space Physics Environment Data Analysis Software

pySPEDAS pySPEDAS is an implementation of the SPEDAS framework for Python. The Space Physics Environment Data Analysis Software (SPEDAS) framework is

SPEDAS 98 Dec 22, 2022
Spaghetti: an open-source Python library for the analysis of network-based spatial data

pysal/spaghetti SPAtial GrapHs: nETworks, Topology, & Inference Spaghetti is an open-source Python library for the analysis of network-based spatial d

Python Spatial Analysis Library 203 Jan 3, 2023
Codes for the collection and predictive processing of bitcoin from the API of coinmarketcap

Codes for the collection and predictive processing of bitcoin from the API of coinmarketcap

Teo Calvo 5 Apr 26, 2022
Used for data processing in machine learning, and help us to construct ML model more easily from scratch

Used for data processing in machine learning, and help us to construct ML model more easily from scratch. Can be used in linear model, logistic regression model, and decision tree.

ShawnWang 0 Jul 5, 2022
CaterApp is a cross platform, remotely data sharing tool created for sharing files in a quick and secured manner.

CaterApp is a cross platform, remotely data sharing tool created for sharing files in a quick and secured manner. It is aimed to integrate this tool with several more features including providing a User Interface.

Ravi Prakash 3 Jun 27, 2021
Tuplex is a parallel big data processing framework that runs data science pipelines written in Python at the speed of compiled code

Tuplex is a parallel big data processing framework that runs data science pipelines written in Python at the speed of compiled code. Tuplex has similar Python APIs to Apache Spark or Dask, but rather than invoking the Python interpreter, Tuplex generates optimized LLVM bytecode for the given pipeline and input data set.

Tuplex 791 Jan 4, 2023
Python package for processing UC module spectral data.

UC Module Python Package How To Install clone repo. cd UC-module pip install . How to Use uc.module.UC(measurment=str, dark=str, reference=str, heade

Nicolai Haaber Junge 1 Oct 20, 2021
nrgpy is the Python package for processing NRG Data Files

nrgpy nrgpy is the Python package for processing NRG Data Files Website and source: https://github.com/nrgpy/nrgpy Documentation: https://nrgpy.github

NRG Tech Services 23 Dec 8, 2022
A meta plugin for processing timelapse data timepoint by timepoint in napari

napari-time-slicer A meta plugin for processing timelapse data timepoint by timepoint. It enables a list of napari plugins to process 2D+t or 3D+t dat

Robert Haase 2 Oct 13, 2022