C# FileSystemWatcher ile Klasör Dinleme

Kruvazör

Yazılım Ekibi Lideri
28 Mar 2020
1,725
2,543
Wrong Side Of Heaven
Merhaba arkadaşlar
Ben
Kruvazör

Bugün sizlerle C# Kullanarak bir klasöre giren dosyaları dinleyebilmeyi ve o dosya hakkında bilgi edinmeyi göstereceğim.
bunu yaparken FileSystemWatcher Sınıfını kullanacağız.

Peki bununla neler yapabilirim?
Belirtilen dizinde meydana gelen değişiklikleri (yeni dosya oluşturma, dosya silme, dosya değiştirme, dizin oluşturma, dizin silme vb.) dinleyebilir,
Bu olayları dinleyen bir uygulamanın, dosya sistemi değişikliklerine yanıt vermesini sağlar. Örneğin, bir dosya oluşturulduğunda veya silindiğinde belirli bir işlemi başlatma işlemini tetikleyebilirsiniz.


C# ile klasör veri girişlerini izleme konusunda biraz bilgi sahibi olduğumuza göre artık örneğe geçebiliriz.

Senaryo:
Bir şirketin muhasebe personeli internetten Cengiz Kurtoğlu şarkıları indirirken aynı zamanda sitenin zararlı yazılım ve reklam içermesinden kaynaklı olarak şarkıların yanında bir de zararlı bir exe dosyası indiriyor. Sonrasında zararlı exe dosyasını execute ederek zararlı yazılımı amacına ulaştırıyor.
bu olay karşısında şaşkına dönen
gariban IT personeli de antivirüse ya da başka bir ürüne para vermek istememektedir. çünkü ITciler genelde anadolu kurnazıdır.
IT personeli visual studioyu açar ve kafasından şunları geçirir:

(Yazacağım program cengiz kurtoğlu sevdalısı muhasebecinin indirme klasörüne giren verileri sürekli dinlemeli ve belirli bir dosya uzantısına ait olan dosyaları virustotal gibi bir platformda taratmalı sonrasında çıkan sonuca göre kullanıcıya uyarı vermeli.)

Detay:

VirusTotal ücretli üyeliklerinde bile tarama limiti koyar.
Aynı zamanda taranacak dosya VirusTotal'in limitlerinin üstündeyse tarama işlemi yapmaz.

Yani kısaca anadolu kurnazı IT personeli hedefine yaklaştı ancak hedefi vuramadı.

Haydi şimdi bu kodun belli bir kısmını gerçeğe dökelim.


Form için 1 adet listbox yeterli.
k4304c4.jpg


Global alanımıza gelelim ve kodlarımızı ekleyelim
C#:
   // İndirilen dosyaların izlendiği klasör yolu
   private string indirilenlerKlasoru = @"C:\Users\cengizkurtoglusevenmuhasebeci\Downloads";  //buraya downloads klasörünüzün path'i gelecek

   // FileSystemWatcher nesnesi
   private FileSystemWatcher watcher;

   // İşlenmiş dosyaların takibini yapmak için HashSet
   private HashSet<string> processedFiles = new HashSet<string>();  //list de kullanabilirsiniz pek kritik değil bu şekilde başka bir koleksiyon yapısı gördünüz :D


Form scope içine gelelim ve ekleyelim
C#:
        private void Form1_Load(object sender, EventArgs e)
        {
            // İndirilenler klasörünü dinlemek için FileSystemWatcher oluştur
            watcher = new FileSystemWatcher();
            watcher.Path = indirilenlerKlasoru;

            // Yeni bir dosya eklendiğinde trigger olacak event
            watcher.Created += DosyaOlusturuldu;

            // Değiştirilen bir dosya olduğundatrigger olacak event
            watcher.Changed += DosyaDegistirildi;

            // Dosya silindiğinde trigger olacak event
            watcher.Deleted += DosyaSilindi;

            // Dinlemeyi başlat
            watcher.EnableRaisingEvents = true;
        }

