Seviye 1 Soru 9
İlk olarak güvenlik önlemleri (örneğin sanal makine üzerinde) alınarak program çalıştırılır. Programın kullanımı ve verilen uyarı mesajları incelenir.
Daha sonra program IDA ile birlikte açılır. Programın çalıştırılması esnasında karşılaşılan uyarı mesajları stringler arasında araştırılır. Bu programda c1'de olduğu gibi stringler arasında parolaya benzer bir string değeri görülmemektedir.
Doğru parola string değerinin geçtiği yere atlanır.
Belirtilen string değeri programın data kısmında yer aldığı görülür. Bu data değerinin kullanıldığı XREF değerleri IDA tarafından çıkartılmaktadır. Mesajın "sub_401000" fonksiyonu tarafından kullanıldığı görülür. Mesajın kullanıldığı fonksiyona çift tıklayarak fonksiyonun kodlarına erişilir.
Kod içerisinde mesajların verildiği bloğa odaklanılır. Bir önceki sorudan farklı olarak bu programda şifrenin açık olarak kod içerisinde bulunmadığı bir döngü ile kontrol edildiği görülmektedir.
Kod bloğunun biraz daha üst kısımları incelendiğinde ise girdiğimiz parola değerinin "offset_unk_40CD48" ofsetindeki değerle karşılaştırıldığı görülür. Aynı zamanda karşılaştırma işleminden önce bir döngü ile değerin xor ile encode edildiği görülmektedir.
Bu noktadan sonra çözüme iki şekilde yapılabilir. 40CD48 adresindeki değerler döngü içerisinde işlemlerden geçirilerek elde edilen hex değerler ascii'ye çevrilerek parola elde edilebilir. Bir diğer yöntem debug etmektir. Programın bizim yerimize kendisinin parolayı çözmesini bekleyip, parolanın decode edildiği yerde breakpoint koyarak parola elde edilebilir.
Bunun için program olly debug yada immunity debugger programlarından biri ile açılabilir.
Kullanım olarak komut satırından parametre vermek gerektiğini ilk olarak öğrenmiştik. Programı açarken bir deneme parolası vermek programın akışını takip etmek açısından faydalı olacaktır.
Program çalıştırılmadan ilk olarak doğru parola mesajının bulunduğu kod bloğuna gidilir. IDA ile incelerken 401000 adresinden itibaren başlayan fonksiyon içerisinde kullanıldığını görmüştük. 401000 ve xor ile parolanın çözüldüğü döngünün hemen altına F2 ile breakpoint konulur. Daha sonra program F9 ile çalıştırılır.
Kesme koyulan yerlere kadar program çalıştırdıktan sonra adım adım çalıştırılarak programın akışı izlenir. 4010A0 adresindeki fonksiyon çağrısından sonra parolanın "1$teBuD@B0yleB1rS1fre" olduğu görülür.
Elde edilen şifre ile program çalıştırıldığı vakit doğru parola mesajı verdiği görülür.