sexta-feira, 28 de junho de 2013

Engenharia reversa no Arduino (2ª parte)

Outro dia eu postei como ler o conteúdo de um arquivo .hex compilado pelo Arduino IDE. Neste post vou mostrar como fazer o dump da memória do AVR de forma que possamos analisar seu conteúdo e descompilar as seções relacionadas ao programa.

Para fazer a comunicação com o AVR, existe um aplicativo chamado avrdude. Este aplicativo permite a transferência de dados entre o computador de o AVR de diversas formas: usb, interface serial ou paralela (usando programadores).


No meu caso, fazendo a conexão direta com o Arduino via usb o comando para fazer o dump da memória é:
# avrdude -D \
          -p atmega328p \
          -c arduino \
          -P /dev/ttyUSB0 \
          -b 57600 \
          -U flash:r:dump.hex:i


Este comando vai produzir um arquivo chamado dump.hex contendo o dump da memória flash do chip. Este comando pode ser alterado para baixar os dados de outras memórias contidas no AVR (calibration, eeprom, efuse, flash, fuse, hfuse, lfuse, lock, signature, fuseN, application, apptable, boot, prodsig, usersig - dependendo do modelo do AVR).

Um script simples mas interessante, escrito pelo usuário jippie do site stackexchange.com, que faz o dump de todas as memórias do AVR:
#!/bin/sh
for memory in calibration \
              eeprom \
              efuse \
              flash \
              fuse \
              hfuse \
              lfuse \
              lock \
              signature \
              application \
              apptable \
              boot \
              prodsig \
              usersig; do 
    avrdude -D \
            -patmega328p \
            -carduino \
            -P/dev/ttyUSB0 \
            -b57600 \
            -U${memory}:r:${memory}.hex:i
done

Referência

Nenhum comentário:

Postar um comentário