VB [SORGENTE] Eseguire un exe direttamente in memoria

Predator

Utente Storico
11 Giugno 2007
3,203
47
1,268
900
Ultima modifica da un moderatore:
Già tempo fa feci un crackme in vb6 che sfrutta la tecnica che ora vado a farvi vedere.
In pratica si tratta di eseguire un programma direttamente in memoria, partendo da un array di byte.
I piu' svegli già a questo punto staranno pensando ad utilizzare tale tecnica come protezione, autoupdate ecc ecc
Quasi inutile esporre i vantaggi... per esempio possiamo avere un file crittografato che leggiamo in memoria, decriptiamo ed eseguiamo. Tutto in ram senza lasciare una minima traccia sul disco. Oppure leggere un file direttamente da una risorsa incorporata ecc.

Pensate che è possibile runnare addirittura eseguibili non fatti in DotNet. E se questi hanno una imagebase diversa dal file orignale, non sarà neppure possibile attaccarsi al processo.

Bhe passiamo ai fatti,
vi allego un esempio con tanto di sorgente, nel quale il programma:"exe a runtime.exe",
leggera' un eseguibile di esempio: "pippo.exe" (tra l'altro fatto in vb6)
poi andra' a sostituire se' stesso riscrivendo la memoria con il contenuto di pippo.exe
ed eseguirà il tutto.
Vedrete che il file pippo.exe nonostante sia in esecuzione puo' essere anche cancellato perchè sta vivendo dentro "exe a runtime.exe"

come detto in precedenza l'eseguibile a runtime puo' essere ovunque: un file, una risorsa, puo' essre criptato, puo' essere compresso eccc
sarà sufficente passare a RunExe l'array di byte pronto da eseguire e lui farà il resto.

DOWNLOAD SORGENTE

Angolo tecnico:
ma come fa?
detto in due parole, in un modulo dichiarato tutto l'occorrente per analizzare la struttura dal PE
leggo il file da runnare,
verifico le signature PE e MZ
Creo un processo sospeso su s'è stesso
modifico i context,
rimappo l'eseguibile in memoria per fare eventualmente spazio necessario
sistemo address e header
riscrivo il processo
sistemo immagine e context
rilascio il processo figlio
chiudo il processo padre

pertanto se non chiudete il processo padre, potete far runnare piu' di un exe all'interno dello stesso processo
e che la forrrrza sia con voi xD
NB: trattasi di un sorgente C++ tradotto in vb6 e ora portato in vbNet

Predator
 
Ultima modifica:
Per la vostra praticità aggiungo come leggere una risorsa incorporata e metterala in un byte array :)
Codice:
Dim MyArray as Byte()
MyArray = My.Resources.Nome_Risorsa
e passare MyArray alla funzione :)
 
Ultima modifica:
il link viene segnalato come infetto da trojan :omfg:
uso kasperky 2011
ovvio, non ho fatto nulla per evitare che non venga rilevato dagli antivirus.
Si tratta di una forte manipolazione dell'eseguibile a runtime, è il minimo che gli antivirus avvisino.
Chiaramente non puo' essere un virus, perchè ho fornito il sorgete e non un progetto compilato...
tutte cose che potevi capire da solo.
E poi hehehe non vado a spu//anarmi :D
 
ovvio, non ho fatto nulla per evitare che non venga rilevato dagli antivirus.
Si tratta di una forte manipolazione dell'eseguibile a runtime, è il minimo che gli antivirus avvisino.
Chiaramente non puo' essere un virus, perchè ho fornito il sorgete e non un progetto compilato...
tutte cose che potevi capire da solo.
E poi hehehe non vado a spu//anarmi :D
Come si potrebbe fare per non farlo segnalare come virus? o_O
 
Predator ma perchè devo mettere un percorso nella 2nd richiesta dela funzione se esegue direttamente dalla memoria???
 
Come si potrebbe fare per non farlo segnalare come virus? o_O

