Voltar aos artigos
Beginner

Extraindo Firmware de Chips SPI Flash Usando um Bus Pirate e Sondas Clip-On

Este conteúdo é fornecido **APENAS** para fins de **EDUCAÇÃO** e **TESTES DE SEGURANÇA AUTORIZADOS**.

@0xrafasecFebruary 18, 2026hardware_and_firmware

Available in English

Share:

Extraindo Firmware de Chips SPI Flash Usando um Bus Pirate e Sondas Clip-On

Legal & Ethical Disclaimer

This content is provided for EDUCATIONAL and AUTHORIZED SECURITY TESTING purposes only.

DO
  • Use these techniques on systems you own or have explicit written permission to test
  • Practice in authorized lab environments (VulnHub, HackTheBox, DVWA, etc.)
  • Follow responsible disclosure practices when finding vulnerabilities
  • Use knowledge for defensive security and authorized penetration testing
DO NOT
  • Access systems without explicit authorization
  • Use these techniques for malicious purposes
  • Deploy exploits against production systems you don't own
  • Share working exploits for unpatched vulnerabilities

Legal warning

Unauthorized access to computer systems is illegal in most jurisdictions (e.g. CFAA in the US, Computer Misuse Act in the UK). Violators may face criminal prosecution and civil liability. The author and publisher assume no liability for misuse of this information. By continuing, you agree to use this knowledge ethically and legally.

O Firmware Já Está Lá. Você Só Precisa Pedir Educadamente.

Todo roteador, câmera IP, eletrodoméstico inteligente e dispositivo Linux embarcado que você já tocou tem um segredo na sua placa: um pequeno chip de oito pernas que contém tudo — o bootloader, o SO, as credenciais, as chaves privadas, a configuração hardcoded. Não está atrás de um firewall. Não está criptografado por um serviço em nuvem. Está sentado em uma placa, milímetros das suas mãos, esperando para ser lido.

A extração de firmware é o ponto de entrada para quase todos os engagement sérios de segurança de hardware. Antes de poder fazer engenharia reversa em um binário, antes de encontrar injeção de comando em uma interface web que você nem sabia que existia, antes de entender o que um dispositivo realmente está fazendo em tempo de execução — você precisa do firmware. E no mundo embarcado, esse firmware quase sempre vive em um chip de flash SPI NOR. Extraí-lo de forma não-destrutiva, sem dessoldar um único componente, é uma das habilidades mais valiosas no toolkit de um pesquisador de hardware.

Este guia o leva pelo processo completo: identificar o chip certo na PCB alvo, entender o protocolo SPI o suficiente para fazer sentido do que está acontecendo, anexar sondas clip SOIC in-circuit, e despejar uma imagem binária bruta usando um Bus Pirate e flashrom. Passaremos tempo igual nas partes que a maioria dos tutoriais pula — resolvendo problemas de interferência de circuitos vizinhos, e verificando que o que você leu é realmente o que está no chip.


🎯 TL;DR

O QuêDetalhes
ObjetivoDespejar firmware bruto de um chip SPI NOR flash sem dessoldar
HardwareBus Pirate v3/v4, clip SOIC-8, PCB do dispositivo alvo
Softwareflashrom, binwalk, md5sum
ProtocoloSPI (Serial Peripheral Interface) — 4 fios
Desafio principalInterferência in-circuit de outros componentes no barramento SPI
Verificar integridadeLer 3× e comparar hashes MD5

4. Fundamentos & Teoria

O Que É SPI e Por Que o Firmware Vive Lá?

SPI — Serial Peripheral Interface — é um protocolo de comunicação serial síncrono desenvolvido pela Motorola nos anos 1980. É simples, rápido e barato de implementar em silício, o que é exatamente por que designers embarcados adoram. Um chip de flash SPI é um dispositivo de memória não-volátil: retém dados sem energia, o que o torna ideal para armazenar firmware que deve sobreviver a um ciclo de energia.

O protocolo usa quatro sinais:

┌─────────────────────────────────────────────┐
│  MOSI  →  Master Out, Slave In              │
│  MISO  ←  Master In, Slave Out              │
│  CLK   →  Clock (master drives timing)      │
│  CS    →  Chip Select (active LOW)          │
└─────────────────────────────────────────────┘

O mestre (no nosso caso, o Bus Pirate) aciona o relógio e inicia todas as transações. O escravo (o chip de flash) responde apenas quando seu pino CS é puxado para BAIXO. Isto é importante: quando CS está ALTO, o chip ignora tudo no barramento. Quando você o puxa para BAIXO, você está dizendo "estou falando com você especificamente."

