Você está na página 1de 8

http://sergioprado.

org/bus-pirate-o-piratados-barramentos/ Bus Pirate O pirata dos barramentos Bus Pirate O pirata dos barramentos
09/08/2012 - POR SERGIO PRADO
Categorias: Ferramentas, Hacking, Produtos Tags: bus pirate, i2c, protocolos, uart

Foi lendo um artigo no Hack a Day uns tempos atrs que descobri a ferramenta Bus Pirate daDangerous Prototypes. No hesitei em comprar. A ferramenta simplesmente fantstica! Durante os meus anos (e anos) de carreira na rea de embarcados, sempre estive envolvido com desenvolvimento de drivers e protocolos de comunicao. E quem trabalha com isso sabe como difcil debugar drivers e protocolos de comunicao, principalmente quando nada funciona. Sim, existem osciloscpios e analisadores lgicos. Mas os bons so caros. E eu s quero saber o que esta trafegando no barramento de comunicao. ai que entra o Bus Pirate!

O Bus Pirate uma espcie de interface universal barramentos de comunicao, com suporte 1-Wire, I2C, SPI, JTAG, UART, MIDI, PC keyboard, HD44780 LCDs e barramentos genricos de 2 ou 3 fios para protocolos customizados. De um lado temos um cabo USB que alimenta a placa e cria uma porta serial virtual quando voc a conecta no seu PC. Do outro lado temos um barramento de 10 pinos que voc ir conectar ao barramento que pretende manipular.

E o que ele consegue fazer com o barramento? Ele pode apenas monitorar o barramento de forma no-intrusiva, que chamamos de sniffing. Neste modo, voc ver tudo o que esta trafegando naquele barramento. Mas no responda ainda! Ele pode tambm manipular o barramento, enviar dados, configurar dispositivos conectados, etc. Ele mede frequncias na faixa de 1MHz a 40MHz, gera pulsosPWM de 1KHz a 4MHz, serve de analisador lgico para baixas frequncias na ordem de 10Hz a 1MHz. Ele suportado pelo AVRDUDE e pode ser usado como gravador de microcontroladoresAVR. E tambm suportado pelo OpenOCD e pode ser usado para debugar o kernel do pinguim mais famoso do mundo (o que espero em breve fazer por aqui!). E o melhor de tudo, o Bus Pirate 100% open source, tanto o hardware quanto o software! :) A documentao completa do projeto esta disponvel aqui. USANDO O BUS PIRATE Ao conectar o Bus Pirate na sua mquina de desenvolvimento, ser criada uma porta serial virtual, que voc poder acessar com sua aplicao de terminal de preferncia, como o minicom, picocom, putty ou hyperterminal (argh!). Abra sua aplicao de console, configure como 115200,8N1 e se conecte ao Bus Pirate. Todo o acesso ao Bus Pirate via linha de comando no terminal. A primeira vez que voc liga, ele comea num modo de alta impedncia, um modo seguro onde todas as sadas ficam desabilitadas, e voc ter acesso linha de comandos da ferramenta:
HiZ>

Se voc digitar ? ele ir exibir todos os comandos suportados:


HiZ>? General Protocol interaction --------------------------------------------------------------------------? This help (0) List current macros =X/|X Converts X/reverse X (x) Macro x ~ Selftest [ Start

# $ &/% a/A/@ b c/C d/D f g/S h i l/L m o p/P s v w/W

Reset Jump to bootloader Delay 1 us/ms AUXPIN (low/HI/READ) Set baudrate AUX assignment (aux/CS) Measure ADC (once/CONT.) 0b110 Measure frequency Generate PWM/Servo Commandhistory Versioninfo/statusinfo Bitorder (msb/LSB) Change mode Set output type Pullup resistors (off/ON) ! Script engine Show volts/states PSU (off/ON) //

] Stop { Start with read } Stop "abc" Send string 123 0x123 Send value r Read / CLK hi \ CLK lo ^ CLK tick DAT hi _ DAT lo . DAT read Bit read : Repeat e.g. r:10 . Bits to read/write e.g. 0x55.2 Usermacro x/assign x/list all

Um documento sobre como usar esta interface pode ser acessado aqui, e um guia completo de todos os comandos pode ser acessado aqui. Muito bem! Que tal agora us-lo para acessar o bootloader e a console de um roteador Wi-Fi e sniffar um barramento I2C? BUS PIRATE E A PORTA SERIAL Boa parte dos roteadores Wi-Fi disponveis no mercado so baseados em Linux. Voc pode inclusive substituir o firmware de fbrica destes roteadores por distribuies Linux conhecidas como o OpenWRT e o DD-WRT. Normalmente estes roteadores possuem uma sada de console, possibilitando acessar o bootloader do equipamento. Se voc no encontrar nenhuma informao na Internet sobre o roteador, s abri-lo. normalmente fcil identificar os pinos de conexo da console (o mais comum so 4 pontos de conexo, veja o exemplo abaixo). Identifique-o e solde uma barra de pinos para facilitar o acesso.

O problema que esta sada de console TTL, e trabalha com nveis lgicos de 0 a 5V. Ento no conseguimos ligar direto uma porta RS232, que trabalha com nveis lgicos de 12 a +12. Por outro lado, um prato cheio para nosso Bus Pirate, que fala TTL! Como eu j tinha aqui em casa um roteador da D-Link com a barra de pinos j soldada, decidi us-lo. Liguei o Bus Pirate no roteador baseado na pinagem abaixo:

Como no tinha nenhuma documentao, precisei adivinhar a pinagem do roteador. Descobri qual era o terra com um multmetro, e os pinos RX e TX eu conectei baseado na tentativa e erro. No final, ficou assim:

