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
HyperSpy is an open source Python library for the interactive analysis of multidimensional datasets

HyperSpy is an open source Python library for the interactive analysis of multidimensional datasets that can be described as multidimensional arrays o

HyperSpy 411 Dec 27, 2022
🧪 Panel-Chemistry - exploratory data analysis and build powerful data and viz tools within the domain of Chemistry using Python and HoloViz Panel.

🧪📈 🐍. The purpose of the panel-chemistry project is to make it really easy for you to do DATA ANALYSIS and build powerful DATA AND VIZ APPLICATIONS within the domain of Chemistry using using Python a

Marc Skov Madsen 97 Dec 08, 2022
Sample code for Harry's Airflow online trainng course

Sample code for Harry's Airflow online trainng course You can find the videos on youtube or bilibili. I am working on adding below things: the slide p

102 Dec 30, 2022
Pandas and Spark DataFrame comparison for humans

DataComPy DataComPy is a package to compare two Pandas DataFrames. Originally started to be something of a replacement for SAS's PROC COMPARE for Pand

Capital One 259 Dec 24, 2022
A variant of LinUCB bandit algorithm with local differential privacy guarantee

Contents LDP LinUCB Description Model Architecture Dataset Environment Requirements Script Description Script and Sample Code Script Parameters Launch

Weiran Huang 4 Oct 25, 2022
Get mutations in cluster by querying from LAPIS API

Cluster Mutation Script Get mutations appearing within user-defined clusters. Usage Clusters are defined in the clusters dict in main.py: clusters = {

neherlab 1 Oct 22, 2021
This is a python script to navigate and extract the FSD50K dataset

FSD50K navigator This is a script I use to navigate the sound dataset from FSK50K.

sweemeng 2 Nov 23, 2021
MoRecon - A tool for reconstructing missing frames in motion capture data.

MoRecon - A tool for reconstructing missing frames in motion capture data.

Yuki Nishidate 38 Dec 03, 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 U

Ravi Prakash 3 Jun 27, 2021
Data Competition: automated systems that can detect whether people are not wearing masks or are wearing masks incorrectly

Table of contents Introduction Dataset Model & Metrics How to Run Quickstart Install Training Evaluation Detection DATA COMPETITION The COVID-19 pande

Thanh Dat Vu 1 Feb 27, 2022
A set of tools to analyse the output from TraDIS analyses

QuaTradis (Quadram TraDis) A set of tools to analyse the output from TraDIS analyses Contents Introduction Installation Required dependencies Bioconda

Quadram Institute Bioscience 2 Feb 16, 2022
statDistros is a Python library for dealing with various statistical distributions

StatisticalDistributions statDistros statDistros is a Python library for dealing with various statistical distributions. Now it provides various stati

1 Oct 03, 2021
:truck: Agile Data Preparation Workflows made easy with dask, cudf, dask_cudf and pyspark

To launch a live notebook server to test optimus using binder or Colab, click on one of the following badges: Optimus is the missing framework to prof

Iron 1.3k Dec 30, 2022
Python package for analyzing sensor-collected human motion data

Python package for analyzing sensor-collected human motion data

Simon Ho 71 Nov 05, 2022
Pandas and Dask test helper methods with beautiful error messages.

beavis Pandas and Dask test helper methods with beautiful error messages. test helpers These test helper methods are meant to be used in test suites.

Matthew Powers 18 Nov 28, 2022
A lightweight, hub-and-spoke dashboard for multi-account Data Science projects

A lightweight, hub-and-spoke dashboard for cross-account Data Science Projects Introduction Modern Data Science environments often involve many indepe

AWS Samples 3 Oct 30, 2021
Hg002-qc-snakemake - HG002 QC Snakemake

HG002 QC Snakemake To Run Resources and data specified within snakefile (hg002QC

Juniper A. Lake 2 Feb 16, 2022
A Python module for clustering creators of social media content into networks

sm_content_clustering A Python module for clustering creators of social media content into networks. Currently supports identifying potential networks

72 Dec 30, 2022
Find exposed data in Azure with this public blob scanner

BlobHunter A tool for scanning Azure blob storage accounts for publicly opened blobs. BlobHunter is a part of "Hunting Azure Blobs Exposes Millions of

CyberArk 250 Jan 03, 2023
TheMachineScraper 🐱‍👤 is an Information Grabber built for Machine Analysis

TheMachineScraper 🐱‍👤 is a tool made purely for analysing machine data for any reason.

doop 5 Dec 01, 2022