PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Polymorphismus



$_staX
23.02.2009, 20:21
Hey community,
könnte mir mal bitte einer erklären, was genau Polymorphismus ist und welchen Nutzen es hat einen polymorphen code zu haben. Bis jetzt denke ich Polymorphismus ist wenn sich der code des Virus ständig verändert und die md5checksumme sich auch immer verändert. Doch welchen Nutzen ziehe ich daraus einen polymorphen code zu haben? Reicht es wenn der Virus trashcode in sich einfügt in Form von Kommentaren, oder wenn er Variablen in sich schreibt, die jedoch keine verwendung finden?

HH-NORD19
23.02.2009, 20:23
http://de.wikipedia.org/wiki/Polymorphismus

iGoTtHePoWeRiNmYpEnIs
23.02.2009, 20:25
das ist was komplett anderes @ vorposter.

HH-NORD19
23.02.2009, 20:51
ahh dann sry

blackberry
23.02.2009, 21:13
@$_staX
Was hat das genau mit Perl zu tun?

Polymorphismus in der Computertechnik steht normalerweise für eine Mehrfachvererbung von Klassen bei objektorientierter Programmierung.

Was du wohl im Zusammenhang mit Viren meinst ist die eigenständige Veränderung eines Programms durch das Programm selbst.
Dies kann in Form von neuschreiben der Datei, oder auch Aufbauen des richtigen Virencodes durch eine Art Loadercode im Speicher geschehen.
Die Konsequenz ist eine für Antivirenprogramme schwierig zu erkennende Form von Malware.


Reicht es wenn der Virus trashcode in sich einfügt in Form von Kommentaren, oder wenn er Variablen in sich schreibt, die jedoch keine verwendung finden?

"Traschcode" einfügen ist eine Möglichkeit.
Sagen wir mal das Antivirenprogramm XYZ erkennt folgende Bitfolge in einem Programm
011001010001010110101001010
Und du fügst folgenden "Trashcode" (-> Code der eigentlich nichts macht) ein:
01100101101011000001010110101001010
und voilà, der Vergleich der Bitfolgen ist negativ -> wird nicht erkannt.
(in der Wirklichkeit spielt es natürlich auch noch eine Rolle welche Bitfolge du wo einfügst - andernfalls kommt es zu Komplikationen)

PS: Mit Kommentaren wird das nicht gehen, da Kommentare nicht im Programmcode sondern nur im Sourcecode stehen! Auch Sachen wie int var oder Dim var As Whatever kann man nicht in ein Programm einfügen!


mfG. BlackBerry

Darkraiser
23.02.2009, 21:14
Naja ich hoffe es ist Korrekt was ich verzapf :P und ich versuchs mal anfängerfreundlich zu erklären^^

also bei einem polymorphen code ist der vorteil, dass sich Programm signaturen verändern, bsp. wenn du mit einem Polymorphen crypter einen server oder ähnliches cryptest so ist jeder server anders d.h. wenn einmal dein server mit von einem AV erkannt wird, heißt es nicht das die anderen erkannt werden.

ach und kommentare die du in den Compiler reinschreibst werden später nicht übernommen.

aber ich denke mehr dazu können hier die Experten wie kat oder so schreiben

mfg

$_staX
23.02.2009, 21:34
Nein, das habe ich schon verstanden. Mit Perl hat es nichts zu tun, aber hier gibt es keinen Bereich für allgemeine Fragen, oder ich habe ihn übersehen. Ist ein Virus Polymorph wenn er code wie z.B.
open(Virii,"<","$0");
@Virii = <Virii>;
close(Virii);
open(Virus,">","$0");
foreach $line (@Virii) {
$zahl1 = int(rand(501));
$zahl2 = int(rand(501));
print Virus $line;
print Virus "#$zahl1\n";
print Virus "#$zahl2\n";
}
close(Virus);in sich schreibt, da er ja nach jedem ausführen anders aussieht.
EDIT: Gibts hier eg Highlighting für verschiedene Sprachen?

Darkraiser
23.02.2009, 21:43
Imprinzip erfüllt das nich den Polymorphismus :) den wie schon blackberry sagte ist es ein code der sich wieder selber schreibt also compiled aber immer unterschiedlich oder auch in datein reinschreibt aber auch wieder mit anderem Muster. :)

mfg

blackberry
23.02.2009, 21:47
Ist ein Virus Polymorph [...] da er ja nach jedem ausführen anders aussieht.

Ja.

$_staX
23.02.2009, 21:47
Ja das Programm schreibt ja in sich neuen Code und nach dem ausführen ist die md5checksumme ja auch anders, was ja wiederum den Sinn von Polymorpismus erfüllen würde oder?
Edit: Also wäre dieses Snippet polymorph oder? Ich weiß es ist nur eine sehr einfach Art von Polymorphismus, aber ich wollte erstmal denn Sinn dahinter verstehen bevor ich mir Komplexeres ansehe