Şimdi de fonksiyonlarımızı yazalım
C#:
  private void DosyaOlusturuldu(object sender, FileSystemEventArgs e)
  {
      // Dosya varsa ve daha önce işlenmemişse
      if (File.Exists(e.FullPath) && processedFiles.Add(e.FullPath))
      {
          // UI thread üzerinde ListBox'a ekleme yap
          Invoke(new Action(() => ListboxaEkle(e.Name, DosyaBoyutuGetir(e.FullPath), File.GetCreationTime(e.FullPath))));
      }
  }

  private void DosyaDegistirildi(object sender, FileSystemEventArgs e)
  {
      // Dosya varsa ve daha önce işlenmemişse
      if (File.Exists(e.FullPath) && processedFiles.Add(e.FullPath))
      {
          // UI thread üzerinde ListBox'a ekleme yap
          Invoke(new Action(() => ListboxaEkle(e.Name, DosyaBoyutuGetir(e.FullPath), File.GetCreationTime(e.FullPath))));
      }
  }

  private void DosyaSilindi(object sender, FileSystemEventArgs e)
  {
      // Silinen dosyayı işlenmiş dosyalar listesinden kaldır
      processedFiles.Remove(e.FullPath);

      // Dosya silindiğinde ListBox'u güncelle
      Invoke(new Action(() => ListboxuGuncelle()));
  }

  private long DosyaBoyutuGetir(string dosyaYolu)
  {
      // Dosya boyutunu byte cinsinden al
      FileInfo fileInfo = new FileInfo(dosyaYolu);
      return fileInfo.Length;
  }

  private string FormatDosyaBoyutu(long dosyaBoyutuBytes)
  {
      const long kb = 1024;
      const long mb = kb * 1024;
      const long gb = mb * 1024;
      const long tb = gb * 1024;

      string formatString = "{0} {1}";

      if (dosyaBoyutuBytes < kb)
      {
          return string.Format(formatString, dosyaBoyutuBytes, "Bytes");
      }
      else if (dosyaBoyutuBytes < mb)
      {
          return string.Format(formatString, dosyaBoyutuBytes / kb, "KB");
      }
      else if (dosyaBoyutuBytes < gb)
      {
          return string.Format(formatString, dosyaBoyutuBytes / mb, "MB");
      }
      else if (dosyaBoyutuBytes < tb)
      {
          return string.Format(formatString, dosyaBoyutuBytes / gb, "GB");
      }
      else
      {
          return string.Format(formatString, dosyaBoyutuBytes / tb, "TB");
      }
  }

  private void ListboxaEkle(string dosyaAdi, long dosyaBoyutuBytes, DateTime olusturulmaTarihi)
  {
      // ListBox'a yeni dosyayı, boyutu ve oluşturulma tarihini ekle
      string dosyaBilgisi = $"{dosyaAdi} - {FormatDosyaBoyutu(dosyaBoyutuBytes)} - {olusturulmaTarihi.ToString("dd.MM.yyyy HH:mm:ss")}";
      listBoxDosyalar.Items.Add(dosyaBilgisi);
      listBoxDosyalar.Items.Add("-----------------------------------------------------------------------------------------------------------------");
  }

  private void ListboxuGuncelle()
  {
      // ListBox içeriğini temizle
      listBoxDosyalar.Items.Clear();
  }

VirusTotal apisine veri yollama ve çıktı alma kısmı da size araştırma olsun :)

o1ek41a.jpg

IT personeli yine üzgün.
Burada oluşan .tmp uzantılı dosyanın ne olduğunu bilenler fikirlerini yorumlarda paylaşabilir. :)
Yoksa muhasebeci yine mi bir zararlı yazılım indirdi???


okuduğunuz için teşekkürler.
 

ElChapoİpV4

