#!/usr/bin/perl # TABSIZE=3 =begin html
=end html =head1 NAME virus.pl -- ein Dorfdepp-Virus fuer Linux, Windows, FreeBSD, Mac OS (X), ... in Perl =head1 SYNOPSIS ./virus.pl perl virus.pl ./virus.pl mein@kumpel.de perl virus.pl meine@feinde.de ./virus.pl du@depp.de tina@trulla.org noch@jemand.net =head1 DESCRIPTION Dieses tolle Programm ist ein ganz boeser Dorfdepp-Virus nicht nur fuer Linux sondern vollkommen Systemunabhaengig: Entwickelt unter FreeBSD, auch lauffaehig unter Windows ... Toll, was? =head1 AUTHOR Alvar C.H. Freude, 12. Januar 2004 virus-feedback@alvar.a-blast.org http://alvar.a-blast.org/ =head1 COPYRIGHT, LICENSE Dieses Programm steht unter der GPL http://www.gnu.org/copyleft/gpl.html =head1 DOWNLOAD http://alvar.a-blast.org/dorfdepp/virus/virus.pl =head1 SEE ALSO Dank an *FAFNIR* im Heise-Forum fuer die Anregung: http://www.heise.de/security/news/foren/go.shtml?read=1&msg_id=4876735&forum_id=51569 =head1 HISTORY =over 3 =item Version 1.2, 26. Maerz 2004 SMTP-Engine freigabe Als Absender wird nun der Login-Name genutzt =item Version 1.1, 27. Januar 2004 Nun mit eigener SMTP-Engine! =item Version 1.03, 19. Januar 2004 Fehlerbehebung: teilweise auskommentierter Mail-Teil wieder rein ... Englische Variablennamen anstatt Perls kryptischer Kurz-Namen ($ARG statt $_, $PROGRAM_NAME statt $0) usw. =item Version 1.02, 19. Januar 2004 Nun mit URL in Mail und anderer Kleinkram =item Version 1.00, 12. Januar 2004 Erste oeffentliche Version =back =head1 TODO Binaerversion fuer Win, Linux, FreeBSD -- damit auch DAU-kompatibel ;-) GUI (im eigenen Thread) Suche nach moeglichen Empfaengern auf der ganzen Platte (File::Find im Thread) ... =cut # # Ein paar externe Module # use warnings; # Warnungen anschalten use strict; # variablen muessen angemeldet werden u.a. use English; # lange Spezialvariablen use MIME::Lite; # MIME::Lite konstruiert und verschickt auch komplexe MIME-Mails einfach use Net::SMTP; # SMTP-Engine fuer unseren eigenen Mail-Auslieferer use Net::Domain qw(hostdomain); # Domainkram fuer lokale Kiste use Net::DNS; # DNS-Arbeiten leicht gemacht use vars qw($VERSION); # auch fuer alte Perls: globale Variable $VERSION $VERSION="1.2"; my $mail = qq{Hi! Ich bin ein Dorfdepp. Wenn Du auch einer werden willst, starte das beiliegende Programm und gebe als Parameter die Deine E-Mail-Adressen Deiner Kumpels an. Bis Bald, Dein Dorfdepp. # Generated with DORFDEPP-VIRUS $VERSION # http://alvar.a-blast.org/dorfdepp/virus/ }; my @to = ('dorfdepp-virus@alvar.a-blast.org', 'newstips@heise.de', @ARGV); foreach my $to (@to) # Fuer alle aus dem Empfaenger-Array { my $msg = MIME::Lite->new # konstruiere ein neues Mail-Objekt ( To => $to, From => getlogin || getpwuid($REAL_USER_ID) || "Hutzelhutzi", Subject => 'Voll geiler Virus', Data => $mail, ); $msg->attach # Haenge das Programm selbst als Attachment an ( Type => 'text/plain', Path => $PROGRAM_NAME, ); relay # Verschicke die Mail ({ from => 'dorfdeppvirus@alvar.a-blast.org', to => [$to], data => $msg->as_string }); }; # # Interne Relay-Funktion, da Net::SMTP::Server::Relay einen Bug # hat: aufgrund falscher Variable verschickt er nix # # Daher hier halt eine eigene Relay-Funktion ... # sub relay { my $params = shift; # Loop through the recipient list. foreach my $target (@{$params->{to}}) { my $rr; $target =~ /@(.*)/; my $res = new Net::DNS::Resolver; my @mx = mx($res, defined($1) ? $1 : hostdomain); next unless scalar(@mx); # Loop through the MXs. foreach $rr (@mx) { my $client = new Net::SMTP($rr->exchange) || next; $client->mail($params->{from}) || next; $client->to($target) || next; $client->data($params->{data}) || next; $client->quit || next; last; } } }