Merhabalar bugün 2 sene sonunda vira bismillah diyerek bizleri Virüstotal'in çıkarmış olduğu YARA adlı uygulamanın basit yapısını anlatan neticesinde aydınlatan @'ReDLiNe 'a vermiş olduğu emeklerden dolayı teşekkür ediyoruz. Konu link;
YARA: Açık Kaynak Kod Zararlı Yazılım Analiz Aracı ve Başlangıç İçin Örnek Kurallar
Herkese iyi forumlar. Uzun bir zaman sonunda yeni bir konuya hoş geldiniz. Konumuz -YARA- Bu araç gönüllü developerların geliştirdiği "kurallar" ile çalışan, C dilleri başta olmak üzere başlıca diller ile VirusTotal tarafından geliştirilmekte olan manuel tarama aracıdır. -Kurulum- Releases ·...
www.turkhackteam.org
Şimdi burada bu yapıyı kullanarak yapının içerisinde yer alan argümanlardan faydalanıp yürütülebilir nesneler üzerinde tarama yaptırmayı, yapmış olduğu taramalarda ne gibi bir sonuç verdiğini, verdiği sonuçları okuyup klasörünüzde yer alan yürütülebilir nesnelerin şüpheli hareket barındırıp barındırmadığını göreceğiz.
Not : Burada sıfırdan bir YARA kodlamıyoruz sadece varolan YARA nesnesi üzerinde uzaktan işlem yaptırtıp çıktıya göre hareket ediyoruz. Forumdaki bazı arkadaşlar argüman yapısını yanlış anlamış antivirüs yazdık diye geziyorlar.
Not : @'ReDLiNe konusunu inceleyerek kural yazımı, kuralların nerede toplandıkları, YARA indirme linki vs. gibi sorunların çoğuna yanıt alabilirsiniz o yüzden burada anlatmıyorum.
Not : Kodların açıklaması ' içerisinde verilmiştir.
Not : Timer ögesi sistemi yorabilir bunun için BackGroundWorker ögesi eklemenizi tavsiye ederim.
Kodlamaya geçelim...
Ekleyeceğimiz kütüphane;
Imports System.IONesneler;
5 Tane Label ekleyelim. Bunlar;
Label1 Yara uygulamasının dizinini verecek.
Label2 işlemimiz klasördeki toplam dosya sayısı kadar yani taratacağımız klasörde ne kadar dosya varsa bunların toplam sayısını yazacak.
Label3 formunuzun GUI deseninde nesnelerin ne işe yaradığını gösterecek. Ben de [ RAPOR ] nesnesini belirttim.
Label4 Text karşılığına ' " ' işaretini koydum. Bu bize komut istemi üzerinde argüman kodunu çalıştırmada işe yarayacak.
Label5 Yara kuralının olduğu dizini burada yazacak.
2 Adet Listbox ekleyelim. Bunlar;
Listbox1 Klasör seçilince içerisindeki dosyaların adlarını buraya yansıtacak. Hangi dosyada kural taradığını kullanıcılar görsün diye.
Listbox2 Tarama sonucunda çıktıda değişiklik varsa listeye 'ŞÜPHELİ' yoksa 'TEMİZ' olarak ekleyecek.
1 Adet Textbox ekleyelim. Multiline özelliği aktif olsun & ScrollBars özelliği Both olsun. Bu bize YARA çıktısını içerisine yazmasını sağlayacak.
5 Adet Buton ekleyelim. Bunlar;
Buton1 Klasör seçmemizi
Buton2 YARA kuralını seçmemizi
Buton3 YARA uygulamasının kendisini seçmemizi
Buton4 Tarama işlemini başlatmamızı sağlayacak
Buton5 Kapat
1 adet Timer ekleyelim. Bu da her 2.5 saniyede 1 dosya taramamızı sağlayacak & işlemi otomatik olarak yapacak. Intervival 2750 olsun.
Class Altına Genel Bir Dialog Ögesi Tanımlayalım(Bu sayede GUI tasarımına dialog ögesi eklememize gerek kalmıyor);
Dim folderBrowser As New FolderBrowserDialog()Şimdi seçilen klasör içerisinde bulunan dosyaları listeye aktarma kodunu giriyoruz;
C#:
Private Sub ListFolderContents(folderPath As String)
' ListBox'ı temizle
ListBox1.Items.Clear()
Try
' Klasördeki tüm dosyaları al ve ListBox'a ekle
For Each file As String In Directory.GetFiles(folderPath)
ListBox1.Items.Add(Path.GetFileName(file))
Next
' Klasördeki tüm alt klasörleri al ve ListBox'a ekle
' For Each folder As String In Directory.GetDirectories(folderPath)
' ListBox1.Items.Add("[Alt Klasör] " & Path.GetFileName(folder))
'Next
Label2.Text = ListBox1.Items.Count.ToString() 'Dosya sayısını Label2 ye aktardık.
Catch ex As Exception
MessageBox.Show("Hata oluştu: " & ex.Message, "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Buton1 içerisine gireceğimiz kod seçilen klasör içerisinde yer alan dosyaları Listbox1'e ekliyor;
C#:
If folderBrowser.ShowDialog() = DialogResult.OK Then
ListFolderContents(folderBrowser.SelectedPath)
End If
Buton2 içerisine gireceğimiz kod YARA 'nın olduğu yeri seçmemizi sağlıyor;
Kod:
Using openFileDialog As New OpenFileDialog() 'Burada Dialog nesnesi forma yerleştirilemeden bir nesne türetip kodunu veriyoruz
openFileDialog.Filter = "Yürütülebilir Dosyayı Seçin (yara64.exe)|yara64.exe" ' Sadece Yara dosyamızın uzantısını seç
If openFileDialog.ShowDialog() = DialogResult.OK Then ' Eğer yara dosyamızı seçmiş isek
Dim exePath As String = openFileDialog.FileName ' Yara dosyamız seçildikten sonra dizinini değişkene bağlıyoruz
Label1.Text = exePath ' dizini değişkene verdik
End If 'işlem cmd üzerinde gerçekleşecek
End Using
Timer1 içerisine gireceğimiz kod Listbox1'de yer alan ögeleri tek tek aşağı inmesini ve argüman kodunu cmd'ye verip tarama işlemini başlatmasını ardından sonuçları Textbox1'e aktarmasını sağlıyor & tüm dosyaları kontrol edince kendini kapatıyor;
Kod:
If ListBox1.SelectedIndex = ListBox1.Items.Count - 1 Then
ListBox1.SelectedIndex = 0
Else
ListBox1.SelectedIndex += 1
Dim komut As String = Label1.Text + " " + Label5.Text + " " + Label4.Text + folderBrowser.SelectedPath + "\" + ListBox1.SelectedItem + Label4.Text 'argüman komutumuz burada
' ProcessStartInfo nesnesini oluştur ve ayarla
Dim psi As New ProcessStartInfo()
psi.FileName = "cmd.exe"
psi.Arguments = "/c " & komut ' /c, komutu çalıştırıp cmd'yi kapatır
psi.RedirectStandardOutput = True
psi.UseShellExecute = False
psi.CreateNoWindow = True
' Process'i başlat ve çıktıyı oku
Dim process As New Process()
process.StartInfo = psi
process.Start()
Dim output As String = process.StandardOutput.ReadToEnd()
process.WaitForExit()
TextBox1.Text = output 'çıktıyı textbox1 e aktardık
Call ara()
End If
If ListBox1.SelectedIndex = Label2.Text - 1 Then 'tüm ögeleri kontrol ettiğin zaman dur
Timer1.Stop()
Else
End If
Bir 'ara' ögesi oluşturduk & kodlarımızı girelim(Burası argüman kodu çalıştıktan sonra çıktı içerisinde ne verdiğine bakıyor);
C#:
Sub ara()
If TextBox1.Text = Nothing Or TextBox1.Text = "Clean" Or TextBox1.Text = "clean" Then ' Eğer çıktıda bir şey yoksa veya clean ~ Clean tarzı şeyler veriyorsa temiz olarak ekle
ListBox2.Items.Add("Temiz: " + folderBrowser.SelectedPath + "\" + ListBox1.SelectedItem)
Else
ListBox2.Items.Add("Şüpheli Hareket Tespit Edildi: " + folderBrowser.SelectedPath + "\" + ListBox1.SelectedItem) ' Değilse şüpheli olarak ekle
End If
End Sub
Buton3 kodumuz uygulamamızı tamamen kapatıyor;
C#:
End
Buton4 kodumuz YARA kuralını seçmemizi & label5 'e aktarmamızı sağlıyor;
C#:
Using openFileDialog As New OpenFileDialog() 'Burada Dialog nesnesi forma yerleştirilemeden bir nesne türetip kodunu veriyoruz
openFileDialog.Filter = "Yara Kuralı Seçin (*.yar)|*.yar" ' Sadece Yara dosyamızın uzantısını seç
If openFileDialog.ShowDialog() = DialogResult.OK Then ' Eğer yara kuralımızı seçmiş isek
Dim yaraPath As String = openFileDialog.FileName ' Yara dosyamız seçildikten sonra dizinini değişkene bağlıyoruz
Label5.Text = yaraPath ' dizini değişkene verdik
End If
End Using
Buton5 kodumuz timer ögesini çalıştırarak tarama işlemini başlatıyor;
C#:
Timer1.Start()
Demo Form Düzeni
( Görüldüğü üzere nesnelerimi GUI tasarımını şık göstermesi için sakladım. Tabi burası size kalmış... )
~ S0N ~
( Görüldüğü üzere nesnelerimi GUI tasarımını şık göstermesi için sakladım. Tabi burası size kalmış... )
~ S0N ~
Son düzenleme:




