banner
Centro notizie
La nostra promessa è quella di fornire tecnologie e soluzioni specializzate che siano affidabili ed efficienti.

Analizzatori logici: sfruttare i segreti di Raspberry Pi

Sep 02, 2023

Oggi vorrei mettere in evidenza uno strumento che porta le tue abilità di hacking a un livello completamente nuovo, e lo fa senza spendere una fortuna: in effetti, considerando quanto tempo di debug puoi risparmiare, quante attività divertenti puoi sbloccare, e le numerose funzionalità che puoi aggiungere, questo potrebbe essere uno degli strumenti più economici che otterrai. Che si tratti del debug di problemi strani, dell'ottimizzazione del codice, dell'esplorazione di un gadget su cui stai effettuando il reverse engineering o magari del tentativo di comprendere la libreria open source di qualcuno, probabilmente ti perderai molto se non hai un analizzatore logico a portata di mano !

Mi strazia il cuore che alcuni hacker ancora non conoscano il valore portato da un analizzatore logico. Più e più volte, l'applicazione tattica di un analizzatore logico mi ha aiutato a vedere una prospettiva completamente diversa su qualcosa su cui stavo lavorando, ed è proprio quello che vorrei dimostrare oggi.

Un analizzatore logico ha un numero di ingressi digitali e legge continuamente lo stato di questi ingressi digitali, inviandoli al computer o mostrandoli su uno schermo: è come un oscilloscopio solo a livello logico. Se disponi di un bus I2C con un MCU che controlla un sensore, collega un analizzatore logico all'orologio e ai pin dati, collega a terra, avvia il software dell'analizzatore logico sul tuo computer e guarda cosa sta realmente accadendo.

Ad esempio, hai mai notato i pin ID_SC e ID_SD sul connettore GPIO del Raspberry Pi? Ti stai chiedendo a cosa servono? Non vuoi verificare cosa succede effettivamente su questi pin? Facciamolo adesso!

Sto usando un analizzatore logico da $ 10 che puoi acquistare da Aliexpress o Amazon, un laptop e un Raspberry Pi con una scheda SD e un alimentatore. Ecco, è già cablato: servono solo tre fili femmina-femmina, due segnali e una terra. “SD” e “SC” suonano come I2C – la frequenza tipica I2C è solitamente 100 kHz o 400 kHz. Una buona regola pratica è impostare la frequenza su tre o quattro volte più grande della frequenza di clock del flusso di dati che stai per acquisire. Pertanto, intendo impostare la frequenza di campionamento del mio analizzatore logico su 2 MHz. Se risulta essere troppo lento per recuperare il ritardo con i dati trasferiti, posso aumentare la frequenza di campionamento ed eseguire nuovamente il campionamento.

Il software che sto utilizzando è Pulseview: è una GUI meravigliosa per gli analizzatori logici e può interfacciarsi con un'ampia varietà di analizzatori logici. È open source, compatibile con Linux, hackerabile e ha una buona UX, anche se non è stato mantenuto di recente. Puoi installarlo dal repository della tua distribuzione o scaricare il file .exe se sei su Windows. Con l'analizzatore logico collegato, lo collego alla porta USB, lancio Pulseview, imposto la frequenza di campionamento e la durata della lettura, che può essere infinita, disabilito tutti i canali tranne i due che mi interessano, premo 'Cattura' e collego il Pi al potere.

Dopo aver collegato il Pi, i livelli logici su entrambi i pin aumentano non appena viene visualizzata l'alimentazione a 3,3 V e, dopo alcuni secondi, si verifica una breve esplosione di attività su questi due pin. Ingrandendo, l'attività sembra effettivamente I2C – e in Pulseview è abbastanza facile da decodificare! Premi il pulsante "Decoder protocollo" sulla barra delle applicazioni delle impostazioni, digita "I2C" sulla tastiera, seleziona il decodificatore I2C, quindi fai doppio clic sul tag del decodificatore a sinistra e seleziona quali canali sono SCL e SDA: è facile dirlo, SCL apparirà come un segnale di clock con alti e bassi uguali, mentre gli intervalli alti e bassi su SDA varieranno; nell'immagine sopra, D1 è SCL e D0 è SDA. Ingrandendo gli eventi I2C decodificati, possiamo vedere che questa attività è costituita da richieste I2C di leggere dati dall'indirizzo 0x50 e queste richieste sono seguite da eventi NACK (indicatore rosso), il che significa che non ricevono risposta.

Ora, se hai esaminato la progettazione dell'HAT di Raspberry Pi, potresti già intuire che queste richieste I2C provengono dal bootloader di Raspberry Pi, che sta cercando la EEPROM I2C contenente le informazioni sul dispositivo sull'HAT, in modo che il Pi possa caricare il dispositivo L'albero sovrappone i dati da esso e utilizza tali dati per configurare qualsiasi hardware sull'HAT connesso. Non devi fare affidamento sulle poche informazioni disponibili online su questo processo: con un analizzatore logico puoi indagare su ciò che accade realmente, trovare eventuali funzionalità nascoste e avvertenze, in modo che anche l'hardware proprietario sia un piccolo ostacolo per te possibile.