Chips de flash SPI NOR — chips como a série Winbond W25Q, série Macronix MX25L, e série GigaDevice GD25Q — tipicamente armazenam entre 512KB e 128MB. Para a maioria dos dispositivos embarcados de consumidor (roteadores, câmeras, nós IoT), você encontrará chips de 4MB a 32MB. Estes são mais que suficientes para manter um kernel Linux comprimido, um sistema de arquivos raiz, e um bootloader U-Boot.

O Pacote SOIC-8: O Que Você Está Olhando

O chip físico que você estará visando está quase sempre em um pacote SOIC-8 — um retângulo pequeno com quatro pinas de cada lado, oito no total. O pacote é aproximadamente 5mm × 4mm, tornando-o pequeno mas absolutamente manejável com o clip certo.

A pina 1 está sempre marcada. No chip físico, é denotada por um pequeno ponto, um entalhe em uma extremidade, ou ocasionalmente uma linha. Este é seu âncora de orientação. Todas as outras pinas são numeradas no sentido anti-horário da pina 1 quando o chip é visto de cima:

        ┌──────────┐
  CS ──1┤          ├8── VCC
  SO ──2┤  SOIC-8  ├7── HOLD/RESET
  WP ──3┤          ├6── CLK
 GND ──4┤          ├5── SI
        └──────────┘
   (Pinout SPI NOR padrão — verifique contra datasheet)

Sempre verifique isto contra o datasheet específico do seu chip. O layout geral acima é típico para partes da série W25Q, mas variações existem. Puxe o datasheet antes de tocar em qualquer coisa.


5. Onde Se Encaixa no Fluxo de Trabalho

A extração de firmware se situa bem no início de um engagement de segurança de hardware, dentro da fase de reconhecimento e coleta de artefatos.

Loading diagram…

Antes de você poder:

  • Identificar credenciais hardcoded
  • Encontrar serviços vulneráveis executando no boot
  • Fazer engenharia reversa em protocolos proprietários
  • Analisar mecanismos de atualização para fraquezas de assinatura

...você precisa do binário. Tudo mais é downstream deste passo.

Uma vez que você tenha um dump bruto, binwalk se torna seu próximo instrumento — pode identificar limites de compressão, sistemas de arquivos (SquashFS, JFFS2, cramfs), e extrair componentes individuais. De lá, você pode emular o firmware com QEMU, realizar análise estática com Ghidra, ou executar análise dinâmica iniciando o dispositivo com um console serial UART anexado. A extração que você realiza aqui é a semente para tudo isso.


6. Conceitos Chave em Profundidade

6.1 Identificando o Chip Alvo

Antes de clipar qualquer coisa, gaste tempo com a PCB em si. O objetivo é encontrar o chip de flash SPI e combiná-lo com seu datasheet. Aqui está como abordar isto:

  1. Procure pelo pacote SOIC-8 perto do SoC principal (System on Chip) ou CPU. Chips de flash estão quase sempre colocados perto do processador que faz boot deles. Em roteadores, geralmente ficam perto do switch SoC Ethernet. Em câmeras, perto do processador de imagem.

  2. Leia as marcações no topo do chip. O texto gravado a laser fornecerá um código de fabricante e número de peça. Prefixos comuns: W25Q (Winbond), MX25L (Macronix), GD25Q (GigaDevice), EN25Q (EON). Os números após o prefixo codificam a capacidade — por exemplo, W25Q64 é um chip de 64Mbit (8MB).

  3. Procure o número da peça + "datasheet" no seu navegador. O datasheet confirmará o pinout, voltagem operacional (3.3V é padrão; algumas peças mais antigas usam 5V — isto importa para suas configurações do Bus Pirate), e modos SPI suportados.

⚠️ Incompatibilidade de voltagem é um risco real. O Bus Pirate sai com lógica 3.3V por padrão para SPI. Conectá-lo a um chip de 5V sem level shifting pode danificar o Bus Pirate. Verifique o VCC do chip antes de energizar qualquer coisa.

6.2 Anexando o Clip SOIC In-Circuit

O clip SOIC-8 (também chamado de clip Pomona SOIC-8 ou clip de teste SOIC) é uma mandíbula em mola que agarra todas as oito pinas simultaneamente sem soldar. É elegante, não-destrutivo, e rápido de anexar.

