In che modo duqu si cancella da solo?

2

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?

    
posta n1kita 07.10.2012 - 17:11
fonte

2 risposte

4

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:

  • File batch per eliminare il programma.
  • Sposta il file in nessun posto, in ritardo fino al riavvio (tramite 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.

    
risposta data 08.10.2012 - 10:19
fonte
0

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.

    
risposta data 07.10.2012 - 17:39
fonte

Leggi altre domande sui tag