Acessei o terminal e configurei o modo UART no Bus Pirate:


HiZ>m 3 9 1 1 1 1 UART (spd brg dbp sb rxp hiz)=( 8 34 0 0 0 1 ) Ready

Depois habilitei o modo bridge:


UART>(1) UART bridge Reset to exit Are you sure? y

Neste modo, o Bus Pirate serve apenas como ponte entre o hardware que estamos monitorando e o PC. Na prtica, ele se transforma em um conversor USB/serial para acessarmos diretamente a console do roteador. Reiniciei o roteador e voil! Acesso total console do bichinho:
CFE version 1.0.37-106.5 for BCM96328 (32bit,SP,BE) Build Date: Fri Sep 10 21:14:22 CST 2010 (xueyinfeng@localhost.localdomain) Copyright (C) 2000-2009 Broadcom Corporation. HS Serial flash device: name ID_W25X64, id 0xef16 size 8192KB Total Flash size: 8192K with 128 sectors Chip ID: BCM6328B0, MIPS: 320MHz, DDR: 320MHz, Bus: 160MHz

Main Thread: TP0 Memory Test Passed Total Memory: 33554432 bytes (32MB) Boot Address: 0xb8000000 Board IP address : 192.168.1.1:ffffff00 Host IP address : 192.168.1.100 Gateway IP address : Run from flash/host (f/h) : f Default host run file name : ?|?~}}u_|~?>OWw<!--?6~O| Default host flash file name : w7w~-->~9n|xm|_|k?~>O>^{~~_><~~>n=0|z:>X^~~~^^w|Oz Boot delay (0-9 seconds) : 1 Board Id (0-6) : 96328AVNG Number of MAC Addresses (1-32) : 11 Base MAC Address : 1c:bd:b9:7c:20:d1 PSI Size (1-64) KBytes : 24 Enable Backup PSI [0|1] : 0 System Log Size (0-256) KBytes : 0 Main Thread Number [0|1] : 0

*** Press any key to stop auto run (1 seconds) *** Auto run second count down: 0 Booting from only image (0xb8010000) ... Code Address: 0x80010000, Entry Address: 0x80014230 Decompression OK! Entry at 0x80014230 Closing network. Disabling Switch ports. Flushing Receive Buffers... 0 buffers found. Closing DMA Channels. Starting program at 0x80014230 Linux version 2.6.30 (xueyinfeng@localhost.localdomain) (gcc version 4.4.2 (Buildroot 2010.02-git) 2011 HS Serial flash device: name ID_W25X64, id 0xef16 size 8192KB 96328AVNG prom init CPU revision is: 0002a075 (Broadcom4350) Determined physical RAM map: memory: 01f00000 @ 00000000 (usable) Zone PFN ranges: DMA 0x00000000 -> 0x00001000 Normal 0x00001000 -> 0x00001f00 Movable zone start PFN for each node early_node_map[1] active PFN ranges ...

Para mais informaes sobre os comandos de acesso UART, clique aqui. SNIFFANDO O BARRAMENTO I2C Vou fazer aqui alguns testes com o barramento I2C usando o kit de desenvolvimentoLPC3250 da Embedded Artists. Olhei o esquemtico da placa, e identifiquei os pinos SDA eSCL do barramento I2C0 no conector de expanso 3. Como no

tinha nenhuma barra de pinos sobrando por aqui (preciso visitar a Santa Efignia em breve!) soldei uns fios e conectei no Bus Pirate:

Iniciei o terminal e configurei o modo I2C no Bus Pirate:


HiZ>m 4 2 I2C (mod spd)=( 0 1 ) Ready

Que tal escanear o barramento e identificar os endereos de todos os dispositivos conectados nele?
I2C>(1) Searching I2C address space. Found devices at: 0xA0(0x50 W) 0xA1(0x50 R) 0xAE(0x57 W) 0xAF(0x57 R) 0xC0(0x60 W) 0xC1(0x60 R) 0xCC(0x66 W)

Encontrei 4 dispositivos no barramento I2C0, com os endereos (de 7 bits) 0x50, 0x57, 0x60 e 0x66. Legal, n? :) E que tal monitorar a comunicao no barramento? Como eu estava com o Linux rodando na placa, forcei o acesso um expansor de I/O conectado ao barramento I2C, e monitorei o barramento:
I2C>(2) Sniffer Any key to exit [0xC0+0x06+][0xC0+0x04+][0xC0+0x10-0xC1+0x01+][0xC0+0x10+][0xC0+0x10-0xC1+0x05+]

[0xC0+0x10+]

Para mais informaes sobre os comandos de acesso ao barramento I2C, clique aqui. ONDE COMPRAR? O projeto da Dangerous Prototypes. O objetivo destes caras desenvolver e liberar um projeto de hardware aberto todo ms. Os projetos so baratos, com preos variando de $10 a $50. Voc pode comprar qualquer produto deles, incluindo o Bus Pirate, na Seeed Studio ou em outros distribuidores. Eu comprei na Seeed Studio neste link aqui. Custou 27,15 doletas e chegou em duas semanas. Nada mal para um produto que serve de conversor USB/Serial, programa microcontroladores e memrias flash, debuga chips ARM, um analisador lgico, medidor e gerador de frequncias, e que por acaso nos ajuda a hackear barramentos de comunicao :) Happy Hacking! Sergio Prado. Twitter6 Google +1 Facebook8 LinkedIn Email
< ARTIGO ANTERIORPRXIMO ARTIGO >

NAVEGUE

Ok >

Este trabalho de Sergio Prado licenciado pelo Creative Commons BY-NC-SA 3.0.

Você também pode gostar