Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
hal — HAL – L'analyseur matériel | Kitploit
Outils/GitHubGitHub/emsec/hal
Sécurité des Systèmes EmbarquésRétro-ingénierieHacking MatérielSécurité MatérielleSécurité Matériel et IoTAnalyse de BinairesArticles et RechercheApprentissage et ÉducationAnalyse de Micrologiciel
GitHubemsec/hal

hal

HAL – L'analyseur matériel

81495il y a 6 joursVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Voir le dépôt

Bienvenue sur HAL !

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

HAL [/hel/] est un framework complet de rétro-ingénierie et de manipulation de netlists.

HAL Screenshot

Navigation

  1. Introduction
  2. Instructions de construction
  3. Guide de démarrage rapide
  4. Contexte académique

Introduction

Qu'est-ce que HAL ?

Virtuellement toutes les recherches disponibles sur l'analyse de netlists reposent sur une représentation sous forme de graphe de la netlist inspectée. Au cœur, HAL fournit exactement cela : un framework pour parser des netlists de sources arbitraires, par exemple FPGA ou ASIC, en une représentation de netlist basée sur un graphe, et pour fournir les outils intégrés nécessaires au parcours et à l'analyse des portes et des fils inclus.

Notre vision est que HAL devienne l'équivalent en rétro-ingénierie matérielle d'outils comme IDA ou Ghidra. Nous voulons que HAL permette une base commune aux chercheurs et analystes pour améliorer la reproductibilité des résultats de recherche et abstraire les tâches récurrentes de base telles que le parsing de netlists.

  • Haute performance grâce au cœur C++ optimisé
  • Flexibilité via les liaisons Python intégrées
  • Modularité grâce à un système de plugins C++
  • Stabilité assurée par une suite de tests riche

HAL est développé activement par le groupe Embedded Security du Max Planck Institute for Security and Privacy. En plus de multiples projets de recherche, il est également utilisé dans notre cours universitaire "Einführung ins Hardware Reverse Engineering" (Introduction à la rétro-ingénierie matérielle) à l'Université de la Ruhr à Bochum (RUB).

Notez que nous avons également un ensemble de circuits de benchmark modernes et à l'état de l'art pour l'évaluation des techniques de rétro-ingénierie de netlists, disponible dans un dépôt séparé.

Plugins fournis

Ce dépôt contient une sélection de plugins soigneusement choisis :

  • GUI : Une interface graphique riche permettant l'inspection visuelle des netlists et l'analyse interactive
    • Intégration native d'un shell Python avec accès aux liaisons Python de HAL
    • Isolation de portes ou modules spécifiques pour une inspection sans encombrement
    • Parcours interactif des netlists
    • Widgets détaillés avec des informations sur tous les aspects de la netlist inspectée
  • Netlist Simulator : Un simulateur pour des parties arbitraires d'une netlist chargée
  • Dataflow Analysis : Notre plugin d'analyse de flux de données DANA qui retrouve les registres de haut niveau dans une netlist non structurée
  • Graph Algorithms : Intégration d'igraph pour un accès direct aux algorithmes courants de la théorie des graphes
  • Python Shell : Un plugin en ligne de commande pour lancer un shell Python préchargé avec les liaisons Python de HAL
  • VHDL & Verilog Parsers : Ajoute la prise en charge du parsing de fichiers VHDL et Verilog comme formats d'entrée de netlist
  • Liberty Parser : Ajoute la prise en charge de bibliothèques de portes arbitraires au format standard liberty
  • VHDL & Verilog Writers : Ajoute la prise en charge de la sérialisation d'une netlist (modifiée) en fichiers VHDL ou Verilog synthétisables
  • Gate Libraries : Ajoute la prise en charge des bibliothèques de portes XILINX Unisim et Simprim

Documentation

Une documentation complète des fonctionnalités de HAL du point de vue de l'utilisateur est disponible dans notre Wiki. De plus, nous fournissons une documentation complète de l'API C++ et de l'API Python.

Instructions de construction

Pour les instructions de construction de HAL, veuillez vous référer à la page dédiée de notre Wiki.

Guide de démarrage rapide

Installez HAL ou construisez-le et lancez l'interface graphique via hal -g. Vous pouvez lister toutes les options disponibles via hal [--help|-h]. Nous avons inclus quelques projets d'exemple dans le sous-répertoire examples. Pour démarrer avec un projet d'exemple, vous devez l'importer via Import Project depuis le menu principal ou en déposant le fichier zippé dans la zone OPEN PROJECT de l'écran d'accueil. Ce faisant, une fenêtre contextuelle demandera un répertoire avec des droits d'écriture où HAL créera le répertoire du projet et décompressera les fichiers. N'utilisez pas d'outils externes pour la décompression car des adaptations sont faites pour que la netlist et la bibliothèque de portes soient trouvées la prochaine fois que le projet est ouvert.

Si vous souhaitez ouvrir votre propre netlist Verilog ou VHDL, vous devez exécuter Import Netlist à la place. Cela ne fonctionnera que si une bibliothèque de portes correspondante existe dans plugins/gate_libraries/definitions ou si vous fournissez manuellement la bibliothèque de portes. Pour des instructions sur la création de votre propre bibliothèque de portes et d'autres tutoriels utiles, jetez un œil au wiki.

Le code d'exemple suivant se réfère à l'exemple fsm.

Utilisez le shell Python intégré ou la fenêtre de script Python pour interagir. Les deux offrent une fonctionnalité d'autocomplétion (limitée).

Listons toutes les tables de correspondance et affichons leurs fonctions booléennes :

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("")

Pour la netlist d'exemple fsm.vhd, cela affiche :

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)

Contribuer

Vous êtes invités à contribuer au développement de HAL. N'hésitez pas à soumettre une nouvelle pull request via GitHub. Veuillez envisager d'exécuter les vérifications statiques + clang format avant cela. Vous pouvez également installer ces vérifications en tant que hooks git avant chaque commit.

Exécuter les vérifications statiques et clang format localement

Pour installer le hook clang-format, installez git-hooks et exécutez :

git hooks --install

Lancez la construction Docker via : docker-compose run --rm hal-build

Générer le journal des modifications

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

Contexte académique

Si vous utilisez HAL dans un contexte académique, veuillez citer le framework en utilisant la référence ci-dessous :

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}},
}

N'hésitez pas à inclure également l'article original. Cependant, nous notons que HAL a massivement changé depuis son prototype original décrit dans l'article. Par conséquent, nous préférons citer l'entrée ci-dessus.

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}}
}

Pour obtenir un aperçu des défis que nous nous proposons de résoudre avec HAL, n'hésitez pas à regarder notre talk au 36C3.

Licence

HAL est sous licence MIT pour encourager la collaboration avec d'autres groupes de recherche et les contributions de l'industrie. Veuillez vous référer au fichier de licence pour plus d'informations.

Avertissement

HAL est au mieux un logiciel de qualité alpha. Utilisez-le à vos propres risques. Nous n'encourageons aucune utilisation malveillante de notre boîte à outils.

Télécharger l’outil