Per vedere un esempio in C# di un "virus" che catturi i valori immessi con la tastiera si può visitare questa pagina di Microsoft https://docs.microsoft.com/en-us/archive/blogs/toub/low-level-keyboard-hook-in-c . Usando il codice scritto qui , possiamo verificare che l'applicazione legge ogni carattere digitato ,l'esempio si limita a stampare con la Console.WriteLine ma un keylogger potrebbe salvare i caratteri digitati permettendo di appropriarsi anche delle password digitate .Modifichiamo la riga 40 dell'esempio così :
Console.WriteLine("premuto carattere: " + (Keys)vkCode );
eseguiamo il programma(anche solo in debug) e digitiamo qualche carattere sulla tastiera :
Ho digitato i caratteri "p,a,s,s,w,o,r,d" e premuto il tasto "Stamp" ed il keylogger ha registrato l'attività della tastiera. Proviamo ad utilizzare la tastiera virtuale di windows ottenibile premendo la combinazione di tasti "Ctrl + Win + o" :
ho digitato i caratteri "q,w,e,r,t,y" sulla tastiera virtuale di windows ed il key logger li ha catturati senza problemi , se quindi vogliamo che dati importanti , quali ad esempio una password inserita in un textbox di un applicazione , siano più protetti , possiamo scrivere poche righe di codice per utilizzare una nostra tastiera virtuale con cui scrivere la "password" e passarla all'indirizzo del textbox che normalmente valorizziamo direttamente premendo i tasti sulla tastiera ,indispensabile comunque l'uso di un buon antivirus sul pc.
Per trovare l'indirizzo del box ,a cui assegneremo il valore della password digitata con la tastiera virtuale, possiamo utilizzare , ad esempio, WinSpy o WinSpy ++ (la versione attuale di Visual Studio 2022 ha sotto la voce del menu "Strumenti" Spy++) :
usiamo il finder tool (WinSpy) :
Tastiera virtuale |
{
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
private static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam, string lParam);
const int WM_SETTEXT = 0X000C;
public Form1()
{
InitializeComponent();
}
{
SendMessage(ptr, WM_SETTEXT, 0, testo);
}
private void button1_Click(object sender, EventArgs e)
{
string memoryAddress = this.textBox1.Text;
string textBoxPasswordValue = this.textBox2.Text;
string hex_value = memoryAddress;
//convert from hex to integer
int int_value = Convert.ToInt32(hex_value, 16);
IntPtr p1 = new IntPtr(int_value);
this.SendMessageToTextBox(p1,textBoxPasswordValue);
}
private void button1_Click_1(object sender, EventArgs e)
{
string current=this.textBox2.Text;
this.textBox2.Text = current + "1";
}
private void button2_Click(object sender, EventArgs e)
{
string current = this.textBox2.Text;
this.textBox2.Text = current + "2";
}
private void button3_Click(object sender, EventArgs e)
{
string current = this.textBox2.Text;
this.textBox2.Text = current + "3";
}
private void button4_Click(object sender, EventArgs e)
{
string current = this.textBox2.Text;
this.textBox2.Text = current + "4";
}
private void button5_Click(object sender, EventArgs e)
{
string current = this.textBox2.Text;
this.textBox2.Text = current + "5";
}
private void button6_Click(object sender, EventArgs e)
{
string current = this.textBox2.Text;
this.textBox2.Text = current + "6";
}
private void button7_Click(object sender, EventArgs e)
{
string current = this.textBox2.Text;
this.textBox2.Text = current + "7";
}
private void button8_Click(object sender, EventArgs e)
{
string current = this.textBox2.Text;
this.textBox2.Text = current + "8";
}
private void button9_Click(object sender, EventArgs e)
{
string current = this.textBox2.Text;
this.textBox2.Text = current + "9";
}
private void button10_Click(object sender, EventArgs e)
{
string current = this.textBox2.Text;
this.textBox2.Text = current + "0";
}
}
catturiamo l'indirizzo del textbox come sopra , nel frattempo ho riavviato l'applicazione "destinataria" e quindi è cambiato l'indirizzo del textbox :
inseriamo i valori della password e l'indirizzo del textbox nell'applicazione che invia il valore della password al textbox :
premiamo il bottone "Aggiungi" e troveremo il textbox "destinazione" valorizzato con la nostra password senza passare dalla tastiera ed evitando i possibili keylogger