blackberry
23.02.2009, 21:53
Also wäre dieses Snippet polymorph oder?

Selbe Antwort: Ja.
PS: ein Virus in Perl macht wenig Sinn also verstehe ich nicht warum du Perl als Beispiel nimmst...


mfG. BlackBerry

Darkraiser
23.02.2009, 21:55
Seh ich nicht so, da du ja im Programm die Variablen veränderst aber der sinn gleich bleibt( das wäre einem AV egal und würde sofort detected werden) aber damit ist ein programm gemeint, der ein vorhandener code anderst wieder in eine exe schreibt.

wie bei Trashcode werden einfach Nop´s dazwischengecloppt oder iwas, was nichtsagend ist.

mfg

aber wenn man das ganz locker sieht es ist polymorph ^^

$_staX
23.02.2009, 21:59
Selbe Antwort: Ja.
PS: ein Virus in Perl macht wenig Sinn also verstehe ich nicht warum du Perl als Beispiel nimmst...


mfG. BlackBerry

Perl ist Sexy xD

Ich finde einfach, dass Perl eine schöne Sprache ist mit der man viel realisieren kann, wenn ich nen virii in c code verschicke ich ihn auch nicht, da mir einfach nur das coden daran gefällt und die Herausforderung.

Ich habe in Perl gepostet weil ich nicht wusste wo ich es hinposten soll, da ich keinen Breich für allgemeine Fragen gefunden habe.
Gibt es hier Syntaxhighlighting für Sprachen ?

Darkraiser
23.02.2009, 22:02
Gibt es hier Syntaxhighlighting für Sprachen ?

Ja bei NoPaste :P

und blackberry auch mit Perl kann man funktionstüchtige exe files erstellen :P aber sonst wird Perl zu Polymorphismuss eher nicht benutzt

mfg

blackberry
23.02.2009, 22:04
Seh ich nicht so, da du ja im Programm die Variablen veränderst aber der sinn gleich bleibt

Es werden keine Variablen verändert - es werden nur Kommentare mit Pseudozufallszahlen zwischen den Zeilen eingefügt.

Der Code verändert sich trotzdem (es ist klar, dass das Einfügen von Kommentaren bei einer compilativen Sprache und das anschließende neucompilieren das ganze nicht polymorph machen ist klar, aber bei einer Skriptsprache kann das so funktionieren)

Wenn du aber polymorphismus als eine Veränderung des Sinnes des Programms betrachtest, dann würde ich gerne mal wissen was deine Polymorphen Viren so machen;
Beim ersten Ausführen verbreiten sie sich auf deinem PC und in deinem Netzwerk, wo sie wiederum Hintertüren installieren und beim nächsten Hochfahren säubern sie dein Netzwerk wieder, räumen dir deinen Desktop auf und helfen dir bei deinen täglichen Computerproblemen. (das wäre für mich ein Wechsel des Sinnes eines Programms wie du ihn beschrieben hast).


mfG. BlackBerry

EDIT:

und blackberry auch mit Perl kann man funktionstüchtige exe files erstellen :P

Soweit ich weiß funktioniert das wie bei Bamcompile ( http://www.bambalam.se/bamcompile/ ) - das Skript wird per Binder an eine Miniversion des Perl-Interpreters gebunden.
Beim Ausführen werden dann Interpreter und Script gedroppt und aufgerufen.

Der oben gepostete polymorphe Code würde somit nur seine gedroppte Version verändern, die erstellte EXE würde sich aber nicht verändern.
Somit bringt es nichts diesen Code zu einer EXE zu compilieren (oder besser gesagt zu binden) ;)

Darkraiser
23.02.2009, 22:08
:) ich meinte nicht den sinn des programms sondern die veränderung der Signatur sowie des Quelltextes im sinne vom ablauf her... aber einer der mein Desktop säubert hätt ik gerne

mfg

blackberry
23.02.2009, 22:23
ich meinte nicht den sinn des programms sondern die veränderung der Signatur sowie des Quelltextes im sinne vom ablauf her...

Der Quelltext wurde verändert.
Außerdem glaubst du doch wohl nicht im Ernst, dass Antivirensoftwarefirmen wie Kaspersky und Co. eine Art Perl-Interpreter schreiben, nur um herauszufinden was ein Skript macht um es dann einordnen zu können.

Es wird mit bereits bekanntem Material verglichen bzw. nach verdächtigem Material gesucht.
Um aber solches verdächtiges Material zu identifizieren kann man nicht einfach sagen die Malware XYZ hat folgenden Code in sich:
mov eax, 1234
-> das haben viele, weniger haben jedoch:
mov eax, 1234
xor ebx, ebx
add ebx, 1
-> sagen wir also Signatur wird erkannt
mov eax, 1234
push eax
pop eax
xor ebx, ebx
add ebx, 1
-> unbekannt
Der Ablauf bleibt der gleiche; eax 1234 zuweisen, ebx auf 0 setzen und 1 zu ebx addieren (sprich ebx auf 1 setzen).

