Selam arkadaşlar daha önce Optimist®, Kill4Dead gibi zamanında yazılım ekibinde görev yapmış arkadaşlar vardı bu tür konuları çok desteklemişlerdi çok istemiştim zamanında kodları mantık deyip geçiştirirlerdi halbuki bilgi paylaştıkça çoğalır değil mi arkadaşlar? Şahsen daha önce bir forumda paylaşmıştım burada da paylaşmam gerektiğini düşündüm umarım yararlı olur. Şunu da belirtmek isterim vb.net dilinde Kaspersky, Avira gibi tombiş antivirüsler yazılamaz bu tür yazılımlar C dillerine uygundur. Bizim program sadece dosyanın hash değerlerini okuyup virüslü hash değeri ile karşılaştırma yapmakta eğer değerler aynı ise virüslüdür uyarısı vermekte değilse temiz dönüşü yapmaktadır. Ben sadece ana mantığı paylaşıyorum sizlerle sizler bunu genişletebilirsiniz.
Öncelikle yukarıda belirttiğim gibi "hash" yöntemi pek önerilen bir yöntem değildir çünkü "hash" kodları o dosyanın kimlik numarasıdır hani suçluyu polisler çevirme yapıp kimlik numaralarını sorgulayarak yakalamaya çalışır ya o mantıkla hareket eder. Önerilen yöntem "imza" yöntemidir bu yöntem sayesinde dosya açılmadan kötü adamın hislerini okur neler yapacağını bilir. Ancak bu imza yöntemi araştırdığım kadarı ile C++ ve C# kodları için daha uygun. Her neyse gelin konumuza giriş yapalım.
Kodlarımız hem "md5" hem "sha256" hem de "sha1" hash'larını barındırmakta ve dosyaların hash'larını okumakta. Bizim ihtiyacımız olan genellikle "md5" ve "sha256".
Not : Bu dosyaların "hash üğretilmesi" konusunda pek çok yöntem mevcut siz değerli üşengeç arkadaşların "google arama motoruna" "vb.net how to get files md5 checksum" yazarak araştıracağına eminim.
Projemize şunları eklemeyi unutmayalım :
2 adet Textbox (birinin adını TB_path yapalım)
2 adet buton (birinin adını BT_Parcourir yapalım)
1 adet Richtextbox
1 adet Listbox
2 adet Label (adları LB_sha1 ve LB_sha256 yapalım)
1 adet OpenFileDialog.
Ekledik peki ne işe yarıyor?
Textbox1 seçilen dosyanın "md5 hash'ını"gösteriyor.
TB_path seçilen dosyanın dizinini gösteriyor "örn: C:\virus.exe"
BT_Parcourir butona tıklayınca taranacak dosyanızı seçiyor.
Buton1 basınca RichTextbox1'de yer alan hash'lar içerisinde textbox1'de yazan hash'ı arıyor.
LB_sha1 taranacak dosyanın "sha1 hash'larını" LB_sha1 adlı label'de gösteriyor.
LB_sha256 taranacak dosyanın "sha256 hash'larını" LB_sha256 adlı label'de gösteriyor.
Listbox1 Richtextbox1 içerisinde yer alan "hash'larda"n bir tanesi Textbox1'de yazan hash ile aynıysa "virüs algılandı" diye ekliyor aynı değilse "temiz" diye ekliyor.
OpenFileDialog Taranacak dosyayı seçmemizi sağlayan araç.
Kodlara Geçelim
İlk önce siz bir not defteri açın ve içine buradaki(tıkla) "hash kodlarını" yapıştırın ve "Farklı Kaydet" deyip aşağıda yer alan "Kayıt Türünü" "Tüm Dosyaları" seçip "hash.db" olarak "D:\" dizinine kaydedin. Bu virüs veri tabanımız olacak yaklaşık 1000 tane virüs tanımaktadır. Ancak dikkat etmeniz gereken nokta bu hash kodları 2010-2011 yıllarına aittir biraz eskidir sizin güncelleyeceğinizden eminim.
Form1 Load olayına aşağıdaki kodu yapıştıralım;
"SHA256" ve "MD5" kodları aynı zamanda şifreleme yani "encrypt(şifrele)" ve "decrypt(çöz)" kodları olarak da kullanıldığı için "Cryptography" kütüphanesini projemizin en başına ekliyoruz.
Gerekli kütüphane eklendikten sonra "hash" üğretme kodları ile ilgili dosya dizini için "hash" üğretmemizi kolaylaştıran kodu ekleyelim.
Yukarda ki kodları ekledikten sonra asıl "hash generator" yani "hash üğretme" kodlarını ekleyelim. Aşağıda görüldüğü gibi hash tipini seçip dosya yolunu yazıyoruz ve hash üğretiyor. Eğer hash üretemezse hata veriyor.
Bunları ekledikten sonra gelelim dosya açma butonu ile tara butonu kodlarına;
Not: Gerekli açıklama " ' " ile yapılmıştır kodların açıklamasını form'a yapıştırınca görebilirsiniz.
Virüs Veri Tabanımı Nasıl Genişletirim?
Çok basit bunun içinde birden fazla yöntem var ben aklıma gelenleri sizlerle paylaşıyorum;
a. Kendiniz bir virus kodlarsınız ve bu dosyanın yukarıda ki kodları yardımı ile "md5 hash'ını" bulup veri tabanınıza ekleyebilirsiniz.
b. İnternetten "trojan builder'lerini" indirip bunların "hash kodlarını" yine aynı şekilde projenize ekleyebilirsiniz veya farklı seçenekleri(cmd'yi kapat, başlangıca ekle vb. özelliklerini seçerek) "trojan builderi'nden(örnek : spynet)" işaretleyip "server" oluşturup bunların "hash kodlarını" veri tabanınıza ekleyebilirsiniz.
c. Antivirus sitelerinden "hash virüs kodlarını" içeren bir veri tabanı bulabilir veya "online virus taratma sitelerinde" taranan ve virüslü bulunan dosyaların "hash kodlarını" veri tabanınıza ekleyebilirsiniz.
d. Araştırarak
Program Gelişimi
Projenizi geliştirmek basit örneğin otomatik güncelleme kodu eklerseniz. Dosyayı tek tek seçmez de "listbox" ile "C:" ve "D:" sürücülerinde yer alan dosyaları listeletir "listbox'a" ekler ve tarama kodunu "timer'a(zamanlayıcıya)" bağlarsınız vesaire vesaire.
Yararlandığım Kaynaklar :
Burada Yer Alan Hazır Kaynak Koddan(Source) Yararlandım(Tıkla Kaynak)
Öncelikle yukarıda belirttiğim gibi "hash" yöntemi pek önerilen bir yöntem değildir çünkü "hash" kodları o dosyanın kimlik numarasıdır hani suçluyu polisler çevirme yapıp kimlik numaralarını sorgulayarak yakalamaya çalışır ya o mantıkla hareket eder. Önerilen yöntem "imza" yöntemidir bu yöntem sayesinde dosya açılmadan kötü adamın hislerini okur neler yapacağını bilir. Ancak bu imza yöntemi araştırdığım kadarı ile C++ ve C# kodları için daha uygun. Her neyse gelin konumuza giriş yapalım.
Kodlarımız hem "md5" hem "sha256" hem de "sha1" hash'larını barındırmakta ve dosyaların hash'larını okumakta. Bizim ihtiyacımız olan genellikle "md5" ve "sha256".
Not : Bu dosyaların "hash üğretilmesi" konusunda pek çok yöntem mevcut siz değerli üşengeç arkadaşların "google arama motoruna" "vb.net how to get files md5 checksum" yazarak araştıracağına eminim.
Projemize şunları eklemeyi unutmayalım :
2 adet Textbox (birinin adını TB_path yapalım)
2 adet buton (birinin adını BT_Parcourir yapalım)
1 adet Richtextbox
1 adet Listbox
2 adet Label (adları LB_sha1 ve LB_sha256 yapalım)
1 adet OpenFileDialog.
Ekledik peki ne işe yarıyor?
Textbox1 seçilen dosyanın "md5 hash'ını"gösteriyor.
TB_path seçilen dosyanın dizinini gösteriyor "örn: C:\virus.exe"
BT_Parcourir butona tıklayınca taranacak dosyanızı seçiyor.
Buton1 basınca RichTextbox1'de yer alan hash'lar içerisinde textbox1'de yazan hash'ı arıyor.
LB_sha1 taranacak dosyanın "sha1 hash'larını" LB_sha1 adlı label'de gösteriyor.
LB_sha256 taranacak dosyanın "sha256 hash'larını" LB_sha256 adlı label'de gösteriyor.
Listbox1 Richtextbox1 içerisinde yer alan "hash'larda"n bir tanesi Textbox1'de yazan hash ile aynıysa "virüs algılandı" diye ekliyor aynı değilse "temiz" diye ekliyor.
OpenFileDialog Taranacak dosyayı seçmemizi sağlayan araç.
Kodlara Geçelim
İlk önce siz bir not defteri açın ve içine buradaki(tıkla) "hash kodlarını" yapıştırın ve "Farklı Kaydet" deyip aşağıda yer alan "Kayıt Türünü" "Tüm Dosyaları" seçip "hash.db" olarak "D:\" dizinine kaydedin. Bu virüs veri tabanımız olacak yaklaşık 1000 tane virüs tanımaktadır. Ancak dikkat etmeniz gereken nokta bu hash kodları 2010-2011 yıllarına aittir biraz eskidir sizin güncelleyeceğinizden eminim.
Form1 Load olayına aşağıdaki kodu yapıştıralım;
Kod:
RichTextBox1.Text = My.Computer.FileSystem.ReadAllText("D:\hash.db") 'virus hashlarını ilgili dizinden forma aktarıyoruz
"SHA256" ve "MD5" kodları aynı zamanda şifreleme yani "encrypt(şifrele)" ve "decrypt(çöz)" kodları olarak da kullanıldığı için "Cryptography" kütüphanesini projemizin en başına ekliyoruz.
Kod:
Imports System.IO
' Gerekli importlar zaten cryptography olmadan : MD5, SHA1, SHA256, ... yapamayız
Imports System.Security
Imports System.Security.Cryptography
Gerekli kütüphane eklendikten sonra "hash" üğretme kodları ile ilgili dosya dizini için "hash" üğretmemizi kolaylaştıran kodu ekleyelim.
Kod:
Public Class Form1
#Region "Raccourcis pour la fonction principale hash_generator" ' elin cavuru yazmış kodları ne diyor bilmiyorum
Function md5_hash(ByVal file_name As String)
Return hash_generator("md5", file_name)
End Function
Function sha_1(ByVal file_name As String)
Return hash_generator("sha1", file_name)
End Function
Function sha_256(ByVal file_name As String)
Return hash_generator("sha256", file_name)
End Function
#End Region
Yukarda ki kodları ekledikten sonra asıl "hash generator" yani "hash üğretme" kodlarını ekleyelim. Aşağıda görüldüğü gibi hash tipini seçip dosya yolunu yazıyoruz ve hash üğretiyor. Eğer hash üretemezse hata veriyor.
Kod:
Function hash_generator(ByVal hash_type As String, ByVal file_name As String)
Dim hash
'buraya başka hashları eklyebilirsiniz örneğin base64'ü aşağıdaki kodlara bakarak ekleyebilirsiniz.
If hash_type.ToLower = "md5" Then
hash = MD5.Create
ElseIf hash_type.ToLower = "sha1" Then
hash = SHA1.Create()
ElseIf hash_type.ToLower = "sha256" Then
hash = SHA256.Create()
Else
MsgBox("Tanımlama sırasında hata oluştu : " & hash_type, MsgBoxStyle.Critical)
Return False
End If
Dim hashValue() As Byte
Dim fileStream As FileStream = File.OpenRead(file_name)
fileStream.Position = 0
hashValue = hash.ComputeHash(fileStream)
Dim hash_hex = PrintByteArray(hashValue)
fileStream.Close()
Return hash_hex
End Function
Public Function PrintByteArray(ByVal array() As Byte)
Dim hex_value As String = ""
Dim i As Integer
For i = 0 To array.Length - 1
hex_value += array(i).ToString("X2")
Next i
Return hex_value.ToLower
End Function
Bunları ekledikten sonra gelelim dosya açma butonu ile tara butonu kodlarına;
Not: Gerekli açıklama " ' " ile yapılmıştır kodların açıklamasını form'a yapıştırınca görebilirsiniz.
Kod:
Private Sub BT_Parcourir_Click(sender As System.Object, e As System.EventArgs) Handles BT_Parcourir.Click
If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
Dim path As String = OpenFileDialog1.FileName 'burada butona basınca oluşan hashların formda hangi ögelerin içerisinde bulunduğunu görüyoruz
TB_path.Text = path
TextBox1.Text = md5_hash(path) 'siz isterseniz label yerine textbox'da kullnabilirsiniz
LB_sha1.Text = sha_1(path)
LB_sha256.Text = sha_256(path)
End If
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim a As String 'ilgili dizinden aktardığımız hash ile oluşan hash'ı karşılaştırıyoruz eğer hash'lar aynıysa listbox'a virüs olarak ekle diyoruz
Dim b As String 'kısacası textbox1'de yazan ifadeyi richtextbox1 içerisinde arıyoruz
a = TextBox1.Text
b = InStr(RichTextBox1.Text, a)
If b Then
RichTextBox1.Focus()
ListBox1.Items.Add("Virüs Var:" + TB_path.Text)
Else
ListBox1.Items.Add("Temiz:" + TB_path.Text)
End If
End Sub
Virüs Veri Tabanımı Nasıl Genişletirim?
Çok basit bunun içinde birden fazla yöntem var ben aklıma gelenleri sizlerle paylaşıyorum;
a. Kendiniz bir virus kodlarsınız ve bu dosyanın yukarıda ki kodları yardımı ile "md5 hash'ını" bulup veri tabanınıza ekleyebilirsiniz.
b. İnternetten "trojan builder'lerini" indirip bunların "hash kodlarını" yine aynı şekilde projenize ekleyebilirsiniz veya farklı seçenekleri(cmd'yi kapat, başlangıca ekle vb. özelliklerini seçerek) "trojan builderi'nden(örnek : spynet)" işaretleyip "server" oluşturup bunların "hash kodlarını" veri tabanınıza ekleyebilirsiniz.
c. Antivirus sitelerinden "hash virüs kodlarını" içeren bir veri tabanı bulabilir veya "online virus taratma sitelerinde" taranan ve virüslü bulunan dosyaların "hash kodlarını" veri tabanınıza ekleyebilirsiniz.
d. Araştırarak
Program Gelişimi
Projenizi geliştirmek basit örneğin otomatik güncelleme kodu eklerseniz. Dosyayı tek tek seçmez de "listbox" ile "C:" ve "D:" sürücülerinde yer alan dosyaları listeletir "listbox'a" ekler ve tarama kodunu "timer'a(zamanlayıcıya)" bağlarsınız vesaire vesaire.
Yararlandığım Kaynaklar :
Burada Yer Alan Hazır Kaynak Koddan(Source) Yararlandım(Tıkla Kaynak)
Son düzenleme: