Remoticon 2021: Uri Sheded keert de ESP32 WIFI

waarvan u weet hoe wanneer u aan een project werkt, andere zij-speurtochten naar links en rechts verschijnen? U kunt ervoor kiezen om ze kort en summier te beheren, of u kunt in hun eigen recht in hen duiken. Welnu, Uri Shaked is de auteur van Wokwi, een online Arduino-simulator waarmee u onze code op Emulated Hardware kunt testen. (Het is heel, erg cool.) Terug in de dag gaf Arduino AVR aan, en hij legde een geweldige inspanningen op om reverse engineering die chip in kopen om het succesvol te emuleren. Maar dan geeft “Arduino” zoveel meer dan alleen AVR tegen deze dagen, zodat Uri de STM32-armspaanders en zelfs de recente RP2040 moest aanpakken.

Arduino draait ook op de ESP32, dus Uri op zijn reverse engineeringhoed (letterlijk) en ook het doel heeft genomen bij die chip. Maar de ESP32 is een ton die veel ingewikkelder is dan een van deze andere microcontrollers, die niet alleen is gebaseerd op de enigszins niche Xtensa-chip, maar ook aan boord van WIFI en de bijbehorende binaire firmware. Reverse Engineering De WiFi van de ESP32 is de zijdelingse zoektocht dat Uri begint aan, absoluut verplettert en papieren voor ons in deze opvallende Remoticon 2021 Talk.

Gluren en porren

De ESP32 behandelt de wifi als een geheugen-toegewezen randapparatuur, zoals u waarschijnlijk gewend bent op microcontrollers. Voor GPIO-pinnen geeft geheugenmapping bijvoorbeeld aan dat u een 1 of 0 in een bepaald stuk geheugen kunt schrijven, en het wordt een externe LED in of uit. Lees van die geheugenlocatie, en u kunt zien of iemand op een knop drukt. Voor WiFi is het over het algemeen hetzelfde, alleen het is meestal volledig ongedocumenteerd waar de geheugenadressen zijn en waarvoor ze zijn. Uri’s Technique gebruikt een debugger aan de JTAG op de fysieke hardware, een Ghidra-plug-in om hem te helpen aan de binaries te werken, en zijn eigen ESP32-simulator om dit allemaal uit te fret.

Ten eerste flitste hij een van de basis-ESP-IDF WIFI “Hello World” -programma’s in zijn simulator, draaide het Logging-staps- tot elf, en rende het totdat het gecrasht is. Wat het snel deed, omdat zijn simulator geen enkele van de WiFi-hardware had geëmuleerd. Met GDB, de debugger, kon hij erachter komen welke functie in het bijzonder gecrasht is. Toen nam hij die functie uit elkaar.

Recht van de vleermuis, hij heeft geluk gehad. Een functie, nuttig hal_mac_deinit () leek niet veel te doen behalve met een bepaald geheugenadres en wacht op een bepaald antwoord. Vervolgens programmeerde hij zijn simulator om die reactie te geven, waardoor het programma een beetje stroomafwaarts stroomafwaarts stroomde. Succes! Waartoe het geheugen adres in de vraag kaart? De datasheet zegt “gereserveerd”, maar het dreef niet te grote een sprong van het geloof om aan te nemen dat het een soort WiFi-register is.

De rest van het gesprek heeft URI die deze herhaalde ping-ponging tussen een gecrasht programma op zijn simulator beschrijft, met behulp van Ghidra en GDB om erachter te komen wat de gecrashte code doet, en vervolgens het gewenste gedrag in zijn simulator te integreren totdat dat stukje code is gewerkt . Wat is er echt geweldig, is dat dit eindigt met een simulatie van hoe de WiFi van de ESP32 aan de binnenkant werkt, die zo goed is dat hij Python MQTT-bibliotheken op het gesimuleerde apparaat kan leiden, en het werkt precies alsof het op de inheemse hardware draaide. Geweldig!

Dit is een geweldig gesprek, het leveren van een introductie op hoog niveau van reverse engineering met behulp van emulatie als een cruciaal gereedschap. Het is een geweldige techniek, en we zijn gestoord om te kunnen kijken over de metaforische schouders van Uri. bekijken!

Leave a Reply

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

Related Post