Sono curioso di sapere come Duqu si elimina. Dal punto di vista tecnico e in generale, come può un eseguibile cancellarsi mentre è in esecuzione? Duqu usa una procedura specifica per fare questo?
how can an executable delete itself while is running?
Windows utilizza la mappatura della memoria per caricare gli eseguibili in memoria, quindi sfortunatamente il file eseguibile (a differenza dei sistemi operativi basati su Unix) non può solo essere rimosso .
Unix è leggermente diverso (dato che c'è un dibattito su questo nell'altra risposta) - tuttavia, usa ancora mmap()
per caricare gli eseguibili (puoi verificarlo con strace). Risulta cosa succede quando si sovrascrivono tali eseguibili è piuttosto complicato ma si tratta di come si fa la sovrascrittura. Dal momento che Unix usa gli inode, a quanto mi risulta il conteggio dei riferimenti a quell'inode diminuirebbe, ma uno è trattenuto (per il programma in esecuzione), quindi l'auto cancellazione è possibile - il riferimento per dentry
(percorso del disco) scompare, ma non per mmap()
.
Windows non ha un concetto di inode, quindi il file deve esistere mentre il programma è in esecuzione. Questo è un problema che quasi chiunque abbia scritto un programma di disinstallazione avrà - o anche un'utilità temporanea. Il primo link che ti ho dato passa attraverso le tecniche che puoi usare; questi sono, in breve:
MoveFileEx
) DELETE_ON_CLOSE
tramite CreateFile
. e molti altri. Non voglio rovinare l'articolo - e penso di aver visto anche altre tecniche utilizzate, quindi puoi prendere che ci sono molti modi in cui un eseguibile potrebbe auto-cancellarsi.
Non ho guardato Duqu da solo, ma la solita procedura per farlo è generare un processo che cancella il file eseguibile in esecuzione, quindi qualcosa come exec("rm " + argv[0]")
farebbe il trucco.