Il programma X legge i bytes di un eseguibile Y, crea un thread Z indipendente e nel Thread Z viene eseguito l'eseguibile Y sempre xò nel processo del programma X
uahuaauh allora non ero io che non riuscivo a capire, intanto il sorgente fa molto molto molto di piu'!!!
Sopratutto perchè quanto hai appena descritto non ha nessun senso.
Rivediamolo: un programma X legge un eseguibile Y e crea un thread Z indipendente? come puo' un thread essere indipendente? allora è un processo e non un thread? e nel thread Z (che non puo' esistere per il motivo appena detto), non puo' essere eseguito nulla perchè cerchi di eseguire Y che è un byte array di un eseguibile estraneo nel processo del programma X che non ha nulla a che spartire con Z.
Sei riuscito a generare un apocalisse tra i processi xD
quello che fa:
analizza la struttura dal PE stesso
mette in un byte array il contenuto dell'exe che vogliamo runnare a runtime.
verifica le signature PE e MZ
Crea un processo sospeso su s'è stesso
modifica i context,
rimappa l'eseguibile in memoria per fare eventualmente spazio necessario
sistema address e header
riscrive il processo su s'è stesso
sistema immagine e context
rilascia il processo figlio
chiude il processo padre che ormai è inutile.
Nessun thread secondario
... che poi è spiegato benissimo nel 1° topic