questo documento serve sia all'utilizzatore che al programmatore, anche perche` se non sapete programmare e' dura correggere la miriade di bachi, volontariamente o meno, sono dentro la codice. allora, i phile presenti sono: DNSflood.h client2.c fload.proto.h routins.lib.h server.c smurf.h tcpflood.h udp_comm.h client_udp_spoof.h routins.lib.h: questo file contiene tutti gli include utuili alla parte server, e le principali routine, ovvero quella per il checksum dei pacchetti, e la routine di resolv, che converte o l'hostname o l'ip in formato stringa (pio.vaticano.va o "123.4.55.66") convertito secondo le specifiche del byte order. fload.proto.h: questa lib contiene la struttura per il controllo del server che viene riempita dal client, si divide in 4 strutture minori. smurf.h: libreria che contiene la funzione x utilizzare sto` cazzo di attacco, quello che succede in ordine e`: 1) si prepara l'area di memoria che verra` occupata dal pacchetto, si apre il socket e lo si manipola con IP_HDRINCL questa flag di setsockopt() serve per evitare che il kernel caghi il pacchetto. 2) si apre il file di broadcast, questo file contiene tutte le broadcast che verranno utilizzate per l'attacco in pila nel file dopo averle allocate e numerate chiude il file. 3) tutti i campi del paccetto vengono settati, il pacchetto pseudo-completo viene passato all'ultimo ciclo 4) l'ultimo ciclo (che si ripete il numero di pacchetti da inviare) riempie i campi che cambiano ogni volta (come l'ip destinazione che e` uno degli ip di broadcast a rotazione) e termina con l'invio del pacchetto con sendto(). tcpflood.h: questa invece fa`: 1) alloca il pacchetto iniziale, lo switch() a meta` libreria serve per leggere la stringa di dati che rappresenta i flag da usare, finche` non riempie lo pseudo pacchetto. 2) si entra nella routine per inviare i pacchetti, i campi che devono cambiare lo fanno in modo incrementale (id, porta sorgente, numero di sequenza), la porta destinazione e l'ip sorgente se sono fissi rimangono tali o se sono 0 cambiano in modo random. DSNflood.h: questo attacco si basa su query dns mandata a nome della vittima un query dns e` una richiesta di informazioni che si fa` con un pacchetto udp di circa 30 byte, che implica una risposta da 300 - 1000 byte. la libreria fa`: 1) inizializza tutto, pacchetto socket e apre il file. 2) il file viene aperto e memorizzato in 2 differenti locazioni: 155.12.143.77 \004ciao\003iol\002to che sta` per: 155.12.143.77 ciao.iol.to che e` il dns al quale mandiamo il pacchetto. il file deve avere 2 colonne separate da UNO spazio, la prima colonna contiene l'ip la seconda il resolv encodato. (l'encoding si fa` sostituendo il "." con \00x, con x numero di caratteri fino al prossimo punto o alla fine dell'hostname) 3) solito ciclo che invia i pacchetti N volte, N = 0 = infinito. server.c: questo file per ora: 1) si manda in background, prende come argomenti la porta sulla quale si installa e prende i nomi dei file di droadcast e di dns poi sta` ad aspettare informazioni da parte del client, quando gli arrivano processa la struttura e agisce di conseguenza, se e` un comando di inizio attacco controlla quale routine far partire, froka un processo figlio e lo fa` andare, gli altri comandi che possono essere inviati sono "finiscila" (killa tutti gli attacchi) e cancellati, prima si cancella fisicamente dal disco e poi si uccide. client2.c: client, prende informazioni in modo interattivo, riempie la struttura che si aspetta il server e la invia, sta` in ascolto di eventuali messaggi di errore, nel caso si usi ip spoofing per inviare i comandi al server, le risposte non le vedremo mai (ma si potrebbe indicare l'ip a cui inviare le risposte nella struttura...) udp_comm.c: contiene le routine + comuni per inviare dati UDP in chiaro client_udp_spoof.h: contiene le routine per il raw sock in udp, come dato viene passata la struttura, i campi sono settati in modo standard. nota, questa e` solo una beta, per fare un DDoS serio, e anche interessante da portare all'hackit00 c'e` ancora da fare parecchio :)