polymorphe stub bedeutet, dass sowohl deine encrypt routine als auch die functions positionen, der junkcode und der encryption key sich jedes mal zu 100% ändert.
Fuhs.de [Fachartikel - Verschlüsselungsgeneratoren für Computerviren Teil 2]
polymorphe stub bedeutet, dass sowohl deine encrypt routine als auch die functions positionen, der junkcode und der encryption key sich jedes mal zu 100% ändert.
Fuhs.de [Fachartikel - Verschlüsselungsgeneratoren für Computerviren Teil 2]
Nein dann mußtest du nicht deinen eigenen Linker einbauen. Es würde reichen die Anti´s (oder was auch immer so gespeichert werden soll) irgendwo in der exe zu speichern (codecave? neue sektion?), je nach bedarf addressen anzupassen (zb wo ist der Eintrag im IAT in dem die Funktion IsDebuggerPresent "gespeichert" ist), und den EP so zu verändern das er zu den zusätzlich eingefügten Funktionen springt.
Polymorphic code - Wikipedia, the free encyclopedia
Und hier ein Opensource Virus der ein Polymorphic Engine verwendet.
http://eof-project.net/sources/DarkP...2.Anunnaki.rar
Kleine Beschreibung vom Coder:
- Entry-Point-Obscuring, polymorphic, last section appender.
- Infects PE files in the current directory.
- Patches ExitProcess/exit/_exit functions to obscure it's entry point.
- Polymorphic engine - OPE2 (Offensive Polymorphic Engine 2).
- Anti-heuristics, anti-debug, anti-emulation.
Ich schreib' jetzt einfach mal in Mofos Thread weil das hier gerade Thema ist.
Versteh ich das richtig, dass die ganze "Magie" hinter Polymorphic Code ist, dass ich jedesmal z.B eine Extravariable mit irgendwelchen müll erzeuge?
z.B zwischen Entschlüsselungsroutine eine Funktion, die eine Extravariable mit Zufallszahlen (rand() z.B) zubombt aber nichts an der Entschlüsselung ändert?
Grüße
Nein das ist einfach Junkcode.
Ich zitiere mal die 1. beiden Sätze aus meinen geposteten Wikipedia Link:
Also du hast jetzt zB:In computer terminology, polymorphic code is code that uses a polymorphic engine to mutate while keeping the original algorithm intact. That is, the code changes itself each time it runs, but the function of the code (its semantics) will not change at all
Eine andere Variante wäre dannCode:mov eax,0
In beiden Fällen geschieht das Selbe ,aber es ist ein anderer Code.Code:xor eax,eax
Im Endeffekt wird eax dann 0.
Und das verändert sich bei jedem Start vom Programm.
Codevirtualisierung könnte dies möglich machen (Dizzy_D weiß dazu viel ).
Aber das Thema ist so komplex ,dass du ruhig einen eigenen Thread dazu aufmachen kannst.
//Edit:
Mir ist grad aufgefallen ,dass ich das 0815-Beispiel gebracht hab.
Also hier ein 2.:
Aus
wirdCode:mov eax,ecx
und draus kann wiederumCode:mov eax,0 add eax,ecx
werden.Code:xor eax,eax sub eax,ecx add ecx,ecx add eax,ecx
Und so weiter und sofort.
Natürlich sollte der Code nicht bei jedme Ausführen wachsen ,daher sollte man nicht auf die einzelnen Befehle eingehen sondern mehr auf die Segmente.
So kann der Code zB dann Original um 1 byte länger als der veränderte sein.
Geändert von IRET (26.08.2010 um 00:53 Uhr)
Na gut, hab halt in dem Wikilink nur das Beispiel unten mit der C-Variable gesehen - aber jetzt hats klick gemacht .
Danke für die Erklärung
grüße