Selamun Aleyküm.
TryHackMe üzerinde bulunan "Malware Analysis" temellerini öğrenebilmeniz açılmış olan bir odanın çözümünü sizlerle paylaşacağım.
Bu konu daha önceden bazı bilgilerinizin olduğunu varsayarak anlatılacağını söylememe gerek yoktur. Basit bilgilerinizin olması yeterli örneğin;
*CPU Nedir,Nasıl çalışır ?
*RAM Nedir,Nasıl çalışır ? vb...
Makineyi başlattığımız zaman üç farklı soru bizi karşılamakta.
Birinci sorudan başlayalım.
Açıklamada yazdığına göre bu çalışabilir dosya çalıştığı zaman ekrana bir MD5 hash'i basmaktaymış. Bu flagi yakayalabilir misin diyor.
Dikkat: Çalıştırmana gerek yok !
Çalıştırmama gerek yoksa "Statik Analiz" yardımıyla bu flagi alabileceğimi düşünüyorum. Ekrana ne bastırdığını görmek için bir dosyayı çalıştıralım.
Görüldüğü üzere bir MD5 hash'i bastırıyor. Flag bu olduğunu düşünen arkadaşlarımız olabilir,bu değil tabii ki :)
O zaman analiz etmeye başlayalım. Çalışabilir dosyamızı atacağımız ilk programımızın adı ;
1-"CFF Explorer" Statik analiz için gerekli olan birçok özelliği barındıran çok kullanışlı bir programdır.
Programımıza dosyamızı attığımızda ilk alacağımız çıktı;
Burada görebildiğimiz gibi dosyanın ne zaman kullanıldığını,oluşturulduğunu,dosya tipini görebiliyoruz.
Fakat ihtiyacımız olan bilgiler bunlar değil. Bildiğiniz gibi işlemcilere bir kod atmamız gerektiği zaman "hexadecimal"(on altılı sayı sistemi) kullanılarak kod atılır.
Mikrodenetleyici dersi alan arkadaşlarımız bu konuya aşinadırlar.
Bizde şu an derlenmiş bir dosyayı okuduğumuz için "hex editör" kısmında neler bulabileceğimize bir bakmamız gerekiyor.
Bu resimde görüldüğü üzere kırmızı kalem ile göstermiş olduğum kısım "hexadecimal"(on altılı sayı sistemi) ile ifade edilen kısımlardır.
Mavi kalem ile göstermiş olduğum kısım ise bizim anlayabileceğimiz yapıda olan "ASCII" tablosudur. Bakalım burada ihtiyacımız olan bilgiyi bulabilecek miyiz ?
Flag'in yapısının FLAG{} şeklinde olduğunu bildiğimizden dolayı "FLAG" şeklinde bir arama gerçekleştireceğiz.
Ne yazık ki sorumuz bu kadar kolay değilmiş. Birsürü FLAG ile başlayan flagler bulduk. Burada bir kısmı gösteriliyor. Bunlardan tonlarca olduğu için tek tek deneme lüksümüz yok. Peki şimdi ne yapacağız.
Kullanacağımız ikinci program "IDA" bu program bir "disassembler"
olarak bilinir. Yani makine kodunu bizim anlayabileceğimiz düzey olan "assembly" haline getirmeye yaramaktadır. Şimdi bu programı çalıştıralım.
Gelen ekranda herhangi bir yeri ellemeden "OK" tuşuna tıklıyoruz.
Bu da ne ? Demek ki sorumuz o kadar zor değilmiş :) Flag direk önümüze çıkmış oldu. Eğer "debugger" kullansaydık burada flag'i bu kadar kolay bir şekilde alamazdık. IDA programının sağlamış olduğu kolaylık ile kolay bir şekilde aldık. Peki biraz daha derine inersek ne olur ?
Burada dikkatimizi bir şeyin çekmesi gerekiyor. "off_432294" adında bir değişkenin içeriği "EAX" registerinin içerisine atılıyor. Daha sonra görüldüğü gibi bir fonksiyon call ediliyor. (MD5_HASH) demek ki eax registerine gelen bu değer bizim flagimiz. Bu değişkene biraz yakından bakarsak eğer;
Görüldüğü üzere .data section içerisinde fake bütün flagleri görmüş oluyoruz. Karaladığım doğru flag :) Burada 200 den fazla fake bulunmakta. Tek tek denemek pek mantıklı değilmiş :)
Bu şekilde ilk sorumuzu çözmüş olduk.
İkinci sorumuzda aynı şeyleri söylüyor. Fakat bu sefer diğeri kadar kolay değil "CFF Explorer" programımıza attığımızda;
Görüldüğü gibi herhangi bir string ifadesi bulunamadı. O zaman IDA geçelim bakalım neler dönüyor.
Görüldüğü üzere daha sonra EAX registerine taşınmak üzere Değerler EBP registeri üzerine taşınıyor. Bu soruyu da basit bir şekilde çözmüş olduk.
Üçüncü sorumuza geçelim.
Dilersiniz ki son soru olmasından sebep diğerleri kadar kolay değil. O yüzden hiç hex editöre atmayacağım çünkü yine herhangi bir şey bulunamıyor. Direk IDA atalım.
Diğer sorular kadar kolay olmadığını registerler içerisine hangi değerlerin taşındığını direk görememizden anlıyoruz :)
Peki burada ne yapacağız. Kırmızı alanla çizdiğim kısımdaki kodlardan anlayacağımız üzere "LoadStringA" kısmını görüyoruz.
Bu kısımda bizim flagimiz tahminen registerlere aktarılacağından dolayı buraya bir "breakpoint" koyuyoruz. Program çalışacağı zaman bu noktada duracak bu sayede register içerisinde hangi değerler var görebileceğiz. Breakpoint koymak istediğimiz komutun üzerine sağ tık yapıp ekliyoruz.
Bu şekilde bir kırmızılık görürseniz breakpoint eklenmiş demektir.
Daha sonra programı çalıştırıyoruz.
Sağ üstte EAX registeri yanında bulunan oka tıkladığımızda;
Görüldüğü üzere flag'i bulmuş olduk :)
Burada programı çalıştırmış olduk yani "Statik Analiz" değil de "Dinamik Analiz" yapmış olduk. IDA programı ile benzer işlev gören GHIDRA programı üzerinde buna gerek kalmadan direk flag'e ulaşabiliyoruz. Fakat bir farklılık olması açısından bu yöntemi de anlatmak istedim.
Umarım faydalı bir konu olmuştur.