Seviye 1 Soru 8

İlk olarak güvenlik tedbirlerini alarak (örneğin sanal makine üzerinde) incelemek istediğimiz program çalıştırılır.


Programın kullanım esnasında bizden parametre olarak bir parola değeri beklediği görülür. Program hakkında basit düzeyde bilgi sahibi olmak için, parola girilmediği zaman ve yanlış parola girildiği zaman verilen uyarı mesajları görülür.
Zararlı yazılım analizi ve tersine mühendislik alanında en temel iki kavram disassemble ve debug kavramlarıdır. Disassembling ile programın assembly kodları incelenir. Debug ederek de programın akışı incelenir.
Disassemble işlemi için en yaygın kullanılan program IDA Pro'dur. Ücretsiz versiyonu tersine mühendislik işleri için yeterli ve yetkin bir araçtır.
İlk  olarak "c1.exe" programı IDA ile açılır.



IDA Pro programı programın assembly kodlarını çözmekte ve aynı zamanda "graph view" modu ile kod blokları arasındaki akışı göstermektedir. "call" ile çağrılan bir fonksiyonun kodlarına erişmek için ise fonksiyon ismine çift tıklamak gerekmektedir. "esc" ile de bir önceki sayfaya yani fonksiyonun çağrıldığı kod bloğuna geri dönmek mümkündür. Bu aşamadan sonra assembly kodları, çağrılan fonksiyon içerikleri incelenmelidir.





Kod analizinde tüm kodları incelemek çoğu zaman mümkün olmamaktadır. Basit bir programın bile assembly kodlarının tamamını incelemek günler, haftalar boyunca sürebilecek kadar çoktur. Özellikle incelenmesi gereken kod bloğuna odaklanmak gerekmektedir. Örneğin "GetCommandLineA" fonksiyonu Windows tarafından sağlanan bir API fonksiyonudur. Çoğu programda ilk karşılaşılan "GetCommandLineA" API fonksiyonu derleyici tarafından eklenen, komut satırından parametre almak için kullanılan bir fonksiyondur. Yani bu fonksiyon ve öncesindeki kodları incelemeye gerek yoktur. Bu fonksiyonun altındaki program akışı ve fonksiyon çağrıları incelenmeye başlanır.


 
"sub_408210" isimli fonksiyonun kod bloğu incelendiğinde doğru parola karşılaştırmasının burada yapıldığı görülmektedir. Parolanın açık bir halde burada karşılaştırıldığı ve parolanın "ÇerezParola" olduğu görülür.

Elde edilen parola denendiği vakit doğru parolanın elde edildiği anlaşılır.

Çözüm bu şekilde elde edildiği gibi basit bir yolu daha mevcuttur. Programın içerisinde string search yapan çok sayıda program (strings, BinText,.. gibi) vardır. IDA kullanarak da program içerisindeki stringleri incelemek mümkündür. IDA'nın avantajı stringlerin kod içerisinde nerelerde kullanıldığını da bulmamıza olanak sağlamasıdır.
 
Programın içesinde geçen string ifadeler içerisinde "ÇerezParola" parolasını bulmak mümkündür. String search çoğu zaman faydalı olmakla birlikte bu şekilde doğrudan sonuca götürdüğü durumlar oldukça nadirdir.