Table des matières
Analyse des keycodes d’un clavier sous Unix/Linux
À la première étude, on pense à des keycodes type JavaScript, mais finalement non. En regardant du côté de Xorg, on peut trouver deux fichiers intéressants :
/usr/share/X11/xkb/symbols/fr
/usr/share/X11/xkb/keycodes/evdev
Si on prend la première ligne “key press 46”, recherchons l’occurrence 46 dans le fichier evdev :
$ grep "= 46;" evdev
<AC09> = 46;
Et si on essaye de trouver son occurrence dans “symbols/fr” :
$ grep "<AC09>" fr | head -n1
key <AC09> { [ l, L, 0x1000140, 0x100013F ] }; // l L ŀ Ŀ
La première ligne est un “L” Essayons chaque ligne avec une méthode un peu plus automatique.
Analyse à l’arrache
On va coder un petit script qui va se charger d’aller chercher les différents keycodes :
grep "key press" petite_frappe_2.txt | while read line;
do
keycode=$(echo "${line}" | awk '{ print $3 }');
keycode=$(grep "= ${keycode};" /usr/share/X11/xkb/keycodes/evdev | awk '{ print $1 }')
grep "${keycode}" /usr/share/X11/xkb/symbols/fr | head -n1 | awk -F'[' '{ print $2 }' | awk '{ print $1 }'
done
Et en l’exécutant :
$ ./get-keycode.sh | xargs
l, a, space, s, o, l, u, t, i, o, n, space, a, v, e, c,
space, x, i, n, p, u, t, space, n, e, space, s, e, m, b, l, e,
space, p, a, s, space, s, u, p, e, r, space, p, r, a, t, i, q, u, e,
space, a, space, d, e, c, o, d, e, r, semicolon, space, l, e,
space, f, l, a, g, space, e, s, t, space, u, n, underscore,
c, l, a, v, i, e, r, underscore, a, z, e, r, t, y, underscore,
e, n, underscore, v, a, u, t, underscore, d, e, u, x,
On découvre une phrase :
la solution avec xinput ne semble pas super pratique a decoder: le flag est un_clavier_azerty_en_vaut_deux
Le flag est donc … ? :)
FCSC{un_clavier_azerty_en_vaut_deux}
Version avec xmodmap
On peut sinon le faire de manière bourrine en filtrant avec l’output xmodmap :
grep "key press" petite_frappe_2.txt | while read line;
do
keycode=$(echo "${line}" | awk '{ print $3 }');
xmodmap -pke | grep " ${keycode} = " | awk '{ print $4 }
done;
$ ./scan.sh | xargs
l a space s o l u t i o n space a v e c space x i n p u t space n e
space s e m b l e space p a s space s u p e r space p r a t i q u e
space a space d e c o d e r Shift_R semicolon space l e space f l a g
space e s t space u n underscore c l a v i e r underscore a z e r t y
underscore e n underscore v a u t underscore d e u x