Seviye 1 Soru 10

c3.exe

Analiz işlemine IDA Pro ile başlanmaktadır. c3.exe'yi IDa Pro'ya sürükleyip bırakıyoruz. Şekil 1'de başlangıç sayfası gösterilmektedir.
Şekil 1: Başlangıç Fonksiyonu

Gösterilen fonksiyona girip devam edildiğinde GetCommandLine fonskiyonu karşımıza çıkmaktadır.

Şekil 2: Komut Satırı

Bu fonksiyon ile komut satırından parametre verilebilmektedir. Şekil 3'de girilen parametrelerin yığına eklenmesi ve fonksiyon dallanması gösterilmektedir.

Şekil 3: Fonksiyon Dallanması

Fonksiyona dallanma yapıldığında ise Şekil 4'deki belirtilen fonksiyon işlenmektedir.

Şekil 4: Fonksiyon

Burada incelemeyi zorlaştırmak için return jump yöntemi kullanılmıştır.

Fonksiyona girildiğinde Şekil 5'de antidebug yöntemlerinden IsDebuggerPresent fonksiyonu görülmektedir. Bu fonksiyon yazılımın debug edilip edilmediğini anlayarak debug edilmesini engellemektedir.

Şekil 5: Antidebug Yöntemi

Analiz işlemine devam ediliğinde Şekil 6'da gösterildiği üzere yığına bir değer eklendiği görülmektedir.

Şekil 6: Değer Eklenmesi

Şekil 6'da gösterilen değer onaltılık tabanda 3A değeri ile XOR işlemine tabi tutulmaktadır. Ve bu işlem sonucunda anahtar oluşmaktadır.

Şekil 7: Anahtar Oluşturulması

Bu işlemden sonra yeni bir fonksiyona dallanma yapılmaktadır.

Şekil 8: Fonksiyon Dallanması(2)

Bu fonksiyonda komut satırından girdiğimiz değer ile yukarıda oluşturulan anahtar XOR işlemine uğramaktadır.
Şekil 9: Girilen Değeri Anahtar İle Şifrelenmesi

Bu işlem sonrasında ise komut satırından girilen değerin XOR edilmiş hali ile gerçek şifre karşılaştırılmaktadır.

Şekil 10: Şifre ile Girilen Değerin Karşılaştırılması

IDA Pro ile analiz tamamlandıktan sonra Immunity Debugger ile uygulama açılarak parametre olarak bir değer girilip çalıştırılmaktadır.

Şekil 11: Immunity Debugger

Şekil 5'de gösterilmiş olan antidebug yöntemini  geçmek için Immunity Debugger'da bellek dökümü alanında fs:[30] adresine gidilerek 1 görülen değer 0 olarak değiştirilmektedir. Şekil 12'da gösterilmektedir.

Şekil 12: IsDebuggerPresent Bypass

Bu işlemden sonra anahtarın bulunduğu adrese giderek anahtarın öğrenilmesi gerekmektedir. Şekil 7'deki anahtar bulma işlemindeki adrese kesme konularak anahtar bulunabilir. Adres değeri 401160'dır. Anahtar ECX yazmacına kaydedildiği için ECX yazmacının dökümüne bakılmaktadır.

Şekil 13: Anahtar

Şekil 13'de gösterildiği üzere anahtarımızın değeri "BuAnahtarParolay1KorumakÝcin".  Bu anahtar değeri ile bizim girmiş olduğumuz değer(123456781234567812345678) XOR işlemine tabi tutularak yeni bir değer oluşmaktadır. Şekil 8'de gösterilen fonksiyon bu işlemi yapmaktadır. Bu fonksiyonun bulunduğu adrese kesme konulmaktadır. Adres değeri  401173. Fonksiyonun işlemi bittiğinde girdiğimiz değerin şifreli hali yığına kaydedilmektedir.

Şekil 14: Girilen Değerin Şifrelenmesi

İşlemin devamında girdiğimiz değerin şifreli hali ile gerçek şifrenin şifreli hali harf harf karşılaştırılmaktadır. Gerçek şifrenin şifreli halinin tamamına ulaşıp bu değeri anahtar ile XOR işlemine tabi tuttuğumuzda şifrenin açık halini elde edebilmekteyiz.

Şekil 15: Gerçek Şifrenin Şifreli Halinin Yazmaca Kaydedilmesi

Şekil 15'de gösterildiği üzere karşılaştırılma yapılmaktadır. Boyalı alandaki ESI+40CD40 adresinin bellek dökümü alınarak gerçek şifrenin şifrelenmiş halinin tamamına ulaşılabilinmektedir.

Şekil 16: Gerçek Şifrenin Şifreli Hali

Şekil 16'da gösterilmekte olan değeri anahtar ile XOR işleminden geçirdiğimizde gerçek şifreyi elde etmiş olmaktayız. Şifremiz : GelDeBu$ifreyiK1rma$imdi 
Şifremizi komut satırında yazarak doğruluğu teyit edebiliriz. 

Şekil 17: Gerçek Şifre