Antivirüs Yapımı [ Özgün Konu ] [ vb.net ] [kod]

Maveraün Nehr

Blue Team Expert
25 Haz 2021
975
1,861
41.303921, -81.901693
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;


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.


Basit Tasarım Örneğim






Yararlandığım Kaynaklar :
Burada Yer Alan Hazır Kaynak Koddan(Source) Yararlandım(Tıkla Kaynak)
 
Son düzenleme:

Maveraün Nehr

Blue Team Expert
25 Haz 2021
975
1,861
41.303921, -81.901693
bu virüs algoritamsını biraz geliştirebilirsin bu biraz scantime yani hashları tarayarak yapar herhangibir obfuscator ile şifrelenirse yüksek ihtimal ile göremez o yüzden dump debug gibi reverse enginner toolarını yazmayı öğrenmek daha sağlıklıdır
İçerisinde ki imzayı okuyor değil mi bunlar yoksa hexeditor gibi bir şey mi daha çok imzayı okuyor diye tahmin ediyorum
 

sw1ndler

Katılımcı Üye
29 Şub 2020
592
136
İçerisinde ki imzayı okuyor değil mi bunlar yoksa hexeditor gibi bir şey mi daha çok imzayı okuyor diye tahmin ediyorum
şöyle düşün bir maskeli adam var ve sen dış görünüşünden yüzünü görmeyip yüzüne aldanıp içeri sokuyorsun bunu scantime olarak düşün ve runtime da şudur dıştan öyle gözükür ama tedbir olsun diye maskesini çıkartırsın ve ne oldugunu anlarsın
 

'The Wolf

Kıdemli Üye
22 Nis 2021
4,043
2,565
Tanrı dağı
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;


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.


Basit Tasarım Örneğim






Yararlandığım Kaynaklar :
Burada Yer Alan Hazır Kaynak Koddan(Source) Yararlandım(Tıkla Kaynak)
baya uğraşmışsın ve bayada emek vermişsin. Ellerine Sağlık Güzel Konu Olmuş :) :)
 
8 Nis 2020
213
32
Basit bir mantık olarak ve bilmeyenlere öğretmek için işe yarar ancak bu yöntem virüs imzası almaz, sadece hashleri kontrol eder. Yeni virüslerde hash yöntemi pek bir işe yaramayacaktır. Dosyanın sonuna rastgele bir byte eklerseniz hashler tamamen değişeceği için virüs yakalanmayacaktır. Kısaca şöyle bir örnek vereyim:

Darkcomet rat ile bir rat oluşturdunuz diyelim. Bunu antivirüse hash yöntemiyle tanıttınız. Bu oluşturduğumuz ratı algılayacaktır ancak ratı yeniden oluşturduğumuzda bazı byte'lar değişeceği için ratı algılayamayacaktır ve antivirüsün bir anlamı kalmayacaktır.
 

AKRES

Üye
22 Kas 2019
71
12
Teknoloji
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;


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.


Basit Tasarım Örneğim






Yararlandığım Kaynaklar :
Burada Yer Alan Hazır Kaynak Koddan(Source) Yararlandım(Tıkla Kaynak)
Gayet iyi bir anlatım olmuş ellerine sağlık
 

Maveraün Nehr

Blue Team Expert
25 Haz 2021
975
1,861
41.303921, -81.901693

Gayet iyi bir anlatım olmuş ellerine sağlık
Teşekkürler arkadaşlar konuya hoşgeldiniz.
Basit bir mantık olarak ve bilmeyenlere öğretmek için işe yarar ancak bu yöntem virüs imzası almaz, sadece hashleri kontrol eder. Yeni virüslerde hash yöntemi pek bir işe yaramayacaktır. Dosyanın sonuna rastgele bir byte eklerseniz hashler tamamen değişeceği için virüs yakalanmayacaktır. Kısaca şöyle bir örnek vereyim:

Darkcomet rat ile bir rat oluşturdunuz diyelim. Bunu antivirüse hash yöntemiyle tanıttınız. Bu oluşturduğumuz ratı algılayacaktır ancak ratı yeniden oluşturduğumuzda bazı byte'lar değişeceği için ratı algılayamayacaktır ve antivirüsün bir anlamı kalmayacaktır.

Şahsımı yanlış algılamayın lakin konuyu okumamışsınız sanırım bundan bahsettim.



 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.