Das selbe hatten wir ja bei dem polymorphen Code, den du eher nicht als polymorph bezeichnet hast;
open(Virii,"<","$0");
@Virii = <Virii>;
-> das ist die Signatur
open(Virii,"<","$0");
#12
#173
@Virii = <Virii>;
#107
#3
-> nach 1x Ausführen; die Signatur kann nicht mehr erkannt werden, obwohl der Ablauf gleich geblieben ist


mfG. BlackBerry

Darkraiser
23.02.2009, 22:31
Außerdem glaubst du doch wohl nicht im Ernst, dass Antivirensoftwarefirmen wie Kaspersky und Co. eine Art Perl-Interpreter schreiben, nur um herauszufinden was ein Skript macht um es dann einordnen zu können.find ich hart, wenn du denkst man kann mit Perl keine exe dateien schreiben.. ergo kein Interpreter nötig.

und ne Perl exe mit Trashcode hat genauso mov eax, 1234 oder ähnliches.

mfg

noctem
23.02.2009, 22:47
Mit Perl kann man keine exe-Dateien erstellen. Die exe-Dateien sind, wie BlackBerry schon gesagt hat, nur "pseudo". Es sind Miniinterpreter an die das Perlscript "gebunden" wurde. Ob man damit "polymorpen" Code schreiben kann kommt darauf an wie der "Miniinterpreter" arbeitet. Bei entpacken-ausführen-löschen nicht, bei entpacken-ausführen-wieder_einpacken schon.

Würden eure asm-Beispiele so funktionieren? So würden doch die ganzen Adressen innerhalb des Programms falsch werden!? Außer diese werden auch alle bearbeitet.
Oder liege ich da falsch?


Außerdem glaubst du doch wohl nicht im Ernst, dass Antivirensoftwarefirmen wie Kaspersky und Co. eine Art Perl-Interpreter schreiben, nur um herauszufinden was ein Skript macht um es dann einordnen zu können.
Bei Binaries nennt man das Heurestik. :) Könnte mir durchaus auch vorstellen dass man das auch für "bekannte" Scriptsprachen macht. (Afaik schlagen manche Antivirenprogramme doch auch bei bösen Batchscripten zu!?)

~noctem :)

$_staX
23.02.2009, 22:54
Wie ist das bei antivirenprogrammen, lesen die ein script Stück für Stück ein, oder führen sie es aus und schauen dann, was passiert? Wenn sie ersteres machen könnte man das ganze Script dann nicht einfach verschlüsseln und beim Ausführen entschlüsseln?

Darkraiser
23.02.2009, 23:03
@ Noctem :) thx wieder wat gelernt .. für mich sind das halt trotzdem exe Files ob sie sich entpacken oder nicht spielte für mich keine Rolle, waren halt sonst .pl dateien also script sprache.

@ staX

erstmal haben Virenscanner so eine art zwischen Dateisystem und dem Process also er arbeited im Hintergrund und alles was gelesen oder geschrieben wird, muss erstmal durch dieses Modul also wenn du den Virus startest wird er erstmal wie bei einem Debugger komplett geöffnet und nach merkmalen durchsucht wie Blackberry vorher geschrieben hat von Trashcode her mit mov eax, 1234. es gibt für Virenscanner 1000nde an Signaturen woran sie Viren erkennen. Daher kann es auch sein, dass Potenziel ungefähliche Programme als Heuristik fehler erkannt werden können

mfg

$_staX
23.02.2009, 23:08
Ja, aber dann würde der Virus doch nicht detected werden wenn er verschlüsselt vorliegt, und am ende eine funktion den virus entschlüsselt und den entschlüsselten code dann ausführt

Darkraiser
23.02.2009, 23:13
Ja so funktionieren auch Crypter. Aber auch Crypter werden durch signaturen erkannt.. nicht jeder aber viele.

mfg

$_staX
23.02.2009, 23:14
Kann man das Prorgramm dann nicht auch einfach mit base64 oder ähnlichem verschlüsseln, oder können Antivirenprogramme das dann entschlüsseln

Z o D
23.02.2009, 23:32
die datei wird dann spätestens beim ausführen erkannt

blackberry
23.02.2009, 23:37
Würden eure asm-Beispiele so funktionieren? So würden doch die ganzen Adressen innerhalb des Programms falsch werden!?

Da keine Adressen verwendet werden würden diese Beispiele so funktionieren.
Dass man nicht so einfach in die .code-Sektion einer EXE reinschreiben kann ist absolut richtig.
Danke für die Ergänzung :)


mfG. BlackBerry