Katılımcı Üye
10 Tem 2021
697
784
23
Hocam elinize emeğinize sağlık öncelikle. Örneklendiremerinizde Sn. World Star. Cengiz Kurtoğluna yer verdiğiniz için size minnttarız.
Herkese iyi forumlar
 

ByFelez

Uzman üye
9 Tem 2013
1,818
1,774
Ellerinize Sağlık..
Bir şey diyeceğim yanlış anlaşılmasın.. GPT mi kullandınız ?
 

Kruvazör

Yazılım Ekibi Lideri
28 Mar 2020
1,725
2,543
Wrong Side Of Heaven

drjacob

Uzman üye
21 Ocak 2012
1,779
407
localhost
Merhaba arkadaşlar
Ben
Kruvazör

Bugün sizlerle C# Kullanarak bir klasöre giren dosyaları dinleyebilmeyi ve o dosya hakkında bilgi edinmeyi göstereceğim.
bunu yaparken FileSystemWatcher Sınıfını kullanacağız.


Peki bununla neler yapabilirim?
Belirtilen dizinde meydana gelen değişiklikleri (yeni dosya oluşturma, dosya silme, dosya değiştirme, dizin oluşturma, dizin silme vb.) dinleyebilir,
Bu olayları dinleyen bir uygulamanın, dosya sistemi değişikliklerine yanıt vermesini sağlar. Örneğin, bir dosya oluşturulduğunda veya silindiğinde belirli bir işlemi başlatma işlemini tetikleyebilirsiniz.



C# ile klasör veri girişlerini izleme konusunda biraz bilgi sahibi olduğumuza göre artık örneğe geçebiliriz.

Senaryo:

Bir şirketin muhasebe personeli internetten Cengiz Kurtoğlu şarkıları indirirken aynı zamanda sitenin zararlı yazılım ve reklam içermesinden kaynaklı olarak şarkıların yanında bir de zararlı bir exe dosyası indiriyor. Sonrasında zararlı exe dosyasını execute ederek zararlı yazılımı amacına ulaştırıyor.
bu olay karşısında şaşkına dönen
gariban IT personeli de antivirüse ya da başka bir ürüne para vermek istememektedir. çünkü ITciler genelde anadolu kurnazıdır.
IT personeli visual studioyu açar ve kafasından şunları geçirir:

(Yazacağım program cengiz kurtoğlu sevdalısı muhasebecinin indirme klasörüne giren verileri sürekli dinlemeli ve belirli bir dosya uzantısına ait olan dosyaları virustotal gibi bir platformda taratmalı sonrasında çıkan sonuca göre kullanıcıya uyarı vermeli.)


Detay:

VirusTotal ücretli üyeliklerinde bile tarama limiti koyar.
Aynı zamanda taranacak dosya VirusTotal'in limitlerinin üstündeyse tarama işlemi yapmaz.

Yani kısaca anadolu kurnazı IT personeli hedefine yaklaştı ancak hedefi vuramadı.

Haydi şimdi bu kodun belli bir kısmını gerçeğe dökelim.


Form için 1 adet listbox yeterli.
k4304c4.jpg


Global alanımıza gelelim ve kodlarımızı ekleyelim
C#:
   // İndirilen dosyaların izlendiği klasör yolu
   private string indirilenlerKlasoru = @"C:\Users\cengizkurtoglusevenmuhasebeci\Downloads";  //buraya downloads klasörünüzün path'i gelecek

   // FileSystemWatcher nesnesi
   private FileSystemWatcher watcher;

   // İşlenmiş dosyaların takibini yapmak için HashSet
   private HashSet<string> processedFiles = new HashSet<string>();  //list de kullanabilirsiniz pek kritik değil bu şekilde başka bir koleksiyon yapısı gördünüz :D


