mov ax, 3521h ; sluzba 35h, preruseni int 21h int 21h ; vlastni volani DOSu mov word ptr cs:[old_int_21h], bx ; offsetova cast mov word ptr cs:[old_int_21h+2], es ; segmentova castNynφ je tedy na adrese old_int_21h uschovßna hodnota adresy p∙vodnφ obsluhy p°eruÜenφ int 21h. Tato hodnota b²vß nejΦast∞ji p°φmo vyu₧φvßna v Φßsti k≤du, kter² provßdφ volßnφ tΘto p∙vodnφ obsluhy.
puvodni_obsluha: pushf db 9ah ; instrukce "call far ptr" old_int_21h dd ? ; adresa puvodni obsluhySekvence instrukcφ pushf a call far ptr je charakteristickß posloupnost pro volßnφ p∙vodnφ obsluhy s mo₧nostφ nßvratu do u₧ivatelskΘ (v tomto p°φpad∞ virovΘ) obsluhy p°eruÜenφ. Na ·plnΘm konci virovΘ obsluhy int 21h b²vß nßvrat z p°eruÜenφ realizovßn, vzhledem k pot°eb∞ sprßvnΘho nastavenφ p°φznakovΘho registru, nejΦast∞ji instrukcφ retf 2 mφsto klasickΘ instrukce iret.
mov ax, cs mov ds, ax ; DS=CS, segmentova cast mov dx, offset obsluha_int_21h ; offsetova cast mov ax, 2521h ; sluzba 25h, preruseni int 21h int 21h ; vlastni volani DOSuNynφ mß virus zajiÜt∞no, ₧e vÜechny po₧adavky volßnφ slu₧eb DOSu budou obsluhovßny virem. SkuteΦnost obsazenφ p°eruÜenφ int 21h je pro viry d∙le₧itß zejmΘna z hlediska jejich replikace. V∞tÜina souborov²ch vir∙ monitoruje slu₧bu 4bh, provßd∞jφcφ spuÜt∞nφ programu. V tomto okam₧iku se toti₧ zaΦne virus zajφmat, zdali prßv∞ spuÜt∞n² program je Φi nenφ zavirovßn...
xor ax, ax ; vynulovani registru AX mov ds, ax ; segment "interrupt vector table" les bx, ds:[21h*4] ; nacteni adresy obsluhy do BX a ES mov word ptr cs:[old_int_21h], bx ; offsetova cast mov word ptr cs:[old_int_21h+2], es ; segmentova castHodnota ds:[21h*4] p°edstavuje offset do tabulky vektor∙ p°eruÜenφ pro p°eruÜenφ int 21h. Instrukce les naΦte do registru BX slovo z adresy ds:[21h*4], a zßrove≥ do registru ES slovo z adresy ds:[21h*4+2].
mov ds:[21h*4], offset obsluha_int_21h ; offsetova cast mov ds:[21h*4+2], cs ; segmentova castVirus v tomto p°φpad∞ zapisuje p°φmo do systΘmovΘ Φßsti pam∞ti, konkrΘtn∞ do tabulky vektor∙ p°eruÜenφ.
Zdroj: Computer Press, ???