Sto lavorando a un progetto correlato alle tecnologie di sandboxing.Eseguire un assembly .exe da un buffer in C
Attualmente sto scrivendo un programma in C che ottiene un piccolo assieme binario da un server Web remoto (.NET)
. Questo file binario è memorizzato in memoria (non tocca mai il disco) e la mia intenzione è di eseguire questo binario dalla memoria. Se il mio cliente è stato creato in .NET
, non avrei problemi a eseguire quell'assembly dalla memoria (in realtà, ci sono molti modi diversi per ottenerlo) ma ovviamente non è possibile con C
(non completamente sicuro).
Le mie domande sono: avere quell'assemblaggio .exe
nello spazio degli indirizzi del mio programma C
, c'è un modo per eseguirlo da lì? C'è un modo per consentire allo CLR
di eseguirlo? All'inizio ho pensato di invocare powershell per eseguirlo da lì (usando Reflection.Assembly) ma in quel caso si tratta di scrivere l'assembly su disco.
In ogni caso, non c'è dubbio che il modo migliore ed efficace per ottenere questo è utilizzando un client .NET
.
È possibile, non ho dubbi. Facile? No. Ho il sospetto che questo sia al di fuori dell'ambito di una singola risposta SO. –
Bene, sappiamo che. Gli assembly netti possono essere eseguiti solo dal runtime .net (o equivalente). Quindi, riguardo all'utilizzo di cli per interfacciare con C# di C. Quindi utilizzare i metodi C# già esistenti per eseguire un assembly dalla memoria. Funzionerebbe nel modo in cui lo vuoi? – kbzombie
Può essere fatto in PS senza scrivere sul disco. Sicuramente NON facile. Ecco lo schema di [come] (https://www.defcon.org/images/defcon-21/dc-21-presentations/Bialek/DEFCON-21-Bialek-PowerPwning-Post-Exploiting-by-Overpowering-Powershell .pdf) e un link a [un sacco di codice] (https://github.com/clymb3r/powershell) –