Form scope içine gelelim ve ekleyelim
C#:
        private void Form1_Load(object sender, EventArgs e)
        {
            // İndirilenler klasörünü dinlemek için FileSystemWatcher oluştur
            watcher = new FileSystemWatcher();
            watcher.Path = indirilenlerKlasoru;

            // Yeni bir dosya eklendiğinde trigger olacak event
            watcher.Created += DosyaOlusturuldu;

            // Değiştirilen bir dosya olduğundatrigger olacak event
            watcher.Changed += DosyaDegistirildi;

            // Dosya silindiğinde trigger olacak event
            watcher.Deleted += DosyaSilindi;

            // Dinlemeyi başlat
            watcher.EnableRaisingEvents = true;
        }

Şimdi de fonksiyonlarımızı yazalım
C#:
  private void DosyaOlusturuldu(object sender, FileSystemEventArgs e)
  {
      // Dosya varsa ve daha önce işlenmemişse
      if (File.Exists(e.FullPath) && processedFiles.Add(e.FullPath))
      {
          // UI thread üzerinde ListBox'a ekleme yap
          Invoke(new Action(() => ListboxaEkle(e.Name, DosyaBoyutuGetir(e.FullPath), File.GetCreationTime(e.FullPath))));
      }
  }

  private void DosyaDegistirildi(object sender, FileSystemEventArgs e)
  {
      // Dosya varsa ve daha önce işlenmemişse
      if (File.Exists(e.FullPath) && processedFiles.Add(e.FullPath))
      {
          // UI thread üzerinde ListBox'a ekleme yap
          Invoke(new Action(() => ListboxaEkle(e.Name, DosyaBoyutuGetir(e.FullPath), File.GetCreationTime(e.FullPath))));
      }
  }

  private void DosyaSilindi(object sender, FileSystemEventArgs e)
  {
      // Silinen dosyayı işlenmiş dosyalar listesinden kaldır
      processedFiles.Remove(e.FullPath);

      // Dosya silindiğinde ListBox'u güncelle
      Invoke(new Action(() => ListboxuGuncelle()));
  }

  private long DosyaBoyutuGetir(string dosyaYolu)
  {
      // Dosya boyutunu byte cinsinden al
      FileInfo fileInfo = new FileInfo(dosyaYolu);
      return fileInfo.Length;
  }

  private string FormatDosyaBoyutu(long dosyaBoyutuBytes)
  {
      const long kb = 1024;
      const long mb = kb * 1024;
      const long gb = mb * 1024;
      const long tb = gb * 1024;

      string formatString = "{0} {1}";

      if (dosyaBoyutuBytes < kb)
      {
          return string.Format(formatString, dosyaBoyutuBytes, "Bytes");
      }
      else if (dosyaBoyutuBytes < mb)
      {
          return string.Format(formatString, dosyaBoyutuBytes / kb, "KB");
      }
      else if (dosyaBoyutuBytes < gb)
      {
          return string.Format(formatString, dosyaBoyutuBytes / mb, "MB");
      }
      else if (dosyaBoyutuBytes < tb)
      {
          return string.Format(formatString, dosyaBoyutuBytes / gb, "GB");
      }
      else
      {
          return string.Format(formatString, dosyaBoyutuBytes / tb, "TB");
      }
  }

  private void ListboxaEkle(string dosyaAdi, long dosyaBoyutuBytes, DateTime olusturulmaTarihi)
  {
      // ListBox'a yeni dosyayı, boyutu ve oluşturulma tarihini ekle
      string dosyaBilgisi = $"{dosyaAdi} - {FormatDosyaBoyutu(dosyaBoyutuBytes)} - {olusturulmaTarihi.ToString("dd.MM.yyyy HH:mm:ss")}";
      listBoxDosyalar.Items.Add(dosyaBilgisi);
      listBoxDosyalar.Items.Add("-----------------------------------------------------------------------------------------------------------------");
  }

  private void ListboxuGuncelle()
  {
      // ListBox içeriğini temizle
      listBoxDosyalar.Items.Clear();
  }

VirusTotal apisine veri yollama ve çıktı alma kısmı da size araştırma olsun :)

