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
Statistical Rethinking: A Bayesian Course Using CmdStanPy and Plotnine

Statistical Rethinking: A Bayesian Course Using CmdStanPy and Plotnine Intro This repo contains the python/stan version of the Statistical Rethinking

Andrés Suárez 3 Nov 08, 2022
University Challenge 2021 With Python

University Challenge 2021 This repository contains: The TeX file of the technical write-up describing the University / HYPER Challenge 2021 under late

2 Nov 27, 2021
ETL pipeline on movie data using Python and postgreSQL

Movies-ETL ETL pipeline on movie data using Python and postgreSQL Overview This project consisted on a automated Extraction, Transformation and Load p

Juan Nicolas Serrano 0 Jul 07, 2021
Data imputations library to preprocess datasets with missing data

Impyute is a library of missing data imputation algorithms. This library was designed to be super lightweight, here's a sneak peak at what impyute can do.

Elton Law 329 Dec 05, 2022
Yet Another Workflow Parser for SecurityHub

YAWPS Yet Another Workflow Parser for SecurityHub "Screaming pepper" by Rum Bucolic Ape is licensed with CC BY-ND 2.0. To view a copy of this license,

myoung34 8 Dec 22, 2022
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

Tuplex 791 Jan 04, 2023
Learn machine learning the fun way, with Oracle and RedBull Racing

Red Bull Racing Analytics Hands-On Labs Introduction Are you interested in learning machine learning (ML)? How about doing this in the context of the

Oracle DevRel 55 Oct 24, 2022
BIGDATA SIMULATION ONE PIECE WORLD CENSUS

ONE PIECE is a Japanese manga of great international success. The story turns inhabited in a fictional world, tells the adventures of a young man whose body gained rubber properties after accidentall

Maycon Cypriano 3 Jun 30, 2022
Implementation in Python of the reliability measures such as Omega.

OmegaPy Summary Simple implementation in Python of the reliability measures: Omega Total, Omega Hierarchical and Omega Hierarchical Total. Name Link O

Rafael Valero Fernández 2 Apr 27, 2022
CINECA molecular dynamics tutorial set

High Performance Molecular Dynamics Logging into CINECA's computer systems To logon to the M100 system use the following command from an SSH client ss

J. W. Dell 0 Mar 13, 2022
The Spark Challenge Student Check-In/Out Tracking Script

The Spark Challenge Student Check-In/Out Tracking Script This Python Script uses the Student ID Database to match the entries with the ID Card Swipe a

1 Dec 09, 2021
AptaMat is a simple script which aims to measure differences between DNA or RNA secondary structures.

AptaMAT Purpose AptaMat is a simple script which aims to measure differences between DNA or RNA secondary structures. The method is based on the compa

GEC UTC 3 Nov 03, 2022
DefAP is a program developed to facilitate the exploration of a material's defect chemistry

DefAP is a program developed to facilitate the exploration of a material's defect chemistry. A large number of features are provided and rapid exploration is supported through the use of autoplotting

6 Oct 25, 2022
Exploring the Top ML and DL GitHub Repositories

This repository contains my work related to my project where I scraped data on the most popular machine learning and deep learning GitHub repositories in order to further visualize and analyze it.

Nico Van den Hooff 17 Aug 21, 2022
follow-analyzer helps GitHub users analyze their following and followers relationship

follow-analyzer follow-analyzer helps GitHub users analyze their following and followers relationship by providing a report in html format which conta

Yin-Chiuan Chen 2 May 02, 2022
A simplified prototype for an as-built tracking database with API

Asbuilt_Trax A simplified prototype for an as-built tracking database with API The purpose of this project is to: Model a database that tracks constru

Ryan Pemberton 1 Jan 31, 2022
Calculate multilateral price indices in Python (with Pandas and PySpark).

IndexNumCalc Calculate multilateral price indices using the GEKS-T (CCDI), Time Product Dummy (TPD), Time Dummy Hedonic (TDH), Geary-Khamis (GK) metho

Dr. Usman Kayani 3 Apr 27, 2022
The Master's in Data Science Program run by the Faculty of Mathematics and Information Science

The Master's in Data Science Program run by the Faculty of Mathematics and Information Science is among the first European programs in Data Science and is fully focused on data engineering and data a

Amir Ali 2 Jun 17, 2022
Bigdata Simulation Library Of Dream By Sandman Books

BIGDATA SIMULATION LIBRARY OF DREAM BY SANDMAN BOOKS ================= Solution Architecture Description In the realm of Dreaming, its ruler SANDMAN,

Maycon Cypriano 3 Jun 30, 2022
Probabilistic Programming in Python: Bayesian Modeling and Probabilistic Machine Learning with Theano

PyMC3 is a Python package for Bayesian statistical modeling and Probabilistic Machine Learning focusing on advanced Markov chain Monte Carlo (MCMC) an

PyMC 7.2k Dec 30, 2022