HAL, un framework de ingeniería inversa para circuitos electrónicos digitales
HAL es un entorno integrado para el análisis de la lista de circuitos electrónicos digitales, este es un marco integral de ingeniería inversa y manipulación para netlists a nivel de puerta que se centra en la eficiencia, la capacidad de ampliación y la portabilidad. HAL viene con un sistema de complementos completo que permite introducir funcionalidades arbitrarias en el núcleo.
Lo interesante de HAL es que permite ver y analizar el circuito en la GUI y manipularlo utilizando scripts de Python. En los scripts, se puede usar la “biblioteca estándar” adjunta de funciones que implementan operaciones de teoría de grafos, útiles para la ingeniería inversa de circuitos electrónicos digitales (usando estas funciones, se puede detectar heurísticamente varios patrones de diseño y eliminar ofuscaciones simples con un script en varias líneas).
La biblioteca también incluye clases para la gestión de proyectos en el IDE, que se pueden usar al desarrollar complementos para el análisis y la inspección de conexiones. Se proporcionan analizadores para los lenguajes de descripción de hardware VHDL y Verilog.
Este entorno está desarrollado por varias universidades alemanas, escrito en C ++, Qt y Python y liberado bajo la licencia MIT.
De sus principales características se destacan las siguientes:
- Representación gráfica natural dirigida de elementos de netlist y sus conexiones.
- Soporte para bibliotecas de puertas personalizadas.
- Alto rendimiento gracias al núcleo C ++ optimizado
- Modularidad: escriba sus propios complementos de C ++ para un análisis y manipulación eficiente de la lista de redes (por ejemplo, mediante algoritmos de gráficos)
- Una GUI rica en funciones que permite la inspección visual de la lista de redes y el análisis interactivo
- Un shell de Python integrado para interactuar explorativamente con elementos de netlist y para interactuar con complementos desde la GUI
Sobre la versión de HAL 2.0.0
Actualmente este entorno se encuentra en su versión 2.0.0 en la cual los analizadores VHDL y Verilog fueron mejorados, junto con el sistema de compilación CMake que se actualizo para usar configuraciones basadas en objetivos.
También se destaca que se añadió soporte para jerarquización y modularización, así como también una vista de aislamiento adicional y un nuevo sistema de diseño.
De los demás cambios que se mencionan de esta nueva version:
- Cambios en el sistema de biblioteca de puerta
- BDD reemplazados con funciones booleanas
- Cambios importantes en la representación interna de los tipos de compuerta
- Permite la diferenciación entre LUT, flip-flops, pestillos y tipos de compuerta combinacional
- En Latches y Flip-flops ahora se pueden especificar entradas secuenciales especiales como habilitar, reloj, configurar y restablecer.
- Se reemplazaron las bibliotecas de puertas JSON con archivos de libertad
- Sistema de complementos simplificado
- Biblioteca de igraph incluida
- Revisión principal de la GUI
¿Cómo instalar HAL en Ubuntu y derivados?
Para quienes estén interesados en instalar este marco de ingeniería inversa para circuitos electrónicos, pueden hacerlo siguiendo las instrucciones que compartimos a continuación.
HAL se puede instalar de dos formas en Ubuntu y derivados, la primera de ellas es apoyándonos del repositorio de la aplicación (Valido solo para Ubuntu 18.04).
Este lo podemos añadir al sistema con ayuda de una terminal (la pueden abrir con el atajo de teclas Ctrl + Alt + T) y en ella vamos a teclear los siguientes comandos.
Primero vamos a añadir del repositorio con:
sudo add-apt-repository ppa:sebastian-wallat/hal
Actualizamos los paquetes y lista de repositorios con:
sudo apt-get update
Y procedemos a realizar la instalación de la aplicación en nuestro sistema tecleando el siguiente comando:
sudo apt install hal-reverse
El otro método de instalación es mediante la compilación de la aplicación en el sistema. Para ello tenemos que descargar el código de HAL con ayuda de una terminal.
Primero vamos a teclear:
git clone https://github.com/emsec/hal.git && cd hal
Ahora vamos a instalar las dependencias necesarias:
./install_dependencies.sh
Y procedemos a realizar la compilación del código con:
mkdir build && cd build cmake .. make
Ya terminada la compilación, procedemos a realizar la instalación con:
make install
Finalmente pueden consultar la documentación y demás información al respecto de HAL en el siguiente enlace.