o1ek41a.jpg

IT personeli yine üzgün.
Burada oluşan .tmp uzantılı dosyanın ne olduğunu bilenler fikirlerini yorumlarda paylaşabilir. :)
Yoksa muhasebeci yine mi bir zararlı yazılım indirdi???


okuduğunuz için teşekkürler.
elinize sağlık
 

Zwo

Katılımcı Üye
Merhaba arkadaşlar
Ben
Kruvazör

Bugün sizlerle C# Kullanarak bir klasöre giren dosyaları dinleyebilmeyi ve o dosya hakkında bilgi edinmeyi göstereceğim.
bunu yaparken FileSystemWatcher Sınıfını kullanacağız.


Peki bununla neler yapabilirim?
Belirtilen dizinde meydana gelen değişiklikleri (yeni dosya oluşturma, dosya silme, dosya değiştirme, dizin oluşturma, dizin silme vb.) dinleyebilir,
Bu olayları dinleyen bir uygulamanın, dosya sistemi değişikliklerine yanıt vermesini sağlar. Örneğin, bir dosya oluşturulduğunda veya silindiğinde belirli bir işlemi başlatma işlemini tetikleyebilirsiniz.



C# ile klasör veri girişlerini izleme konusunda biraz bilgi sahibi olduğumuza göre artık örneğe geçebiliriz.

Senaryo:

Bir şirketin muhasebe personeli internetten Cengiz Kurtoğlu şarkıları indirirken aynı zamanda sitenin zararlı yazılım ve reklam içermesinden kaynaklı olarak şarkıların yanında bir de zararlı bir exe dosyası indiriyor. Sonrasında zararlı exe dosyasını execute ederek zararlı yazılımı amacına ulaştırıyor.
bu olay karşısında şaşkına dönen
gariban IT personeli de antivirüse ya da başka bir ürüne para vermek istememektedir. çünkü ITciler genelde anadolu kurnazıdır.
IT personeli visual studioyu açar ve kafasından şunları geçirir:

(Yazacağım program cengiz kurtoğlu sevdalısı muhasebecinin indirme klasörüne giren verileri sürekli dinlemeli ve belirli bir dosya uzantısına ait olan dosyaları virustotal gibi bir platformda taratmalı sonrasında çıkan sonuca göre kullanıcıya uyarı vermeli.)


Detay:

VirusTotal ücretli üyeliklerinde bile tarama limiti koyar.
Aynı zamanda taranacak dosya VirusTotal'in limitlerinin üstündeyse tarama işlemi yapmaz.

Yani kısaca anadolu kurnazı IT personeli hedefine yaklaştı ancak hedefi vuramadı.

Haydi şimdi bu kodun belli bir kısmını gerçeğe dökelim.


Form için 1 adet listbox yeterli.
k4304c4.jpg


Global alanımıza gelelim ve kodlarımızı ekleyelim
C#:
   // İndirilen dosyaların izlendiği klasör yolu
   private string indirilenlerKlasoru = @"C:\Users\cengizkurtoglusevenmuhasebeci\Downloads";  //buraya downloads klasörünüzün path'i gelecek

   // FileSystemWatcher nesnesi
   private FileSystemWatcher watcher;

   // İşlenmiş dosyaların takibini yapmak için HashSet
   private HashSet<string> processedFiles = new HashSet<string>();  //list de kullanabilirsiniz pek kritik değil bu şekilde başka bir koleksiyon yapısı gördünüz :D


Form scope içine gelelim ve ekleyelim
C#:
        private void Form1_Load(object sender, EventArgs e)
        {
            // İndirilenler klasörünü dinlemek için FileSystemWatcher oluştur
            watcher = new FileSystemWatcher();
            watcher.Path = indirilenlerKlasoru;

            // Yeni bir dosya eklendiğinde trigger olacak event
            watcher.Created += DosyaOlusturuldu;

            // Değiştirilen bir dosya olduğundatrigger olacak event
            watcher.Changed += DosyaDegistirildi;

            // Dosya silindiğinde trigger olacak event
            watcher.Deleted += DosyaSilindi;

            // Dinlemeyi başlat
            watcher.EnableRaisingEvents = true;
        }