Passos-chave de anexação:

  • Oriente o clip combinando seu marcador de pina 1 (geralmente um fio vermelho ou canto marcado) com o ponto de pina 1 do chip
  • Pressione para baixo até sentir/ouvir assentar completamente — um clip assentado parcialmente é a #1 causa de leituras ruins
  • Verifique sob ampliação (uma lupa ou zoom de câmera de telefone funciona) que cada mandíbula está em contato com sua respectiva pina, não conectando duas

Fio o clip ao Bus Pirate da seguinte forma:

Pina Bus Pirate   →   Pina Chip Flash (SOIC-8)
─────────────────────────────────────────────
MOSI             →   SI   (Pina 5)
MISO             →   SO   (Pina 2)
CLK              →   CLK  (Pina 6)
CS               →   CS   (Pina 1)
GND              →   GND  (Pina 4)
3.3V             →   VCC  (Pina 8)
3.3V             →   HOLD (Pina 7) — puxar ALTO para desabilitar
3.3V             →   WP   (Pina 3) — puxar ALTO para desabilitar proteção de escrita

HOLD e WP são importantes. Se HOLD for puxado para BAIXO, o chip pausa sua operação atual e ignora o barramento — sua leitura travará ou falhará silenciosamente. Se WP não estiver acionado ou flutuando, o comportamento de proteção de escrita se torna imprevisível. Prenda ambos em ALTO a 3.3V para colocar o chip em um estado limpo e cooperativo.

6.3 Despejando com flashrom

flashrom é uma utilidade open-source que suporta centenas de chips de flash e dezenas de programadores, incluindo o Bus Pirate. No Linux, instale via seu gerenciador de pacotes ou compile do source.

Primeiro, identifique o dispositivo serial do Bus Pirate:

bash
dmesg | grep tty
# Procure por algo como: /dev/ttyUSB0

Execute flashrom para sondar e identificar o chip:

bash
flashrom -p buspirate_spi:dev=/dev/ttyUSB0,spispeed=1M

Se flashrom detectar o chip, você verá output como:

Found Winbond flash chip "W25Q64.V" (8192 kB, SPI) on buspirate_spi.

Se você vir No EEPROM/flash device found, não entre em pânico ainda — é aqui que a resolução de problemas começa (veja seção 6.4). Uma vez identificado, despeje o firmware:

bash
flashrom -p buspirate_spi:dev=/dev/ttyUSB0,spispeed=1M -r firmware_dump1.bin

A flag -r significa read. O arquivo firmware_dump1.bin conterá a imagem binária bruta exatamente como armazenada no chip.

Nota de velocidade: O Bus Pirate não é rápido. Em relógio SPI de 1MHz, ler um chip de 8MB leva vários minutos. Isto é normal. Programadores mais rápidos como o CH341A ou um Raspberry Pi em modo SPI podem fazer o mesmo trabalho em segundos, mas o Bus Pirate é excelente para aprender porque o expõe à mecânica SPI subjacente.

6.4 Resolvendo Problemas de Interferência In-Circuit

Esta é a seção que a maioria dos tutoriais pula, e é onde a maioria dos iniciantes fica presa. Quando o chip de flash está em uma PCB ao vivo com energia aplicada, outros componentes compartilham o mesmo barramento SPI ou trilhas de energia e podem ativamente interferir com suas leituras.

Modos de falha comuns e correções:

SintomaCausa ProvávelCorreção
flashrom não consegue detectar chip nenhumClipe de assentamento ruim ou fiaçãoReassente o clip; verifique conexões com multímetro
Chip detectado mas leitura falha no meio do caminhoCPU host também acionando o barramento SPIDesligue o dispositivo; corte caminho de energia se necessário
Chip detectado mas ID incorreto retornadoMúltiplos dispositivos no barramento SPISelecione apenas seu chip alvo com CS
Leituras bem-sucedidas mas hashes diferemIntegridade de sinal / ruídoReduza spispeed para 125K ou 250K

A abordagem mais confiável: desligar o dispositivo alvo. Quando o dispositivo está desligado, o SoC não está acionando o barramento SPI, e você é o único mestre. Conecte VCC e GND através do seu clip Bus Pirate (ou via fonte de alimentação de bancada), deixando o resto da placa desligado. Isto elimina a maioria da interferência.

Se você deve ler com a placa energizada (raro mas às vezes necessário), você arrisca contenção de barramento — tanto o SoC quanto o Bus Pirate acionando sinais simultaneamente. Alguns pesquisadores usam um analisador lógico em paralelo para observar o que está no barramento antes de sondar.

6.5 Verificando Integridade do Dump com Leituras Repetidas

