← Back to list

Crack me Çözüm örnekleri

Bu yazıda örneği olan crackmeler’de çözümlerini ve çözüm yollarına değineceğim.

Ege · 2025-02-11 12:38 · 1 claps · 2.2 min read
#reverse-engineering #crackme #c #assembly
Open on Medium ↗

Crack me Çözüm örnekleri

Bu yazıda örneği olan crackmeler’de çözümlerini ve çözüm yollarına değineceğim.

ilk olarak buradan crackmes-solutions/ioli/crackme0x05.exe at master · gabimarti/crackmes-solutions · GitHub crackme0x05.exe dosyasını indiriyoruz. Sonrasında bunu analiz etmek için İDA Freeware uygulamasını kullanacağım siz Ghidra veya x32dbg kullanabilirsiniz.

önümüze böyle bir parça karşımıza geliyor. Burada base pointer’ı buraya verip bir başlangıç aşaması yapıldıktan sonra.

burada __alloca ve ___main fonksiyonları çağrıldıktan sonra burda offsetlerin esp+98h+Format değerine taşındığını görüyoruz. Sonrasında yerleştirilen değerleri call printf ile yazdırıldığını anlıyoruz.

Burada ünlem ile gösterdiğim check fonksiyorunu verilen şifre şifre veya şifte algoritması ile bize bilgi verebileceğini düşünerek check fonksiyonunu analiz edelim.

Çift tıkladığımız zaman burada bir olumlu olumsuz durumların bize verildiğini görüyoruz. Burada başlangıçta bir hazırlık bölümü olduğunu görüyoruz. Bu iki komut fonksiyonun başlangıcında, stack frame oluşturulurken tipik olarak kullanılır. ebp önceki base pointer'ı korur ve sonra yeni bir base pointer tanımlanır. Bu, stack'teki yerel değişkenlere ve parametrelere erişimi kolaylaştırır.

eax register'ına fonksiyona geçen ilk argüman (arg_0) yükleniyor. Bu muhtemelen bir string pointer.

bu fonksiyon argüman olarak aldığı string’i Str değişkenine kopyalıyor.

Şu an gördüğümüz kısım, bir strlen işlemi yapıyor ve daha sonra string uzunluğunu bir değer (var_C) ile karşılaştırıyor. Eğer string uzunluğu yeterince büyük değilse, bir atlama yapılacak, aksi takdirde fonksiyon devam edecek.

Burada bir değerin offset Format ‘dan esp+28h+Format değerine yerleştiriliyor ve C veya C++ dilinde bildiğimiz gibi d bir tam sayı değerini aldığını anlıyoruz.

O zaman goal 1 = bir tam sayı yazacağımız değer

eax register'ına buffer değişkeninin adresini yükler. lea komutu, bir bellek adresini hesaplamak ve bu adresi bir register'a koymak için kullanılır. sscanf’de verilerin bu diziye yazılması bekleniyor.

edx register'ına var_4 değişkeninin değerini alır.

eax register'ına var_8 değişkeninin adresini yükler.

eax’de tutulan bellek adresine gidip, o adreste bulunan değere edx’deki değeri ekler. Bu da muhtemelen var_8'in üzerine var_4'ün eklenmesini sağlar. Burada, önceki bir işlem sonucu elde edilen bir değere (var_8) bir başka değer (var_4) ekleniyor.

altında gördüğümüz cmp karşılaştırma yapar karşılaştırmayı da 10h ile yaptığını görüyoruz üstüne basıp h ye bastığımızda hexadecimal değeri çevirip 16 olduğunu görüyoruz. Demek ki fonksiyonun bu parçası değerlerin toplandığını görüyoruz.


메타데이터
post_id
4e51873ed40d
slug
crack-me-çözüm-örnekleri-4e51873ed40d
url
https://medium.com/@ege.ka/crack-me-%C3%A7%C3%B6z%C3%BCm-%C3%B6rnekleri-4e51873ed40d
canonical_url
https://medium.com/@ege.ka/crack-me-%C3%A7%C3%B6z%C3%BCm-%C3%B6rnekleri-4e51873ed40d
author_url
https://medium.com/@ege.ka
status
ok
fetched_at
2026-06-16 19:09:56