Tento hacknutý skript mi zatím funguje:
import string
from evdev import InputDevice
from select import select
keys = "X^1234567890XXXXqwertzuiopXXXXasdfghjklXXXXXyxcvbnmXXXXXXXXXXXXXXXXXXXXXXX"
dev = InputDevice('/dev/input/by-id/usb-HID_OMNIKEY_5127_CK_01010053423438303000835748112531-event-kbd')
while True:
r,w,x = select([dev], [], [])
for event in dev.read():
if event.type==1 and event.value==1:
print( keys[ event.code ] )
Ke čtení z /dev/input/foo
používá python-evdev a velmi špinavě je převádí na čitelné hodnoty.
To je to, co dostanu, když spustím skript a připojím kartu ke čtečce:
[email protected] ~ $ python test.py
7
6
4
3
f
a
4
6
Zde je jednoduchý hack, aby to fungovalo snadno až do příštího spuštění, za předpokladu, že máte požadovaná oprávnění.
Pomocí následujícího příkazu zobrazíte všechny procesy běžící na počítači
ps -ef
Abychom našli PID procesu přihlášení/getty, odkud je klávesnice aktuálně načítána, můžeme výsledky této funkce předat přes grep.
ps -ef | grep tty
Mohli byste vidět něco jako
root 23698 1 0 18:17 ttyO0 00:00:00 /sbin/getty -L ttyO0 115200 vt102
Poznamenejte si číslo ve druhém sloupci – to je PID. A šestý sloupec, kde je klávesnice.
Chcete-li tento proces zastavit, použijte následující příkaz (nahrazením čísla za jakékoli vaše PID)
kill -stop 23698
Nyní můžete číst tty, odkud přicházejí klávesy klávesnice (tty je zobrazeno v příkazu ps)
cat /dev/ttyO0
cat
bude číst navždy a bude vydávat vše, co je zadáno na klávesnici, dokud ho nezabijete.
Až budete hotovi a budete se chtít vrátit k normálnímu chování, můžete obnovit funkci klávesnice pomocí
kill -cont 23698
To samozřejmě nastiňuje obecnou myšlenku. Ke čtení z tty můžete použít svůj vlastní program.
Musel jsem to udělat nedávno kvůli Hackathonu, tak jsem si řekl, že přispěji tím, co jsme nakonec udělali.
-
Nastavte autologin jako root na tty1 (hlavní terminál, kde klávesnice ukládá svůj vstup). Záznam wiki Arch Linux má dobré pokyny. Restartujte jej, abyste se mohli přihlásit.
-
Zkopírujte zdroj malého programu známého jako 'ttyEcho'. Jednu kopii lze nalézt zde, ale vyhledávání na Google přináší mnohem více. Tento program vám umožňuje odesílat příkazy do jiného terminálu. Kompilace na cílovém počítači.
-
Nyní, když můžeme spouštět cokoliv na /dev/tty1, stačí
./ttyEcho -n /dev/tty1 'cat > buffer'
pro získání všeho vstupu na tty1, který má být přidán do souboru. Místo vytváření stále se rozšiřujícího souboru použijtemkfifo buffer
nejprve vygenerujte speciální soubor, který je pouze pojmenovanou rourkou - frontou FIFO, která je zálohována pouze pamětí. -
Z vaší relace SSH můžete nyní pouze
tail -f filename
pro sledování všech vstupů z klávesnice na tty1. V rámci pythonu,open('filename','r')
a pokračujte ve volání.read()
nebo.readline()
na něj, abyste získali přísun dat z klávesnice, jakmile přicházejí.
Tato metoda byla pro nás skvělá, protože se vyhýbá analýze skenovacího kódu klávesnice a uchovává pěkně velkou vyrovnávací paměť dat bez jakéhokoli kódu.