Virüs yazmak kadar, anti-virüs yazmanın da kendine has büyük bir zevki vardır. İyi bir anti-virüs yazabilmek için en başta, bilgisayarın donanımına ve üzerinde çalışan programlara tam anlamıyla hükmedebilecek Assembler, C, Pascal gibi bir programlama dilini iyi bilmek gereklidir. Özellikle de, RAM bellekte aktif halde bulunan virüsleri tespit etme ve temizlemede güçlü bir programlama diline ihtiyaç vardır.
İyi bir anti-virüs yazabilmek için ikinci şart ise; virüsleri, nasıl çalıştıklarını, nereye nasıl bulaştıklarını, ne zaman ve nasıl zarar verdiklerini vs. bilmek gerekir. Ayrıca bir virüs yazarı gibi de düşünebilmek önemli. Böylece en sinsi ve iyi yazılmış virüsleri bile yakalayıp imha edebilirsiniz.
Tabii ki herhangi bir programlama dilinde de (hatta DOS komutlarıyla) virüsler tespit edilebilir ve temizlenebilir. Bunu yapabilmek için virüsleri çok tanımaya da gerek yok. Yeter ki temel birkaç bilgiye sahip olunsun.
Virüslerin boot’a bulaşan tiplerini tespit etmek ve silmek genelde kolaydır. Bunların çoğu 640 KB’lık geleneksel belleği 1 ile 3 KB arasında eksiltirler. MEM, CHKDSK veya benzeri komut ve programlarla bellekte aktif durumdaki boot virüsleri tespit edilebilir. Şunu da unutmamalı ki, virüs olmayan bazı program ve ROM-BIOS’lar da geleneksel belleği azaltabilirler. Sabit diskteki bir boot virüsünü imha etmek için en kolay ve etkili yollardan biri FDISK /MBR komutunu vermektir (Bu yöntemi Haziran ‘96 sayısında "Kim Korkar Virüslerden" kapak yazısında detaylı olarak bulabilirsiniz.)
Dosyalara bulaşan virüsleri tespit etmek, hem daha kolay, hem de daha zordur. Yani virüsüne göre değişir. Dosya virüsleri genelde EXE ve COM uzantılı dosyaların başında ve sonunda bazı değişiklikler yapar. Virüs, daha pratik olduğu için hedef dosyanın sonuna kendisini ekler. Bulaştığı program çalışınca aktif olabilmek için, hedef dosyanın başında bir kaç değişiklik yapar.
Geleneksel anti-virüs programlarının çalışma prensibi de basitçe şöyle:
1. Anti-virüs çalışır çalışmaz RAM bellekte virüs taraması yapar. Böylece aktif haldeki bir virüsün problem çıkarmasını ve dosyaların taranması sırasında bulaşmasını önler.
2. Sabit diskin Ana Boot Sektörü (Partition Table da bunun içinde yer alır) ile taranacak sabit disk sürücüsünün Boot Sektörünü Boot Virüsü taramasından geçirir. Disketlerde sadece disketin Boot Sektörüne bakılır.
3. Verilen disk sürücüsündeki dosyalar taranır. İşleme girecek dosyalar EXE, COM, OVL, BIN ve benzeri çalışabilecek program kodu içeren dosyalar olabileceği gibi, tüm dosyalar da tarama işlemine sokulabilir. Gelişmiş anti-virüs programları ZIP ve ARJ uzantılı sıkıştırılmış dosyaları da bellekte açıp tarayabilmektedir.
Dosyalarda virüs tespit etmek için kullanılan en eski ve basit yöntem, virüsün imzasını aramaktır. Bu yöntemin en büyük zayıflığı, yeni çıkan ve program kodu değişen virüslerin tespit edilememesidir. Virüslerin imzaları, dosyalara bulaşmış virüslerin kodları incelenerek bulunur. Virüsün kodunda değişmeyen ve göze batan 4-32 baytlık bir dizi virüsün imzası olarak seçilir. Bunda dikkat edilecek önemli bir nokta da virüsün taşıdığı herhangi bir mesajı imza olarak seçmemektir. Bazı "virüsseverler" zevk için bu mesajları değiştirip, "hafif değişmiş" virüsleri etrafa bulaştırırlar. Bu durumda anti-virüs programı, virüsün imzası olduğu halde tespit edemez. Eh, bu kadar genel bilgiden sonra QBASIC’te bir anti-virüsü nasıl yapılır konusuna gelelim. Ekstra komutlar kullanmadan QBASIC’te dosya virüslerini tespit eden bir anti-virüs yapılabilir. Fakat boot virüsleri konusunda iş zor. Çünkü boot sektörleri okumak için QBASIC yetersizdir. Makina Dili alt programlar kullanmak veya başka çözümler bulmak gerekir. Dosya virüslerini tespit edebilecek bir anti-virüs yazarak işe başlayabilirsiniz. Virüslerin imzalarını birer karakter dizisi olarak tanıtın. Virüs arayacağınız dosyaları RANDOM modunda açıp GET ile
okuyun. Dosyanın tamamını okumanız gerekmez. Dosyanın sonundaki 4-5 KB’lık kısmını okuyup arama yapmanız yeterlidir. Çünkü, çoğu virüsün bulaştığı yer dosyanın sonudur ve boyu 4-5 KB’ı geçmez.
Arama yaparken dosyadan okunan kayıtlar içinde virüs imzalarını sırayla arayın. Bu işlem, bir yazı editörüyle, metin içinde bir karakter dizisinin aranması gibi yapılabilir. Virüs tespit ettikten sonra da virüsüne göre dosyanın temizlenmesi işlemine sıra gelir. Tespit etmekten daha zor olan virüsü dosyayı bozmadan temizlemektir. Biraz hesap kitap da gerektiren bir işlemdir. COM dosyaya bulaşmış bir vürüsü temizlemek genelde EXE’lere göre daha basittir. Genelde dosyanın virüslenmeden önceki ilk baytları (3, 5, 16 veya daha fazlası), sonlardaki virüsün bulunduğu yerde durmaktadır. Bunların yerini tespit ettikten sonra, dosyanın başına yazıp, virüsün başladığı yerden dosya kesilerek (EOF-Dosya Sonu) orjinal dosya elde edilebilir. EXE dosyalarda virüs temizlerken biraz daha fazla teknik bilgiye ihtiyacınız olacaktır. EXE’lerin başında, başlık (header) denilen bir parametre bloğu vardır. Dosyanın uzunluğu, programın nereden çalışmaya başlayacağı, gerekli bellek miktarı gibi bilgilerden oluşmaktadır.
Virüsün burada yaptığı değişiklikleri eski haline getirmek gerekiyor. Sonra da dosyanın sonundaki virüslü kısmı kesip atmak.
Yüzeysel olarak basit bir anti-virüs hakkında verebileceğimiz bilgi bu kadar. Yerimizin darlığı nedeniyle maalesef suya sabuna dokunmadan yazabileceklerimiz bunlar. Fakat belki gelecek sayılarda tatmin edici bir yazı ile bu konuda meraklı olanları sevindiririz.
|