Pular para o conteúdo
Todos os conceitos

Dump de memória flash

A cópia da memória de um aparelho embarcado traz o firmware e, numa partição própria, a configuração dele.

Aparelhos pequenos (roteadores, sensores, rádios, placas como o ESP32) guardam tudo num chip de memória flash. Um perito lê o chip inteiro, com um programador ou pela porta serial, e trabalha na cópia: o dump, um arquivo cru em que o byte 0 é o primeiro byte do chip.

O dump é dividido em partições. No ESP32, a tabela fica em 0x8000, com entradas de 32 bytes que começam com AA 50, seguidas de tipo, subtipo, início, tamanho e nome:

Partição típica O que guarda
nvs pares chave e valor pequenos (versão do firmware, contadores, às vezes senhas de Wi-Fi)
app0, app1 o firmware (o programa) e uma segunda cópia para atualização
spiffs um sistema de arquivos com a configuração e os dados do usuário
coredump a memória no momento de um travamento, quando houve
dump.bin: o chip inteiro, do byte 0 ao fim … tabela 0x8000 nvs chave e valor app0 firmware app1 cópia spiffs configuração coredump travamento uma entrada de 32 bytes AA 50 tipo subtipo início tamanho spiffs … o início diz onde a partição está
O dump é o chip inteiro dividido em partições; a tabela em 0x8000 tem uma entrada de 32 bytes por partição, começando com AA 50, e o campo de início diz onde fica cada uma, como a spiffs, que guarda a configuração.

A partição de arquivos costuma ser LittleFS ou SPIFFS. Para abrir: recorte a partição com dd (skip e count em blocos de 4096 bytes) e extraia com littlefs-python extract part.bin saida --block-size 4096 (pacote do pip). Os arquivos de configuração costumam ser binários estruturados, como protobuf, que protoc --decode_raw ou o Protobuf Decode do CyberChef (abre em nova aba) mostram campo a campo. Sem ferramenta nenhuma, strings -t x dump.bin já revela nomes, servidores e versões, e onde eles estão.

Aparece nestes desafios