Was viele ja gar nicht wissen, man muss nicht unbedingt eine PE Executable in einen neuen Prozess laden (Process hollowing), das geht auch im selben Prozess und sogar im selben Thread.
Natürlich nur, wenn an der gewollten Imagebase Platz ist.
Weil nämlich entweder die Host-Exe eine dynamische Imagebase hat, also eine Relocation section und ASLR aktiviert oder weil dies auf die zu ladende Executable zutrifft, sie also auch an irgendeinen anderen Ort geladen werden kann.
Früher war das nur selten der Fall, aber unter 64bit ist es Standard und auch für 32bit werden immer mehr Exen mit Relocations gebuildet.
Hier also nur mal ein kleines (nur 32bit getestetes) Beispiel, wie man eine Exe ohne Injection aus dem Memory starten kann.
Der Vorteil ist dass es generell unauffälliger ist und ohne verdächtige APIs auskommt. Der Nachteil ist natürlich dass man bspw. keine Firewalls bypassen kann durch Injection in "erlaubte" Prozesse.
Natürlich ist das ganze noch lange nicht fertig. Beispielsweise ließen sich die gelegentlichen Crashes wenn trotz ASLR die Host-Exe den Platz einer nicht-ASLR-fähigen Exe belegt umgehen, indem man einfach solange den Prozess neustartet bis der Platz frei wird.
Zur Feier des F-H Gits genau dort erhältlich, für jeden frei zu kopieren und verbessern:
Credits an ZwClose7, von dem ich fast den gesamten PE loading code geklaut habe