Şimdi de fonksiyonlarımızı yazalım
C#:
  private void DosyaOlusturuldu(object sender, FileSystemEventArgs e)
  {
      // Dosya varsa ve daha önce işlenmemişse
      if (File.Exists(e.FullPath) && processedFiles.Add(e.FullPath))
      {
          // UI thread üzerinde ListBox'a ekleme yap
          Invoke(new Action(() => ListboxaEkle(e.Name, DosyaBoyutuGetir(e.FullPath), File.GetCreationTime(e.FullPath))));
      }
  }

  private void DosyaDegistirildi(object sender, FileSystemEventArgs e)
  {
      // Dosya varsa ve daha önce işlenmemişse
      if (File.Exists(e.FullPath) && processedFiles.Add(e.FullPath))
      {
          // UI thread üzerinde ListBox'a ekleme yap
          Invoke(new Action(() => ListboxaEkle(e.Name, DosyaBoyutuGetir(e.FullPath), File.GetCreationTime(e.FullPath))));
      }
  }

  private void DosyaSilindi(object sender, FileSystemEventArgs e)
  {
      // Silinen dosyayı işlenmiş dosyalar listesinden kaldır
      processedFiles.Remove(e.FullPath);

      // Dosya silindiğinde ListBox'u güncelle
      Invoke(new Action(() => ListboxuGuncelle()));
  }

  private long DosyaBoyutuGetir(string dosyaYolu)
  {
      // Dosya boyutunu byte cinsinden al
      FileInfo fileInfo = new FileInfo(dosyaYolu);
      return fileInfo.Length;
  }

  private string FormatDosyaBoyutu(long dosyaBoyutuBytes)
  {
      const long kb = 1024;
      const long mb = kb * 1024;
      const long gb = mb * 1024;
      const long tb = gb * 1024;

      string formatString = "{0} {1}";

      if (dosyaBoyutuBytes < kb)
      {
          return string.Format(formatString, dosyaBoyutuBytes, "Bytes");
      }
      else if (dosyaBoyutuBytes < mb)
      {
          return string.Format(formatString, dosyaBoyutuBytes / kb, "KB");
      }
      else if (dosyaBoyutuBytes < gb)
      {
          return string.Format(formatString, dosyaBoyutuBytes / mb, "MB");
      }
      else if (dosyaBoyutuBytes < tb)
      {
          return string.Format(formatString, dosyaBoyutuBytes / gb, "GB");
      }
      else
      {
          return string.Format(formatString, dosyaBoyutuBytes / tb, "TB");
      }
  }

  private void ListboxaEkle(string dosyaAdi, long dosyaBoyutuBytes, DateTime olusturulmaTarihi)
  {
      // ListBox'a yeni dosyayı, boyutu ve oluşturulma tarihini ekle
      string dosyaBilgisi = $"{dosyaAdi} - {FormatDosyaBoyutu(dosyaBoyutuBytes)} - {olusturulmaTarihi.ToString("dd.MM.yyyy HH:mm:ss")}";
      listBoxDosyalar.Items.Add(dosyaBilgisi);
      listBoxDosyalar.Items.Add("-----------------------------------------------------------------------------------------------------------------");
  }

  private void ListboxuGuncelle()
  {
      // ListBox içeriğini temizle
      listBoxDosyalar.Items.Clear();
  }

VirusTotal apisine veri yollama ve çıktı alma kısmı da size araştırma olsun :)

o1ek41a.jpg

IT personeli yine üzgün.
Burada oluşan .tmp uzantılı dosyanın ne olduğunu bilenler fikirlerini yorumlarda paylaşabilir. :)
Yoksa muhasebeci yine mi bir zararlı yazılım indirdi???


okuduğunuz için teşekkürler.
Elinize sağlık hocam
 

alacazam

Yeni üye
29 Mar 2013
13
5
İzmir
Merhaba arkadaşlar
Ben
Kruvazör

Bugün sizlerle C# Kullanarak bir klasöre giren dosyaları dinleyebilmeyi ve o dosya hakkında bilgi edinmeyi göstereceğim.
bunu yaparken FileSystemWatcher Sınıfını kullanacağız.


Peki bununla neler yapabilirim?
Belirtilen dizinde meydana gelen değişiklikleri (yeni dosya oluşturma, dosya silme, dosya değiştirme, dizin oluşturma, dizin silme vb.) dinleyebilir,
Bu olayları dinleyen bir uygulamanın, dosya sistemi değişikliklerine yanıt vermesini sağlar. Örneğin, bir dosya oluşturulduğunda veya silindiğinde belirli bir işlemi başlatma işlemini tetikleyebilirsiniz.



C# ile klasör veri girişlerini izleme konusunda biraz bilgi sahibi olduğumuza göre artık örneğe geçebiliriz.

Senaryo:

Bir şirketin muhasebe personeli internetten Cengiz Kurtoğlu şarkıları indirirken aynı zamanda sitenin zararlı yazılım ve reklam içermesinden kaynaklı olarak şarkıların yanında bir de zararlı bir exe dosyası indiriyor. Sonrasında zararlı exe dosyasını execute ederek zararlı yazılımı amacına ulaştırıyor.
bu olay karşısında şaşkına dönen
gariban IT personeli de antivirüse ya da başka bir ürüne para vermek istememektedir. çünkü ITciler genelde anadolu kurnazıdır.
IT personeli visual studioyu açar ve kafasından şunları geçirir:

(Yazacağım program cengiz kurtoğlu sevdalısı muhasebecinin indirme klasörüne giren verileri sürekli dinlemeli ve belirli bir dosya uzantısına ait olan dosyaları virustotal gibi bir platformda taratmalı sonrasında çıkan sonuca göre kullanıcıya uyarı vermeli.)


Detay:

VirusTotal ücretli üyeliklerinde bile tarama limiti koyar.
Aynı zamanda taranacak dosya VirusTotal'in limitlerinin üstündeyse tarama işlemi yapmaz.

Yani kısaca anadolu kurnazı IT personeli hedefine yaklaştı ancak hedefi vuramadı.

Haydi şimdi bu kodun belli bir kısmını gerçeğe dökelim.


Form için 1 adet listbox yeterli.
k4304c4.jpg


Global alanımıza gelelim ve kodlarımızı ekleyelim
C#:
   // İndirilen dosyaların izlendiği klasör yolu
   private string indirilenlerKlasoru = @"C:\Users\cengizkurtoglusevenmuhasebeci\Downloads";  //buraya downloads klasörünüzün path'i gelecek

   // FileSystemWatcher nesnesi
   private FileSystemWatcher watcher;

   // İşlenmiş dosyaların takibini yapmak için HashSet
   private HashSet<string> processedFiles = new HashSet<string>();  //list de kullanabilirsiniz pek kritik değil bu şekilde başka bir koleksiyon yapısı gördünüz :D


Form scope içine gelelim ve ekleyelim
C#:
        private void Form1_Load(object sender, EventArgs e)
        {
            // İndirilenler klasörünü dinlemek için FileSystemWatcher oluştur
            watcher = new FileSystemWatcher();
            watcher.Path = indirilenlerKlasoru;

            // Yeni bir dosya eklendiğinde trigger olacak event
            watcher.Created += DosyaOlusturuldu;

            // Değiştirilen bir dosya olduğundatrigger olacak event
            watcher.Changed += DosyaDegistirildi;

            // Dosya silindiğinde trigger olacak event
            watcher.Deleted += DosyaSilindi;

            // Dinlemeyi başlat
            watcher.EnableRaisingEvents = true;
        }

Şimdi de fonksiyonlarımızı yazalım
C#:
  private void DosyaOlusturuldu(object sender, FileSystemEventArgs e)
  {
      // Dosya varsa ve daha önce işlenmemişse
      if (File.Exists(e.FullPath) && processedFiles.Add(e.FullPath))
      {
          // UI thread üzerinde ListBox'a ekleme yap
          Invoke(new Action(() => ListboxaEkle(e.Name, DosyaBoyutuGetir(e.FullPath), File.GetCreationTime(e.FullPath))));
      }
  }

  private void DosyaDegistirildi(object sender, FileSystemEventArgs e)
  {
      // Dosya varsa ve daha önce işlenmemişse
      if (File.Exists(e.FullPath) && processedFiles.Add(e.FullPath))
      {
          // UI thread üzerinde ListBox'a ekleme yap
          Invoke(new Action(() => ListboxaEkle(e.Name, DosyaBoyutuGetir(e.FullPath), File.GetCreationTime(e.FullPath))));
      }
  }

  private void DosyaSilindi(object sender, FileSystemEventArgs e)
  {
      // Silinen dosyayı işlenmiş dosyalar listesinden kaldır
      processedFiles.Remove(e.FullPath);

      // Dosya silindiğinde ListBox'u güncelle
      Invoke(new Action(() => ListboxuGuncelle()));
  }

  private long DosyaBoyutuGetir(string dosyaYolu)
  {
      // Dosya boyutunu byte cinsinden al
      FileInfo fileInfo = new FileInfo(dosyaYolu);
      return fileInfo.Length;
  }

  private string FormatDosyaBoyutu(long dosyaBoyutuBytes)
  {
      const long kb = 1024;
      const long mb = kb * 1024;
      const long gb = mb * 1024;
      const long tb = gb * 1024;

      string formatString = "{0} {1}";

      if (dosyaBoyutuBytes < kb)
      {
          return string.Format(formatString, dosyaBoyutuBytes, "Bytes");
      }
      else if (dosyaBoyutuBytes < mb)
      {
          return string.Format(formatString, dosyaBoyutuBytes / kb, "KB");
      }
      else if (dosyaBoyutuBytes < gb)
      {
          return string.Format(formatString, dosyaBoyutuBytes / mb, "MB");
      }
      else if (dosyaBoyutuBytes < tb)
      {
          return string.Format(formatString, dosyaBoyutuBytes / gb, "GB");
      }
      else
      {
          return string.Format(formatString, dosyaBoyutuBytes / tb, "TB");
      }
  }

  private void ListboxaEkle(string dosyaAdi, long dosyaBoyutuBytes, DateTime olusturulmaTarihi)
  {
      // ListBox'a yeni dosyayı, boyutu ve oluşturulma tarihini ekle
      string dosyaBilgisi = $"{dosyaAdi} - {FormatDosyaBoyutu(dosyaBoyutuBytes)} - {olusturulmaTarihi.ToString("dd.MM.yyyy HH:mm:ss")}";
      listBoxDosyalar.Items.Add(dosyaBilgisi);
      listBoxDosyalar.Items.Add("-----------------------------------------------------------------------------------------------------------------");
  }

  private void ListboxuGuncelle()
  {
      // ListBox içeriğini temizle
      listBoxDosyalar.Items.Clear();
  }

VirusTotal apisine veri yollama ve çıktı alma kısmı da size araştırma olsun :)

o1ek41a.jpg

IT personeli yine üzgün.
Burada oluşan .tmp uzantılı dosyanın ne olduğunu bilenler fikirlerini yorumlarda paylaşabilir. :)
Yoksa muhasebeci yine mi bir zararlı yazılım indirdi???


okuduğunuz için teşekkürler.
Eline sağlık güzel olmuş
 
Ü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.