Eigenen Code verändern
-
Achso, also ist sowas mit C++ gar nicht möglich wegen dem compilen?!
Dachte, dass diese Veränderungen in dem Programm selbst so drinstehen, sich aber "neu anordnen" oder etwas in der Art. Aber gut, dann ahben wir das auch geklärt

-
Wenn du ein C++ Programm hast, welches lauffähig ist, ist es nicht garantiert als solches erkennbar. Eindeutig ist dann lediglich der Assembler Code und den kannst du eher modifizieren, was allerdings einen harten Eingriff in das System verlangt.
Du kannst also deinen Code in dem Sinne nicht mehr ändern, allerdings das Programm an sich schon.
Bei Skriptsprachen ist das, wie gesagt direkter möglich.
-
Also wenn ich den "Quellcode" (also das, was ich zum Beispiels sehe, wenn ich die .exe direkt mit einem Editor öffne) im Programm "einspeicher" und mit diesem "Quellcode" das programm überschreibe würde das funktionieren? Aber dann wäre ja dennoch die Signatur des 2. Programms im Quellcode drin...

-
P7BB schrieb:
Also wenn ich den "Quellcode" (also das, was ich zum Beispiels sehe, wenn ich die .exe direkt mit einem Editor öffne) im Programm "einspeicher" und mit diesem "Quellcode" das programm überschreibe würde das funktionieren?
Kurz? Nein.
Lang? Nein.

-
Schau dir PHP oder VB-Script an. Damit kannst du relativ einfach ein Programm basteln, dass sich verändern kann. Einfach eigenen Quellcode einlesen und anders zusammensetzen. Ich hatte damals ein VB-Script geschrieben, was das konnte. War als kleiner Zeitvertreib ganz okay.
-
Ich kann PHP schon lange und auch ziemlich gut. Aber ich rede ja momentan von C++. Mir wurde ja bereits Assembler und sowas empfohlen, aber ich wollte nur eine rein theoretische Frage danach noch beantwortet haben

Oh und wenn wir schon dabei sind: Batch-Dateien können sich ebenfalls selbst neugenerieren
-
P7BB schrieb:
Also wenn ich den "Quellcode" (also das, was ich zum Beispiels sehe, wenn ich die .exe direkt mit einem Editor öffne) im Programm "einspeicher" und mit diesem "Quellcode" das programm überschreibe würde das funktionieren?
Es würde theoretisch gehen, aber praktisch sind Datensegment und Programmsegment getrennt und du darfst nicht in dein Programmsegment schreiben und dein Datensegment nicht ausführen. Der Teil mit "Programm mit Quellcode überschreiben" klappt also nicht.
Du kannst dir aber zum Beispiel zur Laufzeit eine dll bauen und diese dann laden und ausführen. Die alte Programmsignatur bleibt dabei erhalten. Du kannst auch das Programm so gestalten, dass es nichts tut, außer eine dll laden, welche dann eine dynamisch generierte dll lädt und die alte dll entlädt. Die Programmsignatur bleibt erhalten, aber da das Programm nur aus "Lade dll" besteht kann man es schlecht als Signatur benutzen, da man dann auf alle Programme die eine dll laden können anspringt. Eventuell hilft dir das Programm rundll32.exe.
Alternativ kannst du dynamisch an der exe basteln und diese erneut starten, eventuell direkt aus dem Speicher.
-
P7BB schrieb:
Oh und wenn wir schon dabei sind: Batch-Dateien können sich ebenfalls selbst neugenerieren

Das bezweifle ich
Schon nach der ersten Selbstüberschreibung beendet sich die Batchdatei und du hast vielleicht eine Zeile da stehen. Man müsste dann eher eine 2. Batch schreiben, die ausführen und diese dann die 1. Batch überschreiben lassen. Außerdem, wie willst du einzelne Zeilen per Batch ansprechen? Mir fällt um kurz vor 2 Uhr jetzt nichts ein.
-
Rein theoretisch könntest du vom Programm neuen Code schreiben lassen, diesen in eine DLL compilieren und diese DLL dann ins Programm mit aufnehmen. Damit hättest du den Code zwar nicht verändert sondern neuen geschaffen, aber es sollte kein Problem sein, den neuen Code an Stelle des alten Codes auszuführen, wenn mans richtig anstellt.
-
P7BB schrieb:
wie ist es möglich, dass mein eigenes Programm den eigenen Code nach dem ausführen verändert?
Du meinst wahrcheinlich 'während der Ausführung', nicht 'nach dem Ausführen'. Viren greifen in einen Programmcode gewöhnlich bereits ein, während es untätig auf der Festplatte schlummert.
Über weiteres möchte ich nicht nachdenken! :p
-
FreakY<3Cpp schrieb:
P7BB schrieb:
Oh und wenn wir schon dabei sind: Batch-Dateien können sich ebenfalls selbst neugenerieren

Das bezweifle ich
Schon nach der ersten Selbstüberschreibung beendet sich die Batchdatei und du hast vielleicht eine Zeile da stehen. Man müsste dann eher eine 2. Batch schreiben, die ausführen und diese dann die 1. Batch überschreiben lassen. Außerdem, wie willst du einzelne Zeilen per Batch ansprechen? Mir fällt um kurz vor 2 Uhr jetzt nichts ein.So war es auch gemeint
Aber letztendlich kann man aus einer Batch-Datei eine andere erzeugen, die 1. Datei führt die 2. aus, die 2. löscht die erste und kopiert sich selbst und nennt sich so, wie die erste und löst anschließend die version von der 2. datei, die nicht den namen der 1. datei hat 
An die anderen: Danke für die vielen Informationen, hat mir schonmal ein ganzes Stück geholfen
