Différences entre les versions de « Cyber/chall/HTB/Hardware »
(→Trace) |
(→Trace) |
||
Ligne 51 : | Ligne 51 : | ||
|R7||GP23 | |R7||GP23 | ||
|} | |} | ||
<p>On fait donc un programme en Python permettant de décoder les valeurs.</p> | |||
<pre> | |||
#!/usr/bin/env python | |||
# -*- coding:Utf-8 -*- | |||
import sys | |||
import numpy | |||
#import argparse | |||
def main(): | |||
f = open('traces.csv', 'r') | |||
nbrerows = 8 | |||
nbrecols = 8 | |||
ledmatrix = [[0]*nbrerows]*nbrecols | |||
#Remove the first line (header) | |||
f.readline() | |||
for line in f: | |||
line = line[:-1] | |||
data = line.split(',') | |||
#print('%s %s' % (len(data), data[0])) | |||
#Traitement du décodage ici | |||
decodecol(data, ledmatrix) | |||
#print('-----') | |||
f.close() | |||
''' | |||
Decodage du message. | |||
Colonne = cathode de la LED | |||
Ligne = Anode de la LED | |||
LED allumée si RowX = 1 et ColY = 0 | |||
''' | |||
def decodecol(data: list, ledmatrix): | |||
#print('%s'%(data[0])) | |||
rowstr = data[3] + data[14] + data[13] + data[11] + data[16] + data[6] + data[7] + data[12] | |||
colstr = data[10] + data[9] + data[15] + data[8] + data[4] + data[2] + data[1] + data[5] | |||
decoded = rowstr + '\n' + colstr | |||
rowvalue = int(rowstr,2) | |||
colvalue = int(colstr,2) | |||
ledmatrix[int(numpy.log(rowvalue)/numpy.log(2))] = colstr | |||
if (rowvalue == 128): | |||
affiche(ledmatrix) | |||
print('----') | |||
return True | |||
def affiche(ledmatrix): | |||
value = '' | |||
for r in ledmatrix: | |||
for c in r: | |||
if (c == '0'): | |||
value += '#' | |||
else: | |||
value += ' ' | |||
print(value) | |||
value = '' | |||
if (__name__ == '__main__'): | |||
main() | |||
sys.exit() | |||
</pre> |
Version du 5 avril 2022 à 15:29
Debugging Interface
On télécharge un fichier sans lequel il y a un fichier .sal.
Après une recherche sur Internet, on trouve que c'est un fichier issu d'une sonde logique de chez SALEAE.[1]
Sur le site on trouve le logiciel Logic2 qui permet d'ouvrir ce type de fichiers.
On ajoute un analyseur Async Serial depuis le menu de droite.
En regardant le début de la trame, on voit qu'un bit a une période de 32µs. Un calcul rapide donne un baudrate de 31211.
L'analyseur logique est donc réglé en 31211, 8, N, 1.
Trace
Dans le fichier Trace, on trouve :
- un fichier CSV comprenant la séquence des signaux analysés.
- Un dossier contenant les fichiers Gerber d'un Raspberry Pi Hat
La première chose à faire est de constituer une image des couches utiles avec l'outil Gerbv pour les avoir sur la même image.
On prends donc Gerber_BottomLayer.GBL, Gerber_TopLayer.GTL, Gerber_BoardOutline.GKO et Gerber_TopSilkLayer.GTO.
Puis on récupère le brochage du connecteur d'extention de la Raspberry Pi 3 B+
Puis on fait la matrice des signaux afin d'identifier les LED allumées en fonction de la séquence.
Signal | Broche du RPi |
C0 | GP16 |
C1 | GP5 |
C2 | GP6 |
C3 | GP13 |
C4 | GP19 |
C5 | GP26 |
C6 | GP20 |
C7 | GP21 |
R0 | GP12 |
R1 | GP25 |
R2 | GP24 |
R3 | GP22 |
R4 | GP27 |
R5 | GP17 |
R6 | GP18 |
R7 | GP23 |
On fait donc un programme en Python permettant de décoder les valeurs.
#!/usr/bin/env python # -*- coding:Utf-8 -*- import sys import numpy #import argparse def main(): f = open('traces.csv', 'r') nbrerows = 8 nbrecols = 8 ledmatrix = [[0]*nbrerows]*nbrecols #Remove the first line (header) f.readline() for line in f: line = line[:-1] data = line.split(',') #print('%s %s' % (len(data), data[0])) #Traitement du décodage ici decodecol(data, ledmatrix) #print('-----') f.close() ''' Decodage du message. Colonne = cathode de la LED Ligne = Anode de la LED LED allumée si RowX = 1 et ColY = 0 ''' def decodecol(data: list, ledmatrix): #print('%s'%(data[0])) rowstr = data[3] + data[14] + data[13] + data[11] + data[16] + data[6] + data[7] + data[12] colstr = data[10] + data[9] + data[15] + data[8] + data[4] + data[2] + data[1] + data[5] decoded = rowstr + '\n' + colstr rowvalue = int(rowstr,2) colvalue = int(colstr,2) ledmatrix[int(numpy.log(rowvalue)/numpy.log(2))] = colstr if (rowvalue == 128): affiche(ledmatrix) print('----') return True def affiche(ledmatrix): value = '' for r in ledmatrix: for c in r: if (c == '0'): value += '#' else: value += ' ' print(value) value = '' if (__name__ == '__main__'): main() sys.exit()