Wie haben Viren damals funktioniert?

  • Hallo,


    beschäftige mich gerade wieder ein wenig mit der Programmierung von TSR-Programmen und in diesem Zusammenhang kam bei mir immer wieder die Frage auf wie die damaligen Virenprogramme es technisch realisiert haben sich an eine ausführbare Datei zu hängen (diese also zu infizieren) und sich beim Start derselbigen gleich mit zu starten.


    Hat da jemand von euch eine Ahnung wie sowas funktioniert? Da müsste man ja quasi direkt die .exe oder .com Datei irgendwie manipulieren denk ich jetzt mal.


    Wie dem auch sei, ich find die Seite https://archive.org/details/malwaremuseum&tab=collection absolut genial.


    Ich find WALKER.COM und MARINE.COM cool, hätte ich damals Viren programmiert dann wäre es ganz sicher was in dieser Art geworden und ich hätte sicher keine destruktiven Viren programmiert.


    lg, Markus

  • markusk

    es mag ja interessant sein, sich mit der Technik von Viren zu beschäftigen, aber in dem Moment, wo du so etwas programmierst, stellt sich für mich die Frage: wozu?

    Denn wenn mal so ein selbstreplizierendes Etwas in die Umlaufbahn kommt, wird sich die Retro-Gemeinde bestimmt nicht freuen.

    Wenn ich möchte, dass mein Programm sich nachträglich verändert bzw. verändert wird, dann möchte ich das selbst bestimmen.

    Alles andere bewegt sich bei mir auf sehr gefährlichen Bahnen ....

    Daily Driver: MSI X470 Gaming Plus - Ryzen 7 1700 - 32 GB - Geforce GTX 1060 6GB - 1 TB NVMe SSD - 2 x 1 TB Raid-0 SATA

    Projekt #1: ASI 486-33 - Projekt #2: PC Chips M912 486 VLB - Projekt #3: Biostar MB8500TVX-A Pentium MMX 166 - Projekt #4: ASUS TXP4 K6-III 400 - Projekt #5: Gigabyte GA-6BXDS Dual Slot 1 PIII-650 -

    Projekt #6: ASUS P2B-DS Dual Slot 1 PIII-1000 - Projekt #7: Gigabyte GA-6VXD7 Dual Sockel 370 PIII-1000 - Projekt #8: TYAN S2505T Dual Tualatin 1400

  • Skorbin

    Wenn ich das richtig verstanden habe, geht es ums verständnis WIE das funktioniert hat, und nicht um das "in Umlauf" bringen.

    markusk wird das sicherlich in einer "Sandbox" testen und niemals veröffentlichen bzw. "freilassen". (Hoffe ich zumindest!!)


    Fakt ist: Ja - diese Viren haben COM und EXE Dateien direkt manipuliert. Mal haben sie sich an den Dateianfang, mal an das Dateiende angehangen und das ganze gelang mal mehr und mal weniger gut.

    Einige Exemplare waren "dumm", so das Programme, die die Prüfsumme der Datei beim Start kontrollieren, einen Fehler feststellen und eine Warnung herausgaben.

    Andere wiederum waren "schlau" und haben die Prüfsumme gleich passend mitverändert.


    Ebenfalls interessant sind die Viren, die sich im Bootsektor einnisten und von dort aus Dateien und andere Bootsektoren (z.B. eingelegte Disketten) infizieren.

    Programmiertechnisch ist das wahre Kunst, denn im sowieso sehr kleinen Bootsektor noch etwas zu verstecken und das Betriebssystem trotzdem noch startfähig zu halten ist wahrlich interessant.

    Schade finde ich in dem Fall wirklich, das dieses Können hier für solch unschöne Machenschaften vergeudet wurde.

  • Hehe, ich fand die Vorstellung cool, dass mein Programm sich selber verbreitet und potentiell am Ende auf jedem PC zu finden sein wird :whistling: Ich habe mich während meiner Abizeit intensiv mit dem Thema beschäftigt (damals hatte ich noch Zeit...) und ein ganz cooles Projekt auf die Beine gestellt. Das Teil war am Ende ca. 1500 Byte groß und konnte u.a....:


    - sich selbst verschlüsseln, nur ca. 10 Byte waren bei jeder Kopie gleich


    - .COM, .EXE und Bootsektoren von FDD und HDD infizieren: Der Sprung vom BIOS zum DOS ist eine Herausforderung, beides funktioniert völlig unterschiedlich. Letztlich ist es aber sehr nützlich: Infizierte Diskette wird im Laufwerk "vergessen". PC wird gestartet, versucht von Diskette zu booten. Virus übernimmt Kontrolle, startet von HDD und macht sich unter DOS breit. Schneller gehts nicht.


    - unter DOS hat er eine Stealth-Funktion gehabt: Wenn man "DIR" eingetippt hat, waren die Dateien genau so groß wie ursprünglich. Wenn man die Diskette dann aber in einen nicht infizierten PC geschoben hat, waren es 1500 Byte mehr


    - Generationenzähler, falls es einmal um die Welt geht und dann wieder bei mir ankommt :D


    Ich war mächtig stolz auf mein Werk und habe viel Zeit investiert. Vor allem habe ich unglaublich viel gelernt. Als Literatur hatte ich nur das Buch "PC Intern" von Michael Tischer. Internet und so gabs ja noch nicht und einen anderen Virus als Vorlage hatte ich auch nicht. Hatte das Ding auch irgendwann mal Testweise auf die Menschheit losgelassen. Aber das war schon Win95 im kommen und darunter ging das alles nicht mehr...keinen Schaden angerichtet also.


    Ist alles 25 Jahre her aber wenn Du Fragen zu irgendwas hast kann ich sicher noch helfen :rolleyes:

  • Skorbin

    Wenn ich das richtig verstanden habe, geht es ums verständnis WIE das funktioniert hat, und nicht um das "in Umlauf" bringen.

    markusk wird das sicherlich in einer "Sandbox" testen und niemals veröffentlichen bzw. "freilassen". (Hoffe ich zumindest!!)

    Genau so ist es, mir geht's nicht darum einen neuen Virus zu erschaffen und den in die freie Wildbahn zu entlassen, sondern mich interessiert das Know How dahinter.


    Auch ich finde es schade dass die Leute die damals diese ganzen Viren programmiert haben ihr Können nicht für produktivere Zwecke eingesetzt haben.

  • .COM ist sehr einfach weil die Datei ein 1:1 Abbild des RAM an der Adresse CS:0100 ist.


    Du machst erst eine Kopie der ersten 3 Bytes (da ist da wo die Ausführung nach dem Laden startet) und sicherst die an einer vorgesehenen Stelle in Deinem Virus-Code der sich irgendwo im RAM befindet. Dann speicherst Du den Virus am Ende der .COM Datei. Die ersten 3 Bytes, die Du vorher gesichert hast, ersetzt Du dann durch einen JMP zu der Routine, die den Virus initialisiert.


    Diese Routine prüft, ob der Virus noch nicht aktiv im RAM ist. Wenn nicht, ist der PC noch nicht infiziert. Wir müssen also den Virus im RAM festsetzten etc.. Wenn das fertig ist und auch wenn die Virus bereits im RAM ist, muss die Ausführung wieder an das ursprüngliche .COM Programm übergeben werden.


    Dafür kopierst Du die 3 Bytes, die Du bei der Infektion gesichert hast, wieder an die ursprüngliche Stelle. Die .COM Datei ist ja vom DOS ins RAM geladen worden. Diese Änderung findet nur im RAM statt, nicht in der Kopie der .COM auf dem Laufwerk. Dann springt die Ausführung an die Adresse CS:0100 und das ursprüngliche Programm wird ausgeführt als wenn nichts gewesen wäre.



    Diese Modifikation kannst Du ganz einfach an einer .COM Datei ausprobieren, ohne dass Du direkt einen kompletten Virus schreiben musst: 3 Bytes am Anfang sichern. Durch einen JMP ans Ende der Datei ersetzten. Dort ein paar Zeilen Code einfügen, die die ursprünglichen 3 Bytes (dann an der Adresse CS:0100 bis CS:0102) wiederherstellen. Dann JMP CS:0100 und das ursprüngliche Programm startet als wenn nichts gewesen wäre ;)


    Ist kompliziert geschrieben. Ich kanns vielleicht auch mal an einem Beispiel zeigen wenn Du es nicht verstehst :D


    Mit .EXE ist es deutlich komplizierter, müsste ich selber nochmal nachlesen...

  • Ich hatte mal eine Anfrage beim Trojaner Board zum Thema alte Computerviren gestartet, und die dachten echt, ich wollte 25 Jahre später irgendwas schlimmes damit anstellen.^^

    Hier als Beispiel ein Video zu meinem "Lieblings-Virus":

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    Der Kanal bietet einiges an Infos dazu. Für mich einfach nur ein Teil der PC-Geschichte, und nichts schlimmes. (heutzutage)

    1. AMD K6-III 450, 256 MB RAM, Tyan S1590S, 20 GB HDD, Creative CT6850 32MB PCI, Voodoo 2 8 MB, Creative CT3780, DOS 6.2/ WIN 98SE

    2. AMD K6-III 400, 256 MB RAM, Biostar M5ALA, 20 GB HDD, Voodoo 3 2000 PCI, CT2910 +DB50XG, DOS 6.2/ WIN 98SE

    3. Compaq Prolinea 5120 Pentium Overdrive 166MMX, 64 MB RAM, 1,2 GB HDD, Elsa Victory Erazor 4, Formosa 1868F +DreamBlaster S2, DOS 6.2/ WIN 98SE

    4. Cyrix 6x86MX-PR200, 96 MB RAM, ECS P5VX-Be, ~8,4 GB HDD, ATI 3D RAGE II+DVD 4MB, CT3670, DOS 6.2/ WIN 3.11 & 95

  • Hi,


    grundsätzlich versteh ich's, aber ein Code-Beispiel wär trotzdem ganz cool zum Nachvollziehen bzw. Ausprobieren, vielleicht den Code eines simplen Opfer-Programms welches nur einen String auf dem Bildschirm ausgibt (z.B. über die Funktion 09 / Int 21h) und dann einen "Virus" der auch nur irgendwas einfaches macht, z.B. ebenfalls einen String ausgeben. So kurz wie möglich eben dass der Grundgedanke leicht ersichtlich ist.


    Folgende Fragen hätt ich:


    1.) Warum gerade die Bytes CS:0100 bis CS:0102, was steht da drin?

    2.) Virus ans Ende der .COM - Datei hängen: Meinst Du die .OBJ Datei welche mir der TASM erzeugt an das jeweilige .COM hängen?


    lg, Markus

  • CS:0100 weil das .COM Programm ja von DOS an diese Stelle geladen wird ;)


    3 byte...weil Du an dieser Stelle eine JMP unterbringen musst der genau 3 Byte groß ist ;)


    Angenommen Dein .COM ist ohne Virus 2000 Bytes groß.


    DOS lädt es ins RAM von CS:0100 bis CS:20FF


    Dein Virus beginnt also (nach der Infektion) bei CS:2100. Auf der Diskette also am Ende nach den 2000 Bytes des ursprünglichen Programms.




    Angenommen das Programm beginnt ursprünglich mit AA BB CC...ist natürlich Unsinn aber egal. Die Bytes hat der Virus vor der Infektion gesichert und sind jetzt angenommen bei CS:2100-CS:2102.


    Dein Virus-Code beginnt bei CS:2103.


    Die ersten 3 Bytes im Programm wurden ersetzt durch

    JMP 2103


    bei CS:2103 geht es dann weiter mit

    PUSH CS

    POP DS

    MOV AL, [2100]

    MOV [100], AL

    MOV AL, [2101]

    MOV [101], AL

    MOV AL, [2102]

    MOV [202], AL

    ...damit hast Du die ersten 3 Byte wieder hergestellt.

    Hier hast Du jetzt Platz alles zu machen was Du willst. Deinen Virus in den Speicher kopieren, Interrupts umleiten, vielleicht einfach mal die Festplatte formatieren oder den Benutzer anders ärgern, etc...


    Und dann Ende :

    JMP 0100

    ...und das ursprüngliche Programm läuft als wenn nichts gewesen wäre.



    Joa, prinzipiell kannst Du das alles mit TASM schreiben. Damit erzeugst Du dann aber direkt eine .COM die den Virus startet sonst wirds kompliziert.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!