- 8 Eyl 2016
- 1,646
- 999
Merhaba, bu konumuzda IDA ile basit C programının analizini yapacağız. İleri statik zararlı analizlerine giriş öncesi egzersiz yapacağız. IDA ile uygulamanın Assembly karşılığını inceleyerek yorumlayacağız. Bu şekilde uygulamaları disassemble ederek işlevini ortaya çıkaracağız. IDA ile ileri statik malware analizi konularımızdan önce temel bir şekilde kullanımını görmüş olacağız.
İlgili exe dosyamızı sürükleyip IDA içerisine bırakıyoruz.
Sol tarafta fonksiyon penceremiz, sağ tarafta assembly karşılıklarını görüyoruz. Assembly kodlarının yer aldığı kısımda ilgili hafıza adreslerini de görebiliriz. Bunun için options-general sekmesinden line prefix aktif ediyoruz.
Artık ilgili kod bloklarının hafızda hangi adreslerde yer aldığını görebiliyoruz.
Şimdi kod bloklarına gömülüyoruz ve bir şeyler elde etmeye çalışıyoruz.
Ben öncelikle bazı ipuçları elde etmek için view-open subviews-strings yolunu takip ediyorum veya shift+f12 kısayolunu takip ediyorum.
Burada altını çizdiğim stringler dikkatimi çekiyor. Exec fonksiyonu C dilinde yer alıyor. Execl fonksiyonu ise gönderilecek parametreleri liste şeklinde alıyor. /bin/ls stringi ise bildiğiniz üzere ilgili dizinde ls komutunu çalıştırıp listeleme işlemi gerçekleştiriyor.
Burada belirli parametreler alan bir fonksiyonumuz var. Fonksiyon çağrıları bizim için önemlidir. View-opensubviews yolunu takip ederek function calls seçeneğini seçiyorum.
Hangi fonksiyonlara çağrı yapıldığını görüyoruz. Assembly’de call fonksiyon çağırmaya yarıyor. Yani üst dillerde fonksiyon çağırmanın karşılığı olarak da ifade edebilirim.
Assembly blokları içerisinde de execl fonksiyonuna çağrı yapıldığını görebiliyoruz zaten.
Biraz daha üst kısımlara geldiğimizde execl fonksiyonu ile ilişkili satırları da görebiliyoruz. Buradan yola çıkarak şunu söyleyebiliriz execl fonksiyonumuz /bin/ls, -a, -s değerlerini kullanıyor. Ki bunlarda Linux sistemlerde bildiğiniz üzere dizin listelerken kullanılan parametreler oluyor. -a parametresi bulunan dizindeki dosyaları yatay olarak listeler, aynı zamanda en iyi özelliği gizli dosyaları da göstermesi tabii. -s parametresi de dosya boyutlarını listeliyor. Şimdi ben sol tarafta yer alan fonksiyon penceresinden execl üzerine çift tıklıyorum.
int execl fonksiyonu tanımlanmış içerisinde path ve arg değerlerini görebiliyoruz yani bunlar execl fonksiyonuna parametre olarak çalışacaklar. Yani bu programın yaptığı şey, bin/ls, -a, -s komutlarını execl fonksiyonuna parametre verip işlemek. Şimdi bu programın nasıl bir sonuç verdiğini Linux sistemimizde inceleyelim.
C programımız bu şekilde gördüğünüz gibi ilgili değerler execl fonksiyonuna aktarılarak çalıştırılıyor.
Sonucu da bu şekilde, bu programın yaptığı işlemi manuel olarak da yapabiliriz.
Zaten ilgili programın yaptığı şey de bu komutları sistemimizde execl vasıtasıyla çalıştırmak. Basitçe IDA yazılımını kullanarak basit bir programı disassembly ederek Assembly kodlarını yorumladık. İleri statik malware analizlerimizde bu şekilde kodları yorumlayacağız. Okuduğunuz için teşekkür ederim.
İlgili exe dosyamızı sürükleyip IDA içerisine bırakıyoruz.
Sol tarafta fonksiyon penceremiz, sağ tarafta assembly karşılıklarını görüyoruz. Assembly kodlarının yer aldığı kısımda ilgili hafıza adreslerini de görebiliriz. Bunun için options-general sekmesinden line prefix aktif ediyoruz.
Artık ilgili kod bloklarının hafızda hangi adreslerde yer aldığını görebiliyoruz.
Şimdi kod bloklarına gömülüyoruz ve bir şeyler elde etmeye çalışıyoruz.
Ben öncelikle bazı ipuçları elde etmek için view-open subviews-strings yolunu takip ediyorum veya shift+f12 kısayolunu takip ediyorum.
Burada altını çizdiğim stringler dikkatimi çekiyor. Exec fonksiyonu C dilinde yer alıyor. Execl fonksiyonu ise gönderilecek parametreleri liste şeklinde alıyor. /bin/ls stringi ise bildiğiniz üzere ilgili dizinde ls komutunu çalıştırıp listeleme işlemi gerçekleştiriyor.
Burada belirli parametreler alan bir fonksiyonumuz var. Fonksiyon çağrıları bizim için önemlidir. View-opensubviews yolunu takip ederek function calls seçeneğini seçiyorum.
Hangi fonksiyonlara çağrı yapıldığını görüyoruz. Assembly’de call fonksiyon çağırmaya yarıyor. Yani üst dillerde fonksiyon çağırmanın karşılığı olarak da ifade edebilirim.
Assembly blokları içerisinde de execl fonksiyonuna çağrı yapıldığını görebiliyoruz zaten.
Biraz daha üst kısımlara geldiğimizde execl fonksiyonu ile ilişkili satırları da görebiliyoruz. Buradan yola çıkarak şunu söyleyebiliriz execl fonksiyonumuz /bin/ls, -a, -s değerlerini kullanıyor. Ki bunlarda Linux sistemlerde bildiğiniz üzere dizin listelerken kullanılan parametreler oluyor. -a parametresi bulunan dizindeki dosyaları yatay olarak listeler, aynı zamanda en iyi özelliği gizli dosyaları da göstermesi tabii. -s parametresi de dosya boyutlarını listeliyor. Şimdi ben sol tarafta yer alan fonksiyon penceresinden execl üzerine çift tıklıyorum.
int execl fonksiyonu tanımlanmış içerisinde path ve arg değerlerini görebiliyoruz yani bunlar execl fonksiyonuna parametre olarak çalışacaklar. Yani bu programın yaptığı şey, bin/ls, -a, -s komutlarını execl fonksiyonuna parametre verip işlemek. Şimdi bu programın nasıl bir sonuç verdiğini Linux sistemimizde inceleyelim.
C programımız bu şekilde gördüğünüz gibi ilgili değerler execl fonksiyonuna aktarılarak çalıştırılıyor.
Sonucu da bu şekilde, bu programın yaptığı işlemi manuel olarak da yapabiliriz.
Zaten ilgili programın yaptığı şey de bu komutları sistemimizde execl vasıtasıyla çalıştırmak. Basitçe IDA yazılımını kullanarak basit bir programı disassembly ederek Assembly kodlarını yorumladık. İleri statik malware analizlerimizde bu şekilde kodları yorumlayacağız. Okuduğunuz için teşekkür ederim.