non si può, almeno credo, perchè gli antivirus sono tutti programmati a rilevare questi tentativi di eseguire 2 exe contemporaneamente. per "baypassare" potresti prendere il tuo exe e cambiargli l'estensione in txt e caricarlo come risorsa, poi all'avvio del form gli dai il comando di estrarlo da qualche parte, in appdata/temp per esempio e nel farlo deve cambiargli l'estensione in exe, e poi un bel process.star per avviarlo ;)
oppure usi semplicemente un exejoiner....
 
Predator ma perchè devo mettere un percorso nella 2nd richiesta dela funzione se esegue direttamente dalla memoria???
serve a selezionare i più niubbi che non capiranno che al posto di un file esterno possono usare un'array di byte incorporato.

non si può, almeno credo, perchè gli antivirus sono tutti programmati a rilevare questi tentativi di eseguire 2 exe contemporaneamente. per "baypassare" potresti prendere il tuo exe e cambiargli l'estensione in txt e caricarlo come risorsa, poi all'avvio del form gli dai il comando di estrarlo da qualche parte, in appdata/temp per esempio e nel farlo deve cambiargli l'estensione in exe, e poi un bel process.star per avviarlo ;)
oppure usi semplicemente un exejoiner....
I tuoi consigli sono esattamente le tecniche (antiche) che gli antivirus danno per piu' scontato e sono di conseguenza le piu' intercettabili. In particolare gli exejoiner sono intercettati.
E' possibile rendere il codice undetected agli antivirus (fino a quando non entra nel database),
in cio' che ho scritto ho volutamente ommesso qualsiasi tecnica di mimetizzazione.
 
beh, per questo sono funzionanti, ormai gli antivirus non monitorizzano questo genere di cose, anche se, teoricamente, non c'è niente da monitorizzare. dato che si estrae un semplice "file di testo" ;)

poi, si potrebbero fare così meno "convenzionali" tipo: far arrestare (dal form) il servizio dell'antivirus e subito dopo anche il processo, così da evitare che l'utente legga i messaggi di notifica.... ma è solo teoria.
 
beh, per questo sono funzionanti, ormai gli antivirus non monitorizzano questo genere di cose, anche se, teoricamente, non c'è niente da monitorizzare. dato che si estrae un semplice "file di testo" ;)

poi, si potrebbero fare così meno "convenzionali" tipo: far arrestare (dal form) il servizio dell'antivirus e subito dopo anche il processo, così da evitare che l'utente legga i messaggi di notifica.... ma è solo teoria.

se riesci a stopparmi kaspersky con vb e ti stimo XD
 
Ultima modifica:
beh, per questo sono funzionanti, ormai gli antivirus non monitorizzano questo genere di cose, anche se, teoricamente, non c'è niente da monitorizzare. dato che si estrae un semplice "file di testo" ;)

poi, si potrebbero fare così meno "convenzionali" tipo: far arrestare (dal form) il servizio dell'antivirus e subito dopo anche il processo, così da evitare che l'utente legga i messaggi di notifica.... ma è solo teoria.
davvero pensi che gli engine degli antivirus siano cosi' stupidi e superficiali uhauhauhaauhauhauh
troppa teoria e poca pratica
emerge una totale assenza di consapevolezza su threading, sandbox, privilegi, formato PE, PEB , kerneling e memory menagement
 
kaspersky non so... ma antivirus tipo avast o avg, basta che stoppi il servizio e dopo termini il processo. ne so per certo che l'ho provato personalmente, tempo fa. ora non so se hanno cambiato qualcosa...:old:
 
fate una prova! per fermare un servizio basta digitare da dos
net stop nomeservizio
oppure da gestione servizi lo fermate premendo stop...

sarei curioso di scoprire quali av si fermano cosi' facilmente. di sicuro kaspersky, norton e comodo no.
 
ma questo script allora non esegue direttamente, crea un nuovo processo con i bytes che desideri .-.