Remoticon 2021: URI SHAKED inverte o ESP32 WiFi

0 Comments

Você sabe como quando você está trabalhando em um projeto, outras missões laterais aparecem à esquerda e para a direita? Você pode optar por gerenciá-los brevemente e sumariamente, ou você pode mergulhar neles como projetos por direito próprio. Bem, Uri SHAKED é o autor de Wokwi, um simulador de arduino online que permite testar nosso código no hardware emulado. (É muito, muito legal.) De volta no dia, Arduino indicava AVR, e ele colocou algum esforço incrível em engenharia reversa que chip na compra para emulá-lo com sucesso. Mas então “Arduino” indica muito mais do que apenas AVR nos dias de hoje, então Uri teve que enfrentar os chips do braço STM32 e até mesmo o RP2040 recente.

Arduino funciona no ESP32 também, então Uri colocou seu chapéu de engenharia reversa (literalmente) e tomou meta naquele chip também. Mas o ESP32 é uma tonelada muito mais complicada do que qualquer um desses outros microcontroladores, baseado não apenas no chip xtensa ligeiramente nicho, mas também tendo wifi a bordo e seu firmware binário associado. Engenharia reversa O WiFi do ESP32 é a busca lateral que URI embarca, absolutamente esmaga e papéis para nós neste destacante remoticon 2021 conversa.

Espreitar e cutucar

O ESP32 trata o Wi-Fi como um periférico mapeado à memória, como você provavelmente é usado em microcontroladores. Para os pinos GPIO, por exemplo, o mapeamento de memória indica que você pode escrever um 1 ou 0 em um determinado bit de memória, e desligará um LED externo ligado ou desligado. Leia a partir desse local de memória, e você pode dizer se alguém está empurrando um botão. Para Wi-Fi, é geralmente a mesma coisa, apenas é completamente completamente indocumentada, onde os endereços da memória são e o que são. A técnica de Uri usa um depurador para o jtag no hardware físico, um plugin de Ghidra para ajudá-lo a trabalhar nos binários e seu próprio simulador ESP32 para Ferret, tudo isso.

Primeiramente, ele piscou um dos programas básicos do WiFi Wi-Fi Wi-Fi “Hello World” em seu simulador, transformou o registro de verbosidade até onze, e correu até que ele caiu. Que rapidamente, porque seu simulador não tinha nenhum dos hardwares WiFi emitidos ainda. Com o GDB, o depurador, ele poderia descobrir qual função em particular caiu. Então ele levou essa função separada.

Em linha reta do bastão, ele teve sorte. Uma função, prestativa chamada hal_mac_deinit () não pareceu fazer muito, exceto gravar valores específicos para um endereço de memória fixa e aguarde uma resposta específica. Ele então programou seu simulador para dar essa resposta, que fez o programa cair um pouco adicionalmente a jusante. Sucesso! O que o endereço da memória no mapa de perguntas? A folha de dados diz “reservado”, mas não demorou um grande salto de fé para assumir que é algum tipo de registro de controle WiFi.

O resto da palestra tem URI descrevendo este repetido ping-ponging entre um programa caído em seu simulador, usando Ghidra e GDB para descobrir o que o código caído faz, e, em seguida, para integrar o comportamento desejado em seu simulador até que esse bit de código funcionasse . O que é genuinamente incrível é que isso acaba com uma simulação de como o Wi-Fi do ESP32 funciona por dentro que é tão bom que ele pode executar bibliotecas do Python MQTT no dispositivo simulado, e funciona exatamente como se estivesse sendo executado no hardware nativo. Incrível!

Esta é uma ótima conversa, fornecendo uma introdução de alto nível de engenharia reversa usando emulação como uma ferramenta crucial. É uma ótima técnica, e estamos alimentados por terem sido capazes de olhar sobre os ombros metafóricos de Uri. Confira!


Leave a Reply

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