Uma única leitura nunca é o suficiente. Memória flash, problemas de contato de clip, e ruído de sinal podem todos produzir leituras que parecem bem-sucedidas mas contêm erros de bit. A prática padrão é ler três vezes e comparar hashes MD5:

bash
flashrom -p buspirate_spi:dev=/dev/ttyUSB0,spispeed=1M -r firmware_dump1.bin
flashrom -p buspirate_spi:dev=/dev/ttyUSB0,spispeed=1M -r firmware_dump2.bin
flashrom -p buspirate_spi:dev=/dev/ttyUSB0,spispeed=1M -r firmware_dump3.bin

md5sum firmware_dump1.bin firmware_dump2.bin firmware_dump3.bin

Se todos os três hashes combinarem, você tem uma leitura estável e confiável:

a3f1c92d...  firmware_dump1.bin
a3f1c92d...  firmware_dump2.bin
a3f1c92d...  firmware_dump3.bin

Se os hashes diferem, não proceda à análise com um dump corrompido. Reassente o clip, reduza a velocidade do relógio SPI com spispeed=125K, e tente novamente. Um hash incompatível significa que pelo menos uma — possivelmente todas — de suas leituras contém erros.

Uma vez que você tenha um dump verificado, passe-o para binwalk para reconhecimento inicial:

bash
binwalk firmware_dump1.bin

binwalk identificará assinaturas de arquivo embarcadas — headers uImage, sistemas de arquivos SquashFS, blobs de kernel comprimido — e lhe dará um mapa do que está dentro. De lá, binwalk -e (extract) carve componentes individuais para análise mais profunda.


7. Alternativas & Comparação

O Bus Pirate não é o único jeito de conversar com SPI. Aqui está como se compara com alternativas comuns:

FerramentaVelocidadeCustoMelhor Para
Bus PirateLento (~1MHz)~$30Aprendizado, exploração de protocolo
CH341A programmerRápido~$5Dumps rápidos, menos flexibilidade
Raspberry Pi (modo SPI)Rápido~$15+Fluxos de trabalho scriptados, tooling customizado
Dediprog SF600Muito rápido~$150+Uso profissional/laboratório
FT232H breakoutModerado~$15flashrom compatível, flexibilidade GPIO

O CH341A é extremamente popular para esta tarefa específica porque é barato, rápido, e nativamente suportado por flashrom. Sua fraqueza é que opera em 5V por padrão — o que pode danificar chips de 3.3V sem uma modificação de voltagem. O Bus Pirate, por contraste, é explicitamente configurável e transparente sobre o que está fazendo em nível de protocolo, o que é por que é a ferramenta pedagógica melhor.


8. Aprendizados & Leitura Adicional

O que você aprendeu aqui:

  • Chips de flash SPI são o meio primário de armazenamento de firmware em dispositivos embarcados, e lê-los in-circuit é não-destrutivo quando feito corretamente
  • Orientação de pina 1 e verificação de datasheet são passos inegociáveis antes de anexar qualquer sonda
  • Pinas HOLD e WP devem ser presas em ALTO para garantir leituras limpas e ininterruptas
  • Interferência in-circuit do SoC host é o modo de falha dominante — desligar a placa o elimina
  • Três leituras + comparação MD5 é a barra mínima para confiar em um dump antes da análise

📚 Leitura Adicional & Recursos:

  • Documentação do projeto flashrom — matriz de suporte de chips, lista de programadores, resolução de problemas
  • Documentação SPI do Bus Pirate — modos de protocolo e cores de fio
  • The Hardware Hacker por Andrew "bunnie" Huang — a referência essencial de longa forma para segurança de hardware
  • Car Hacker's Handbook de Craig Smith — extração de sistemas embarcados em contexto automotivo
  • Datasheet Winbond W25Q128 — uma referência excelente para entender conjuntos de comandos SPI NOR (comandos padrão JEDEC)
  • Documentação binwalk e o Firmware Analysis Toolkit (FAT) para análise pós-extração
  • Cursos de hacking de hardware de Joe Grand (Grand Idea Studio) — excelente conteúdo em vídeo para aprendizes visuais

Seu próximo passo: Uma vez que você tenha um dump de firmware verificado e binwalk tenha mapeado sua estrutura, o trabalho real começa. Extrair o sistema de arquivos raiz revela a superfície de ataque real — credenciais padrão, servidores web customizados, daemons telnet, e chaves de API hardcoded. O chip nunca foi o alvo. O chip era a porta.

Achou este artigo interessante? Siga-me no X e no LinkedIn.