Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
hal — HAL – L'Analizzatore Hardware | Kitploit
Strumenti/GitHubGitHub/emsec/hal
Sicurezza Sistemi EmbeddedReverse EngineeringHacking HardwareSicurezza HardwareSicurezza Hardware e IoTAnalisi di BinariPaper e RicercaApprendimento e FormazioneAnalisi del Firmware
GitHubemsec/hal

hal

HAL – L'Analizzatore Hardware

814957h 11m faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Vedi Repository

Benvenuti in HAL!

Ubuntu 22.04 Ubuntu 24.04 macOS Deploy Documentation Doc: C++ Doc: Python

HAL [/hel/] è un framework completo per il reverse engineering e la manipolazione di netlist.

HAL Screenshot

Navigazione

  1. Introduzione
  2. Istruzioni di Build
  3. Guida Rapida
  4. Contesto Accademico

Introduzione

Che cos'è HAL?

Praticamente tutta la ricerca disponibile sull'analisi di netlist opera su una rappresentazione basata su grafi della netlist sotto esame. Al suo nucleo, HAL fornisce esattamente questo: Un framework per analizzare netlist di fonti arbitrarie, ad esempio FPGA o ASIC, in una rappresentazione di netlist basata su grafi e per fornire gli strumenti integrati necessari per la navigazione e l'analisi dei gate e delle connessioni inclusi.

La nostra visione è che HAL diventi l'equivalente per il reverse engineering hardware di strumenti come IDA o Ghidra. Vogliamo che HAL fornisca una base comune per ricercatori e analisti per migliorare la riproducibilità dei risultati di ricerca e astragga dai compiti di base ricorrenti come il parsing di netlist, ecc.

  • Alte prestazioni grazie al core C++ ottimizzato
  • Flessibilità grazie ai binding Python integrati
  • Modularità tramite un sistema di plugin C++
  • Stabilità garantita da una ricca suite di test

HAL è attivamente sviluppato dal gruppo Embedded Security del Max Planck Institute for Security and Privacy. Oltre a molteplici progetti di ricerca, viene utilizzato anche nella nostra lezione universitaria "Einführung ins Hardware Reverse Engineering" (Introduzione al Reverse Engineering Hardware) presso la Ruhr University Bochum (RUB).

Nota che disponiamo anche di un set di circuiti benchmark moderni e all'avanguardia per la valutazione delle tecniche di reverse engineering di netlist, disponibile in un repository separato.

Plugin Inclusi

Questo repository contiene una selezione di plugin curati:

  • GUI: Un'interfaccia grafica ricca di funzionalità che consente l'ispezione visiva della netlist e l'analisi interattiva
    • Integrazione nativa di una shell Python con accesso ai binding Python di HAL
    • Isolamento di gate o moduli specifici per un'ispezione senza confusione
    • Navigazione interattiva delle netlist
    • Widget dettagliati con informazioni su tutti gli aspetti della netlist ispezionata
  • Simulatore di Netlist: Un simulatore per parti arbitrarie di una netlist caricata
  • Analisi del Flusso di Dati: Il nostro plugin di analisi del flusso di dati DANA che recupera registri di alto livello in una netlist non strutturata
  • Algoritmi per Grafi: Integrazione di igraph per l'accesso diretto ad algoritmi comuni della teoria dei grafi
  • Shell Python: Un plugin da riga di comando per avviare una shell Python pre-caricata con i binding Python di HAL
  • Parser VHDL e Verilog: Aggiunge il supporto per il parsing di file VHDL e Verilog come formati di input per netlist
  • Parser Liberty: Aggiunge il supporto per librerie di gate arbitrarie nel formato standard liberty
  • Scrittori VHDL e Verilog: Aggiunge il supporto per la serializzazione di una netlist (modificata) in file VHDL o Verilog sintetizzabili
  • Librerie di Gate: Aggiunge il supporto per le librerie di gate XILINX Unisim e Simprim

Documentazione

Una documentazione completa delle funzionalità di HAL dal punto di vista dell'utente è disponibile nel nostro Wiki. Inoltre, forniamo una documentazione completa dell'API C++ e dell'API Python.

Istruzioni di Build

Per le istruzioni su come compilare HAL, fare riferimento alla pagina dedicata nel nostro Wiki.

Guida Rapida

Installa HAL o compila HAL e avvia la GUI tramite hal -g. Puoi elencare tutte le opzioni disponibili tramite hal [--help|-h]. Abbiamo incluso alcuni progetti di esempio nella sottodirectory examples. Per iniziare con un progetto di esempio è necessario importarlo tramite Import Project dal menu principale o trascinando il file zippato nell'area OPEN PROJECT della schermata di benvenuto. In questo modo apparirà un popup che richiede una directory con permessi di scrittura dove HAL creerà la directory del progetto e decomprimerà i file. Non utilizzare strumenti esterni per decomprimere poiché vengono apportati adattamenti in modo che la netlist e la libreria di gate vengano trovate la prossima volta che il progetto viene aperto.

Nel caso in cui tu voglia aprire la tua netlist Verilog o VHDL, devi eseguire Import Netlist invece. Funzionerà solo se è presente una libreria di gate corrispondente in plugins/gate_libraries/definitions o se fornisci manualmente la libreria di gate. Per le istruzioni su come creare la tua libreria di gate e altri tutorial utili, dai un'occhiata al wiki.

