sich selbst modifizierender Code?
-
Original erstellt von rapso:
**hmmm....
http://www.geocities.com/SiliconValley/2151/selfmod.htmlno more 2 say
**Tja, da werden aber die Seitenrechte geändert, nicht die Segmente
Und die asm-Stückchen schreiben auch ganz normal über das Datensegment, also nichts da, Codesegmente bleiben unbeschreibbar
[ Dieser Beitrag wurde am 30.10.2002 um 20:23 Uhr von TriPhoenix editiert. ]
-
seh ich das falsch oder wird dort ein dword im codesegment entlockt damit man den code ändern kann und dann wieder gelockt, damit es ein herkömliches codesegment bleibt (ohne zugriff durch das programm) ?
_asm mov dword ptr address,offset [myloop+3]
hollt man sich doch die addi vom Code der sicherlich im codesegment liegt, wie sollte er den sonst aufgeführt werden? (CS und DS haben die selbe addresse soweit ich weiß, deswegen kann man über DS auf gleichzeitig auf das codesegment zugreiffen).rapso->greets();
-
Original erstellt von rapso:
**seh ich das falsch oder wird dort ein dword im codesegment entlockt damit man den code ändern kann und dann wieder gelockt, damit es ein herkömliches codesegment bleibt (ohne zugriff durch das programm) ?
**Es wird nicht im Codesegemnt de-locked sondern in den Pagetabellen, die ja nochmal zusätzliche Read/Write/Execute-Rechte haben.
Original erstellt von rapso:
**
_asm mov dword ptr address,offset [myloop+3]
hollt man sich doch die addi vom Code der sicherlich im codesegment liegt, wie sollte er den sonst aufgeführt werden? (CS und DS haben die selbe addresse soweit ich weiß, deswegen kann man über DS auf gleichzeitig auf das codesegment zugreiffen).**Ja das holt die adresse vom Code, aber du sagst ja shcon richtig, die segmente decken denselben Bereich ab, von daher greift man über das Codesegment zu. Damit das schreiben erlaubt ist werden vorher die Seiten schreibbar gemacht (s.o.)
-
Original erstellt von TriPhoenix:
Es wird nicht im Codesegemnt de-locked sondern in den Pagetabellen, die ja nochmal zusätzliche Read/Write/Execute- Rechte haben.es wird eine page de-locked, eine aus dem codesegment.... wenn man sagt, dass das codesegment de-locked werden muss, dann meint man den speicherbereich worauf CS zeigt, was sollte sonst gemeint werden? *verwundertsei* und dafür muss man doch die page(s) de-locken... oder wiederspricht irgendetwas was ich gesagt habe den tatsachen?
Original erstellt von TriPhoenix:
Ja das holt die adresse vom Code, aber du sagst ja shcon richtig, die segmente decken denselben Bereich ab, von daher greift man über das Codesegment zu. Damit das schreiben erlaubt ist werden vorher die Seiten schreibbar gemacht (s.o.)genau das hab ich schon von anfang an gesagt..
Original erstellt von TriPhoenix:
**
Original erstellt von rapso:
unter einem OS mit PM muss man das codesegment explizit drauf setzen, dass man da rein schreiben kann, sonst könnte es sein, das es readonly ist.Wohl eher das Datensegment, oder? Codesegmente sind schließlich immer mindestens read-only**
das segment ist nicht mindestens read only, es ist jeglicher zugrif auf die pages des codesegments nicht erlaubt:
MSDN "PAGE_EXECUTE
Enables execute access to the committed region of pages. An attempt to read or write to the committed region results in an access violation
"rapso->greets();
-
Im PMTUT.TXT steht, wie man selbst Modifizierenden Code trotz PM machen kann.
http://www.geocities.com/sunriseos/docs/PMTUT.txt
das geht irgend wie mit einem Alias Segment
-
es wird eine page de-locked, eine aus dem codesegment.... wenn man sagt, dass das codesegment de-locked werden muss, dann meint man den speicherbereich worauf CS zeigt, was sollte sonst gemeint werden? *verwundertsei* und dafür muss man doch die page(s) de-locken... oder wiederspricht irgendetwas was ich gesagt habe den tatsachen?
Pages haben keine Segfmentzuordnungen. EIn Sgement umfasst pages, und da Datensegment und Codesegment auf dieselbe Page zeigen, wird die Page so gesehen in beiden Segmenten delocked. Der Page ist trotzdem egal, in welchem Sgement (falls überhaupt) sie liegt
Original erstellt von TriPhoenix:
Ja das holt die adresse vom Code, aber du sagst ja shcon richtig, die segmente decken denselben Bereich ab, von daher greift man über das Codesegment zu. Damit das schreiben erlaubt ist werden vorher die Seiten schreibbar gemacht (s.o.)
*
genau das hab ich schon von anfang an gesagt..da hab ich mich nur verschirieben
meinte "von daher greift man über das Datensegment zu.
das segment ist nicht mindestens read only, es ist jeglicher zugrif auf die pages des codesegments nicht erlaubt:
MSDN "PAGE_EXECUTE
Enables execute access to the committed region of pages. An attempt to read or write to the committed region results in an access violation"sorry, meinte Pages sind maimal read-only
Was die Pages dahinetr sind ist wieder eine andere Sache, die MSDN sagt ja auch hier nichts zu den Segmenten
[ Dieser Beitrag wurde am 31.10.2002 um 16:43 Uhr von TriPhoenix editiert. ]
-
Irgendwer hatte hier gesagt, dass polymorphe Viren ihren Code ändern (weiß gerade nicht wer das gesagt hat, hab den Thread hier nur kurz überflogen). Also polymorphe Viren ändern keinen Code, sondern erzeugen eine zufällige Entschlüsslungsroutine und verschlüsseln den Virus passend dazu. Dabei werden neben den eigentlichen Entschlüsslungsinstruktionen auch "junk"- oder "garbage"-Instruktionen eingefügt, die im Prinzip nichts wesentliches machen.
Dementsprechend ändert ein polymorpher Virus nicht seinen Code, sondern einen kleinen zufälligen Teilcode.
Ein metamorpher Virus dagegen ändert seinen Code. Der Code wird nicht erweitert, sondern Instruktionen werden durch äquivalente Instruktionen ausgetauscht. Dadurch erhält der Virus ein neues "Aussehen". Beispiel: Der metaPHOR Virus von Mental Driller. Die erste Generation ist ca. 32 Kb groß. Folgende Generationen sind immer irgendwo um die 64 Kb groß. Der Source Code ist allein 500 kb reines Assembler! Und wohlgemerkt ist ca. 90% vom Virus nur die Meta Engine. Sowas ist auf jeden Fall eine recht komplexe Sache, die vor allem tierisch schwer zu debuggen sein muss (man erkennt seinen eigenen Code ja kaum wieder ;)).
Code erweitern machen doch viele Programme schon mit PlugIns. Sogar einige Viren haben die Fähigkeiten PlugIns runterzuladen und zu nutzen. Bestes Beispiel ist dafür sicherlich der Hybris Virus von Vecna, für den es sicherlich mindestens 10 PlugIns gibt.
Ich persönlich hab erst heute meine erste Polymorphe Engine fertiggestellt. Ziemlich schlicht geworden, aber wenigstens selbstgemacht.
-
Nur mal ne Frage zwischen durch:
Es gibt unter Windows die Funktion CreateThread und man übergibt einen Pointer auf eine Funktion,die daraufhin ausgeführt wird.Wenn ich jetzt die Adresse eines (von mir beschreibaren) Strings übergebe ,könnte man damit vielleicht auch Variablen-Code realisieren,unter Windows95/98/SE...?
-
theoretisch schon, du könntest den String theoretisch auch so ausführen ohne die Thread Funktion
siehe auch den Thread Assembler in C als string
-
gut das es leute gibt die sowas schon vor mir gemacht haben,dann mus ich imr die mühe nich mehr machen:D:D
-
Selbstmodifikation in Assembler? Kann so spontan kein Beispiel nennen.
Könnte aber mal nachschauen. War mal beim Homecomputer ein Thema, um kronischem Speicherplatzmangel und langsamen CPU's entgegenzuwirken.ich glaube aber nicht, dass sich selbst modifizierender Code auch in C++ so ohne weiteres möglich wäre. Mann müsste genau wissen, was der compiler da wohin compiliert. Und dazu müsste man mit einem Debugger nachsehen.
Dann könnte man aber gleich was in Assembler schreiben. Ausserdem compiliert jeder Compiler anders und ich kann mir ohne direkten Zugriff auf den Speicher keine Selbstmodifikation vorstellen. Aber wer kennt C++ schon so gut, dass er sich sicher sein kann?
-
1. Das meiste hiervon hatten wir schon mindestens 1 mal (Rechte im PM, dass mensch dort ein zusätzliches Datensegment einrichten muss, dass auf den selben Speicher verweisst wie das Codesegment, und mensch dann über das Datensegment in das Codesegment schreiben kann), daher würde ich vor schlagen, dazu eine FAQ zu erstellen. Das hier ist schon wieder ein 3 Seiten Thread, der die meisten uns nur Zeit kostet, in der wie neue Fragen hätten beantworten können.
2. SMC ist nicht das worum es in der Frage ging. Es ging dort nur um erweiterung des Codes, nicht um modifikation. Möglich ist soetwas, in dem ein Programm beim starten nach Binärdateien (z.B. DLLs im eigenen Verzeichnis) sucht, und anschließend läd.