REMOTICON 2021: URI Amak Shaked Reverses El ESP32 WiFi

¿Sabe cómo cuando está trabajando en un proyecto, otras misiones secundarias aparecen a la izquierda y la derecha? Puede elegir administrarlos brevemente y sumariamente, o puede sumergirse en ellos como proyectos por derecho propio. Bueno, URI Shaked es el autor de WOKWI, un simulador de Arduino en línea que le permite probar nuestro código en hardware emulado. (Es muy, muy bien.) De vuelta en el día, Arduino indicó AVR, y puso un asombroso esfuerzo en ingeniería inversa que Chip in Buy para emularlo con éxito. Pero entonces “Arduino” indica mucho más que solo AVR en estos días, por lo que URI tuvo que abordar los chips de brazo STM32 e incluso el reciente RP2040.

Arduino también funciona en el ESP32, por lo que URI se puso en su sombrero de ingeniería inversa (literalmente) y también tomó la meta en ese chip. Pero el ESP32 es una tonelada mucho más complicada que cualquiera de estos otros microcontroladores, se basa no solo en el chip ligeramente nicho XTENSA, sino que también tiene WiFi a bordo y su firmware binario asociado. Ingeniería inversa El WiFi de la ESP32 es la búsqueda lateral que Uri se embarca, absolutamente aplastados y documentos para nosotros en esta charla Remócrata 2021 de Standout.

Asomando y asomando

El ESP32 trata al WiFi como un periférico mapeado en la memoria, como lo está acostumbrado a los microcontroladores. Para los pasadores de GPIO, por ejemplo, la asignación de memoria indica que puede escribir un 1 o 0 en un bit de memoria particular, y encenderá o apagará un LED externo. Lea la ubicación de esa memoria, y puede saber si alguien está presionando un botón. Para WiFi, generalmente es lo mismo, solo está en su mayoría completamente indocumentado donde las direcciones de memoria son y para qué son. La técnica de URI utiliza un depurador a la JTAG en el hardware físico, un plugin de Ghidra para ayudarlo a trabajar en los binarios, y su propio simulador de ESP32 a Ferret, todo esto fuera.

En primer lugar, mostró uno de los programas básicos de WIFI “Hello World” en su simulador, encendió la verbosidad de registro hasta once, y lo corrió hasta que se estrelló. Lo que hizo rápidamente, porque su simulador no tenía ninguno de los hardware WiFi emulado todavía. Con GDB, el depurador, podría descubrir qué función se estrelló particularmente. Luego apareció esa función.

Directamente fuera del bate, tuvo suerte. Una función, llamada hal_mac_deinit () no parecía hacer mucho, excepto que escriba valores particulares a una dirección de memoria fija, y espere una respuesta particular. Luego programó su simulador para dar esa respuesta, lo que hizo que el programa se bloqueara un poco adicionalmente descendente. ¡Éxito! ¿A qué se dirige la memoria en el mapa de preguntas? La hoja de datos dice “reservada”, pero no se necesitó un salto de fe demasiado grande para asumir que es algún tipo de registro de control WiFi.

El resto de la charla tiene URI que describe este pong-pong repetido entre un programa estrellado en su simulador, utilizando Ghidra y GDB para averiguar cuál hace el código estrellado, y luego integrar el comportamiento deseado en su simulador hasta que funcione ese bit de código. . Lo que es genuinamente sorprendente es que esto termina con una simulación de cómo funciona el WiFi de ESP32 en el interior, eso es tan bueno que puede ejecutar bibliotecas de Python MQTT en el dispositivo simulado, y funciona exactamente como si estuviera ejecutando en el hardware nativo. ¡Asombroso!

Esta es una gran charla, suministrando una introducción de alto nivel de ingeniería inversa utilizando la emulación como una herramienta crucial. Es una gran técnica, y estamos avivados para haber podido mirar por encima de los hombros metafóricos de Uri. ¡Echale un vistazo!

Leave a Reply

Your email address will not be published. Required fields are marked *