wakeup tarafından yazılmıştır.
Selamlar herkese! Bu konuda sizlere C/C++ ile gerryvanboven tarafından yazılmış cross-platform (çapraz platform) bir crackme’nin çözümünü anlatacağım. Zamanınızı fazla almadan başlayalım…
Reverse’in vazgeçilmezlerinden birisi hem disassembler hem de bir debugger olarak kullanılabilen açık kaynaklı radare2 aracını kullanacağız. Programı decompile edebilmek için r2dec isimli plugin’den faydalanacağız. Aslında bu plugin’e radare2’nin decompiler’ı diyebiliriz çünkü kendisi asm(Assembly) kodunu, pseudo-C koduna çevirmektedir.
Çözeceğimiz crackme’yi buradan indirebilirsiniz. RAR şifresi > crackmes.one
Programı çalıştırdığımızda bizden bir şifre girmemizi istiyor. Programın nasıl bir output yani çıktı vereceğini görmek için bir şifre girdiğimizde ve çıktı olarak 0, wrong passcode! veriyor. Bu da tabiki şifrenin yanlış olduğu anlamına gelmekte ve böylece yanlış şifre girildiğinde nasıl bir çıktı ile karşılaştığımızı öğrenmiş olduk.
Yanlış değer girdiğimizde karşılaştığımız çıktı
Analizimize yavaş yavaş başlayalım. Öncelikle programı radare2 ile açıyoruz. Ardından aaa komutu ile binary dosyalarının analizinin gerçekleştirilmesini sağlıyoruz. afl komutu ile programda bulunan fonksiyon adreslerini görüntüledikten sonra tabiki ilk olarak main fonksiyonunu incelemek için main adresine s main ile geçiş yapıyoruz.
Yukarıda bahsedilen komutların çıktıları
Şimdi sıra decompile işleminde. Burada bize r2dec yardımcı olacak. pdd ile geçiş yapmış olduğumuz main fonksiyonunu decompile ettiğimizde aşağıdaki ekranla karşılaşıyoruz. Kodu açıklamak gerekirse ilk olarak var_H değişkenine 0x130104 değeri atanıyor. Arından kullanıcıdan bir şifre istiyor ve bunu EAX’da depoluyor. 50. satırda ise kullanıcıden gelen bu değeri var_4h değişkeni ile karşılaştırıyor. Eğer bu iki değişken aynı ise “right !” çıktısı veriyor. Yani buradan 0x130104 değerinin bize lazım olan şifre olduğunu anlamış olduk, zaten belirttiğim gibi kullanıcıdan aldığı çıktı ile karşılaştırıyor.
Programın kodları
Elde etmiş olduğumuz değerin hexadecimal olduğu aşikar. Bu değeri decimal’e çevirdiğimizde doğru anahtarı ulaşmış oluyoruz.
Hexadecimal değeri decimal’e çevirme işlemi
Programı çalıştırıp bulmuş olduğumuz anahtarı girince de başarılı olduğumuzu görmüş olduk.
Doğru değer girilince karşılaştığımız çıktı
Çok temel de olsa basitinden C/C++ reverse işlemlerini göstermiş oldum. Okuduğunuz için teşekkür ederim, sağlıcakla kalın
[TR] Gerryvanboven’s Get The Passcode Çözümü
Selamlar herkese! Bu konuda sizlere C/C++ ile gerryvanboven tarafından yazılmış cross-platform (çapraz platform) bir crackme’nin çözümünü anlatacağım. Zamanınızı fazla almadan başlayalım…
Hazırlık
Reverse’in vazgeçilmezlerinden birisi hem disassembler hem de bir debugger olarak kullanılabilen açık kaynaklı radare2 aracını kullanacağız. Programı decompile edebilmek için r2dec isimli plugin’den faydalanacağız. Aslında bu plugin’e radare2’nin decompiler’ı diyebiliriz çünkü kendisi asm(Assembly) kodunu, pseudo-C koduna çevirmektedir.
Çözeceğimiz crackme’yi buradan indirebilirsiniz. RAR şifresi > crackmes.one
Başlayalım!
Programı çalıştırdığımızda bizden bir şifre girmemizi istiyor. Programın nasıl bir output yani çıktı vereceğini görmek için bir şifre girdiğimizde ve çıktı olarak 0, wrong passcode! veriyor. Bu da tabiki şifrenin yanlış olduğu anlamına gelmekte ve böylece yanlış şifre girildiğinde nasıl bir çıktı ile karşılaştığımızı öğrenmiş olduk.
Yanlış değer girdiğimizde karşılaştığımız çıktı
Analizimize yavaş yavaş başlayalım. Öncelikle programı radare2 ile açıyoruz. Ardından aaa komutu ile binary dosyalarının analizinin gerçekleştirilmesini sağlıyoruz. afl komutu ile programda bulunan fonksiyon adreslerini görüntüledikten sonra tabiki ilk olarak main fonksiyonunu incelemek için main adresine s main ile geçiş yapıyoruz.
Yukarıda bahsedilen komutların çıktıları
Şimdi sıra decompile işleminde. Burada bize r2dec yardımcı olacak. pdd ile geçiş yapmış olduğumuz main fonksiyonunu decompile ettiğimizde aşağıdaki ekranla karşılaşıyoruz. Kodu açıklamak gerekirse ilk olarak var_H değişkenine 0x130104 değeri atanıyor. Arından kullanıcıdan bir şifre istiyor ve bunu EAX’da depoluyor. 50. satırda ise kullanıcıden gelen bu değeri var_4h değişkeni ile karşılaştırıyor. Eğer bu iki değişken aynı ise “right !” çıktısı veriyor. Yani buradan 0x130104 değerinin bize lazım olan şifre olduğunu anlamış olduk, zaten belirttiğim gibi kullanıcıdan aldığı çıktı ile karşılaştırıyor.
Programın kodları
Elde etmiş olduğumuz değerin hexadecimal olduğu aşikar. Bu değeri decimal’e çevirdiğimizde doğru anahtarı ulaşmış oluyoruz.
Hexadecimal değeri decimal’e çevirme işlemi
Programı çalıştırıp bulmuş olduğumuz anahtarı girince de başarılı olduğumuzu görmüş olduk.
Doğru değer girilince karşılaştığımız çıktı
Çok temel de olsa basitinden C/C++ reverse işlemlerini göstermiş oldum. Okuduğunuz için teşekkür ederim, sağlıcakla kalın
Moderatör tarafında düzenlendi: