- 8 Eyl 2016
- 1,646
- 995
Merhaba, bugün PMA Lab 9-3 zararlısının analizini gerçekleştireceğiz.
Yukarıdaki açıklamada bu zararlının 3 adet DLL dosyasını yüklediğini söylüyor. Uygulamayı ilk önce virustotal adresine yükleyip bilgi topluyorum.
Section bölmelerinden görüldüğü üzere portable executable formatı bölmelerinin yer aldığını görüyoruz. Buradan herhangi bir şifreleme olmadığını anlayabiliriz. Hemen altında ise import edilen DLL dosyalarını görüyoruz.
Bu DLL dosyalarının hangi fonksiyonları kullandığını da görüyoruz. Bunların üzerinde duracağız.
İlk soruda da bize bunları soruyordu hangi DLL dosyalarının içe aktarıldığının cevabını vermiş bulunuyoruz. Şimdi de programımı IDA üzerinde açıp elde edeceklerime bakıyorum.
Data segmentine göz attığım zaman DLL3.dll dosyasını da görüyorum.
2.soru da bizden üç dll dosyasının bellek adresini soruyor.
IDA da Imagebase değerinden bunu görebiliyoruz. Tabii benim kullandığım işletim sistemi mimarisinden dolayı farklılık gösteriyor olabilir.
3. soru için ise ollydbg üzerinde memory map sekmesinden bellek değerlerini elde edebilirim.
Mavi ile işaretlediğim adreslere bakabilirsiniz. 4.soru da DLL1.dllden içe aktarılan işlevin ne yaptığını soruyor.
Imports tablosundan baktığımız zaman DLL1 dosyası DLL1Print fonksiyonunu içe aktarıyordu. Şimdi bunun ne yaptığını bulalım.
İlgili fonksiyona çağrı burada yapılıyor. Ancak ben burada DLL1.dll dosyasını direkt olarak IDA üzerinde açıp inceliyorum.
DLL1Print fonksiyonuna tıklıyorum.
Buradaki mov ile taşınan dword_10008030 adresine odaklanıyorum.
Bakın ilgili değerin GetCurrentProcessId fonksiyonuna çağrı yapıldıktan sonra kullanıldığını görüyorum. Burada DLL yükleniyor GetCurrentProcessId ile sürecin kimlik bilgisi sorgulanıyor ve dword_10008030 değişkeni bu kimlik bilgisine ayarlanıyor. DLL 1 Mastery Data çıktısı ile de bu değer yazdırılıyor.
5. soru da ilgili zararlımız WriteFile fonksiyonunu kullanarak hangi dosyayı yazıyor bizden bunu öğrenmemizi istiyor.
Buradaki işlemin bağlantılı olduğu noktanın DLL2.dll tarafından içe aktarılan DLL2ReturnJ fonksiyonu olduğunu söyleyebilirim. Bakın burada bir web adresinin yazıldığını görebiliyorum. Şimdi DLL2.dll dosyasını analiz edelim.
Burada temp.txt dosyasının oluşturulduğunu gözlemliyorum. Kısacası malwareanalysisbook.com adresi temp.txt dosyası içerisine yazılıyor. 6.soru da NetScheduleJobAdd çağrısının parametrelerini bize soruyor. Ben her zaman imports tablosundan ilgili içe aktarılan veriyi bulur ve yoluna giderim.
İlgili adrese çift tıklıyorum ardından CTRL+X yani çapraz referansla kod satırlarına erişiyorum.
İlgili fonksiyonumuz 3 parametre alıyor. Servername, Buffer, JobId
NetScheduleJobAdd function (lmat.h) - Win32 apps
Dökümantasyondan da bu parametreleri doğrulayabiliriz.
Bakın burada Buffer parametresinin AT_INFO yapısını kullandığını görüyoruz. Ben IDA üzerinde DLL3.DLL dosyasını açıp inceliyorum.
Buradaki değerlerden yola çıkarak buradaki değerlerin bir zaman göstergesi olduğu ve belirli sürelerde ilgili web adresine ping gönderdiği kanısını varabiliyoruz. Peki buradaki mov ile taşınan 4 değişkenin aldığı değerler neyi ifade ediyor? Bunun için structures penceresinden AT_INFO structures yapısını ekliyorum.
Bu değerlerin sırasıyla ilgili zaman dilimlerini gösterdiği ve ping işleminin bu zaman dilimlerinde çalışacağını ifade ediyor.
36EE80h = 3600000 mili saniyede yani 60 dakika ping göndereceğini çıkarabiliyoruz.
7.sorunun cevaplarını buraya kadar açıklarken verdik.
8.soru da DLL2.dll için ollydbg üzerinde gösterilen yükleme adresinin IDA üzerindeki yükleme adresiyle eşleşmesi için IDA üzerine nasıl yükleyebilirsiniz bunu soruyor. Neydi Olly üzerindeki DLL2.DLL yükleme adresi?
Burada sol tarafta yazan DLL2 için olan bellek adresini IDA üzerine yüklemek için DLL2.dll dosyasını IDA da açıyorsunuz ve Manual Load seçerek bu bellek adresini giriyorsunuz.
Bu bölmeye girerek işlemi gerçekleştirmiş oluyorsunuz. Bu konumuz bu kadar. Okuduğunuz için teşekkürler.
Yukarıdaki açıklamada bu zararlının 3 adet DLL dosyasını yüklediğini söylüyor. Uygulamayı ilk önce virustotal adresine yükleyip bilgi topluyorum.
Section bölmelerinden görüldüğü üzere portable executable formatı bölmelerinin yer aldığını görüyoruz. Buradan herhangi bir şifreleme olmadığını anlayabiliriz. Hemen altında ise import edilen DLL dosyalarını görüyoruz.
Bu DLL dosyalarının hangi fonksiyonları kullandığını da görüyoruz. Bunların üzerinde duracağız.
İlk soruda da bize bunları soruyordu hangi DLL dosyalarının içe aktarıldığının cevabını vermiş bulunuyoruz. Şimdi de programımı IDA üzerinde açıp elde edeceklerime bakıyorum.
Data segmentine göz attığım zaman DLL3.dll dosyasını da görüyorum.
2.soru da bizden üç dll dosyasının bellek adresini soruyor.
IDA da Imagebase değerinden bunu görebiliyoruz. Tabii benim kullandığım işletim sistemi mimarisinden dolayı farklılık gösteriyor olabilir.
3. soru için ise ollydbg üzerinde memory map sekmesinden bellek değerlerini elde edebilirim.
Mavi ile işaretlediğim adreslere bakabilirsiniz. 4.soru da DLL1.dllden içe aktarılan işlevin ne yaptığını soruyor.
Imports tablosundan baktığımız zaman DLL1 dosyası DLL1Print fonksiyonunu içe aktarıyordu. Şimdi bunun ne yaptığını bulalım.
İlgili fonksiyona çağrı burada yapılıyor. Ancak ben burada DLL1.dll dosyasını direkt olarak IDA üzerinde açıp inceliyorum.
DLL1Print fonksiyonuna tıklıyorum.
Buradaki mov ile taşınan dword_10008030 adresine odaklanıyorum.
Bakın ilgili değerin GetCurrentProcessId fonksiyonuna çağrı yapıldıktan sonra kullanıldığını görüyorum. Burada DLL yükleniyor GetCurrentProcessId ile sürecin kimlik bilgisi sorgulanıyor ve dword_10008030 değişkeni bu kimlik bilgisine ayarlanıyor. DLL 1 Mastery Data çıktısı ile de bu değer yazdırılıyor.
5. soru da ilgili zararlımız WriteFile fonksiyonunu kullanarak hangi dosyayı yazıyor bizden bunu öğrenmemizi istiyor.
Buradaki işlemin bağlantılı olduğu noktanın DLL2.dll tarafından içe aktarılan DLL2ReturnJ fonksiyonu olduğunu söyleyebilirim. Bakın burada bir web adresinin yazıldığını görebiliyorum. Şimdi DLL2.dll dosyasını analiz edelim.
Burada temp.txt dosyasının oluşturulduğunu gözlemliyorum. Kısacası malwareanalysisbook.com adresi temp.txt dosyası içerisine yazılıyor. 6.soru da NetScheduleJobAdd çağrısının parametrelerini bize soruyor. Ben her zaman imports tablosundan ilgili içe aktarılan veriyi bulur ve yoluna giderim.
İlgili adrese çift tıklıyorum ardından CTRL+X yani çapraz referansla kod satırlarına erişiyorum.
İlgili fonksiyonumuz 3 parametre alıyor. Servername, Buffer, JobId
NetScheduleJobAdd function (lmat.h) - Win32 apps
Dökümantasyondan da bu parametreleri doğrulayabiliriz.
Bakın burada Buffer parametresinin AT_INFO yapısını kullandığını görüyoruz. Ben IDA üzerinde DLL3.DLL dosyasını açıp inceliyorum.
Buradaki değerlerden yola çıkarak buradaki değerlerin bir zaman göstergesi olduğu ve belirli sürelerde ilgili web adresine ping gönderdiği kanısını varabiliyoruz. Peki buradaki mov ile taşınan 4 değişkenin aldığı değerler neyi ifade ediyor? Bunun için structures penceresinden AT_INFO structures yapısını ekliyorum.
Bu değerlerin sırasıyla ilgili zaman dilimlerini gösterdiği ve ping işleminin bu zaman dilimlerinde çalışacağını ifade ediyor.
36EE80h = 3600000 mili saniyede yani 60 dakika ping göndereceğini çıkarabiliyoruz.
7.sorunun cevaplarını buraya kadar açıklarken verdik.
8.soru da DLL2.dll için ollydbg üzerinde gösterilen yükleme adresinin IDA üzerindeki yükleme adresiyle eşleşmesi için IDA üzerine nasıl yükleyebilirsiniz bunu soruyor. Neydi Olly üzerindeki DLL2.DLL yükleme adresi?
Burada sol tarafta yazan DLL2 için olan bellek adresini IDA üzerine yüklemek için DLL2.dll dosyasını IDA da açıyorsunuz ve Manual Load seçerek bu bellek adresini giriyorsunuz.
Bu bölmeye girerek işlemi gerçekleştirmiş oluyorsunuz. Bu konumuz bu kadar. Okuduğunuz için teşekkürler.