Il seguente codice di esempio si riferisce all'esempio fsm.

Utilizza la shell Python integrata o la finestra dello script Python per interagire. Entrambe dispongono di funzionalità di completamento automatico (limitate).

Elenchiamo tutte le lookup table e stampiamo le loro funzioni booleane:

root@kitploit:~
for gate in netlist.get_gates():
    if "LUT" in gate.type.name:
        print("{} (id {}, type {})".format(gate.name, gate.id, gate.type.name))
        print("  {}-to-{} LUT".format(len(gate.type.input_pins), len(gate.type.output_pins)))
        boolean_functions = gate.boolean_functions
        for name in boolean_functions:
            print("  {}: {}".format(name, boolean_functions[name]))
        print("")

Per la netlist di esempio fsm.vhd questo stampa:

root@kitploit:~
FSM_sequential_STATE_REG_0_i_3_inst (id 4, type LUT6)
  6-to-1 LUT
  O: (!I1 & !I2 & I3 & !I4 & I5) | (I0 & !I2) | (I0 & I1) | (I0 & I3) | (I0 & I4) | (I0 & I5)

FSM_sequential_STATE_REG_0_i_2_inst (id 3, type LUT6)
  6-to-1 LUT
  O: (I2 & I3 & I4 & !I5) | (I1 & !I5) | (I1 & !I4) | (I1 & !I3) | (I0 & I1) | (I1 & I2)

FSM_sequential_STATE_REG_1_i_3_inst (id 6, type LUT6)
  6-to-1 LUT
  O: (!I1 & I4 & !I5) | (!I1 & !I3 & I4) | (I0 & I4 & !I5) | (I0 & !I3 & I4) | (!I1 & I2 & I4) | (I0 & I2 & I4) | (!I2 & !I5) | (!I2 & !I4) | (!I2 & !I3) | (!I0 & !I4) | (!I0 & !I2) | (!I0 & !I1) | (I1 & !I4) | (I1 & !I2) | (I0 & I1) | (I3 & !I5) | (I3 & !I4) | (!I0 & I3) | (I1 & I3) | (I2 & I3) | (!I4 & I5) | (!I3 & I5) | (!I0 & I5) | (I1 & I5) | (I2 & I5)

FSM_sequential_STATE_REG_1_i_2_inst (id 5, type LUT6)
  6-to-1 LUT
  O: (!I0 & I1 & !I2 & I3 & I4 & !I5) | (I0 & !I2 & I3 & I4 & I5)

OUTPUT_BUF_0_inst_i_1_inst (id 18, type LUT1)
  1-to-1 LUT
  O: !I0

OUTPUT_BUF_1_inst_i_1_inst (id 20, type LUT2)
  2-to-1 LUT
  O: (I0 & !I1) | (!I0 & I1)

Contribuire

Sei il benvenuto a contribuire allo sviluppo di HAL. Sentiti libero di inviare una nuova pull request tramite github. Ti preghiamo di considerare l'esecuzione dei controlli statici + clang format prima di farlo. Puoi anche installare questi controlli come git hooks prima di qualsiasi commit.

Eseguire i controlli statici e clang format localmente

Per installare l'hook clang-format installa git-hooks ed esegui:

git hooks --install

Avvia la build Docker tramite: docker-compose run --rm hal-build

Generare il Changelog

git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:"%s" --no-merges

Contesto Accademico

Se utilizzi HAL in un contesto accademico, cita il framework usando il riferimento seguente:

root@kitploit:~
@misc{hal,
    author = {{Embedded Security Group}},
    publisher = {{Max Planck Institute for Security and Privacy}},
    title = {{HAL - The Hardware Analyzer}},
    year = {2019},
    howpublished = {\url{https://github.com/emsec/hal}},
}

Sentiti libero di includere anche il paper originale. Tuttavia, notiamo che HAL è cambiato massicciamente dal suo prototipo originale descritto nel paper. Preferiamo quindi citare la voce sopra.

root@kitploit:~
@article{2018:Fyrbiak:HAL,
    author = {Marc Fyrbiak and Sebastian Wallat and Pawel Swierczynski and Max Hoffmann and Sebastian Hoppach and Matthias Wilhelm and Tobias Weidlich and Russell Tessier and Christof Paar},
    title = {{HAL-} The Missing Piece of the Puzzle for Hardware Reverse Engineering, Trojan Detection and Insertion},
    journal = {IEEE Transactions on Dependable and Secure Computing},
    year = {2018},
    publisher = {IEEE},
    howpublished = {\url{https://github.com/emsec/hal}}
}

Per una panoramica delle sfide che ci siamo proposti di risolvere con HAL, sentiti libero di guardare il nostro talk al 36C3.

Licenza

HAL è concesso in licenza sotto la Licenza MIT per incoraggiare la collaborazione con altri gruppi di ricerca e i contributi dell'industria. Fare riferimento al file di licenza per ulteriori informazioni.

Disclaimer

HAL è al massimo un software di qualità alpha. Usalo a tuo rischio. Non incoraggiamo alcun uso malevolo del nostro toolkit.

Scarica lo strumento