Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
hal — HAL – El Analizador de Hardware | Kitploit
Herramientas/GitHubGitHub/emsec/hal
Seguridad de Sistemas EmbebidosIngeniería InversaHacking de HardwareSeguridad de HardwareSeguridad de Hardware e IoTAnálisis de BinariosPapers e InvestigaciónAprendizaje y EducaciónAnálisis de Firmware
GitHubemsec/hal

hal

HAL – El Analizador de Hardware

814958hace 11 díasRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Ver Repositorio

¡Bienvenido a HAL!

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

HAL [/hel/] es un framework integral de ingeniería inversa y manipulación de netlist.

Captura de pantalla de HAL

Navegación

  1. Introducción
  2. Instrucciones de compilación
  3. Guía de inicio rápido
  4. Contexto académico

Introducción

¿Qué demonios es HAL?

Prácticamente toda la investigación disponible sobre análisis de netlist opera sobre una representación basada en grafos de la netlist bajo inspección. En su núcleo, HAL proporciona exactamente eso: un framework para analizar netlist de fuentes arbitrarias, por ejemplo, FPGAs o ASICs, en una representación de netlist basada en grafos y proporcionar las herramientas integradas necesarias para el recorrido y análisis de las puertas y nets incluidas.

Nuestra visión es que HAL se convierta en el equivalente de herramientas como IDA o Ghidra para la ingeniería inversa de hardware. Queremos que HAL proporcione una base común para investigadores y analistas para mejorar la reproducibilidad de los resultados de investigación y abstraer tareas básicas recurrentes como el análisis de netlists, etc.

  • Alto rendimiento gracias al núcleo C++ optimizado
  • Flexibilidad mediante enlaces de Python integrados
  • Modularidad mediante un sistema de complementos en C++
  • Estabilidad garantizada a través de un amplio conjunto de pruebas

HAL es desarrollado activamente por el grupo de Seguridad Integrada del Instituto Max Planck para la Seguridad y la Privacidad. Además de múltiples proyectos de investigación, también se utiliza en nuestra conferencia universitaria "Einführung ins Hardware Reverse Engineering" (Introducción a la Ingeniería Inversa de Hardware) en la Universidad del Ruhr en Bochum (RUB).

Tenga en cuenta que también tenemos un conjunto de circuitos de referencia modernos de última generación para la evaluación de técnicas de ingeniería inversa de netlist disponibles en un repositorio separado.

Complementos incluidos

Este repositorio contiene una selección de complementos seleccionados:

  • GUI: Una GUI rica en funciones que permite la inspección visual y el análisis interactivo de netlist
    • Integración nativa de un shell de Python con acceso a los enlaces de Python de HAL
    • Aislamiento de puertas o módulos específicos para una inspección sin desorden
    • Recorrido interactivo de netlists
    • Widgets detallados con información sobre todos los aspectos de la netlist inspeccionada
  • Simulador de netlist: Un simulador para partes arbitrarias de una netlist cargada
  • Análisis de flujo de datos: Nuestro plugin de análisis de flujo de datos DANA que recupera registros de alto nivel en una netlist no estructurada
  • Algoritmos de grafos: Integración de igraph para acceso directo a algoritmos comunes de la teoría de grafos
  • Shell de Python: Un plugin de línea de comandos para iniciar un shell de Python precargado con los enlaces de Python de HAL
  • Analizadores VHDL y Verilog: Agrega soporte para analizar archivos VHDL y Verilog como formatos de entrada de netlist
  • Analizador Liberty: Agrega soporte para bibliotecas de puertas arbitrarias en el formato estándar liberty
  • Escritores VHDL y Verilog: Agrega soporte para serializar una netlist (modificada) a archivos VHDL o Verilog sintetizables
  • Bibliotecas de puertas: Agrega soporte para las bibliotecas de puertas XILINX Unisim y Simprim

Documentación

Una documentación completa de las características de HAL desde la perspectiva del usuario está disponible en nuestra Wiki. Además, proporcionamos documentación completa de la API de C++ y API de Python.

Instrucciones de compilación

Para instrucciones sobre cómo compilar HAL, consulte la página dedicada en nuestra Wiki.

Guía de inicio rápido

Instale HAL o compile HAL e inicie la GUI con hal -g. Puede listar todas las opciones disponibles con hal [--help|-h]. Hemos incluido algunos proyectos de ejemplo en el subdirectorio examples. Para comenzar con un proyecto de ejemplo, debe importarlo a través de Import Project desde el menú principal o arrastrando el archivo comprimido en el área OPEN PROJECT de la pantalla de bienvenida. Al hacerlo, aparecerá una ventana emergente solicitando un directorio con permisos de escritura donde HAL creará el directorio del proyecto y descomprimirá los archivos. No utilice herramientas externas para descomprimir, ya que se realizan adaptaciones para que la netlist y la biblioteca de puertas se encuentren la próxima vez que se abra el proyecto.

En caso de que desee abrir su propia netlist Verilog o VHDL, debe ejecutar Import Netlist en su lugar. Esto solo funcionará si hay una biblioteca de puertas correspondiente en plugins/gate_libraries/definitions o si proporciona la biblioteca de puertas manualmente. Para obtener instrucciones sobre cómo crear su propia biblioteca de puertas y otros tutoriales útiles, eche un vistazo a la wiki.

El siguiente código de ejemplo se refiere al ejemplo fsm.

Use el shell de Python integrado o la ventana de scripts de Python para interactuar. Ambos cuentan con funcionalidad de autocompletado (limitada).

Listemos todas las tablas de búsqueda e imprimamos sus funciones booleanas:

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

Para la netlist de ejemplo fsm.vhd esto imprime:

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)

Contribuciones

Te damos la bienvenida a contribuir al desarrollo de HAL. No dudes en enviar una nueva solicitud de extracción (pull request) a través de GitHub. Considere ejecutar las verificaciones estáticas + clang format antes de eso. También puede instalar estas verificaciones como ganchos de git (git hooks) antes de cualquier commit.

Ejecutar verificaciones estáticas y clang format localmente

Para instalar el gancho clang-format, instale git-hooks y ejecute:

git hooks --install

Inicie la compilación Docker con: docker-compose run --rm hal-build

Generar Changelog

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

Contexto académico

Si utiliza HAL en un contexto académico, cite el framework utilizando la referencia a continuación:

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

Siéntase libre de incluir también el artículo original. Sin embargo, notamos que HAL ha cambiado masivamente desde su prototipo original descrito en el artículo. Por lo tanto, preferimos citar la entrada anterior.

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

Para obtener una visión general de los desafíos que nos propusimos resolver con HAL, no dudes en ver nuestra charla en 36C3.

Licencia

HAL está licenciado bajo la Licencia MIT para fomentar la colaboración con otros grupos de investigación y contribuciones de la industria. Consulte el archivo de licencia para obtener más información.

Descargo de responsabilidad

HAL es, como máximo, software de calidad alfa. Úselo bajo su propio riesgo. No fomentamos ningún uso malicioso de nuestro conjunto de herramientas.

Descargar herramienta