licesnse_checker_3 - crackme çözümü - basit düzey

Napcaz

Anka Team Senior
28 Nis 2019
767
764
Cudi
Merhaba, bugün c/c++ ile kodlanmış küçük bir crackme, lisans kontrolü yapan bir uygulamayı ele alıcağız. Dilerseniz başlayalım.

GİRİŞ:
Program ı crackmes.one sitesi üzerinden buldum. Site içerisinde zorluk derecelerine göre bissürü crackme bulabilir ve kendi crackme lerinizi paylaşabilirsiniz.
Crackme linki: Crackmes

ÇÖZÜM:

Soruyu yapan kişi c/c++ ile yazdığını belirttiği için pasif bilgi toplamak adına DIE kullanmadım. Programı direk IDE ye attım.

knp513p.png

Main kısmına baktığımda burda programın kendisini argümanla çalıştırıp çalıştırmadığımızı kontrol ettiğini anladım. Buna göre bir hata mesajıda çıkarıyor yani anahtarı programı çalıştırırken vericez. (cmp [rbp+var_24], 2 sayesinde bu kontrol yapılıyor burdaki var_24 offset i kullanilarak hesaplanan adresteki değer argüman sayımızdır, ilk argüman program ın ismidir her zaman, ikincisi, üçüncüsü diye devam eden kısımlar program tarafından kullanılmak üzere değerlendirilir.)

gvu05xj.png


Programı bir argümanla çalıştırdığımız takdirde bir döngü içerisine girdiğini görüyoruz. Burda önce bizim girdimizin uzunluğu sıfır olarak başlatılmış bir değişken ([rbp+var_C]) ile karşılaştırılıyor ve eğer sonuç, bizim girdimizin uzunluğundan (strlen fonksyonu ile argumanımızın uzunluğu hesaplanıyor) küçükse döngü devam ediyor, döngüye her girdiğimizde girdimizin sıradaki karakterini alıyoruz ve integer a çevirip var_10 offset i ile belirtilen adrese bu değeri ekliyoruz. Yani argümanımızda ki bütün rakamlari teker teker alıp topluyoruz. Bu görebileceğiniz gibi atoi fonksiyonu ile oluyor standart c fonksiyonlarından biri eğer argümanımızda bir harf var ise bunu 0 olarak yorumluyor yani anahtar olarak sadece sayılar işe yarayacaktır.

For döngüsü ne zaman bizim girdimizin uzunluğu eşit olursa o zaman döngü bitiyor (bu cmp [rbp+var_C], eax bloğu ile kontrol ediliyor dikkatli bakarsanız döngü her bittiğinde var_C nin bir arttırıldığını görüceksiniz. eax register ı da zaten strlen ın dönüş değerini yani argümanımızın uzunluğunu tutuyor olucak). Ardından biriktirdiğimiz sonucun 32h yani 50 ye eşit olup olmadığını kontrol ediyoruz. Bu demektir ki girdiğimiz sayılar ne kadar uzun olursa olsun ki maksimum 50 tane 1 yazabiliriz, toplamı 50 ye eşitse lisansımız doğrulanıyor şimdi bunu test edelim.

pn6hxh4.png



Her şey beklediğimiz gibi çalışıyor gördüğünüz gibi daha doğrusu okuduğumuz gibi... Kafanıza takılan bir yer varsa veya eleştirmek istediğiniz bir nokta, saygı çerçevesinde her türlü yoruma açığım. Herkese iyi kraklamalar:D Selametle kalın.
 
Son düzenleme:

JohnWick51

Uzman üye
20 Mar 2022
1,867
770
28
Merhaba, bugün c/c++ ile kodlanmış küçük bir crackme, lisans kontrolü yapan bir uygulamayı ele alıcağız. Dilerseniz başlayalım.

GİRİŞ:
Program ı crackmes.one sitesi üzerinden buldum. Site içerisinde zorluk derecelerine göre bissürü crackme bulabilir ve kendi crackme lerinizi paylaşabilirsiniz.
Crackme linki: Crackmes

ÇÖZÜM:

Soruyu yapan kişi c/c++ ile yazdığını belirttiği için pasif bilgi toplamak adına DIE kullanmadım. Programı direk IDE ye attım.

knp513p.png

Main kısmına baktığımda burda programın kendisini argümanla çalıştırıp çalıştırmadığımızı kontrol ettiğini anladım. Buna göre bir hata mesajıda çıkarıyor yani anahtarı programı çalıştırırken vericez. (cmp [rbp+var_24], 2 sayesinde bu kontrol yapılıyor burdaki var_24 offseti nün tekabül ettiği değer, argüman sayımız, ilk argüman program ın ismidir her zaman, ikincisi, üçüncüsü diye devam eden kısımlar program tarafından kullanılmak üzere değerlendirilir.)

gvu05xj.png


Programı bir argümanla çalıştırdığımız takdirde bir döngü içerisine girdiğini görüyoruz. Burda önce bizim girdimizin uzunluğu sıfır olarak başlatılmış bir değişken ([rbp+var_C]) ile karşılaştırılıyor ve eğer sonuç, bizim girdimizden küçükse döngü devam ediyor, döngüye her girdiğimizde girdimizin sıradaki karakterini alıyoruz ve integer a çevirip var_10 ile belirtilen offset + rbp register ının işaret ettiği adrese bu değeri ekliyoruz. Yani bütün karakterlerimizi teker teker alıp topluyoruz. Bu görebileceğiniz gibi atoi fonksiyonu ile oluyor standart c fonksiyonlarından biri, girdimizi integer a dönüştürüyor eğer girdimiz bir harf ise bunu 0 olarak yorumluyor yani anahtar olarak sadece sayılar işe yarayacaktır.

For döngüsü ne zaman bizim girdimizin uzunluğu kadar sürerse o zaman döngü bitiyor (bu cmp [rbp+var_C], eax bloğu ile kontrol ediliyor dikkatli bakarsanız döngü her bittiğinde var_C nin bir arttırıldığını görüceksiniz. eax register ı da zaten strlen ın dönüş değerini yani girdi uzunluğunu tutuyor olucak). Ardından biriktirdiğimiz sonucun 32h yani 50 ye eşit olup olmadığını kontrol ediyoruz. Bu demektir ki girdiğimiz sayılar ne kadar uzun olursa olsun ki maksimum 50 tane 1 yazabiliriz, toplamı 50 ye eşitse lisansımız doğrulanıyor şimdi bunu test edelim.

pn6hxh4.png



Her şey beklediğimiz gibi çalışıyor gördüğünüz gibi daha doğrusu okuduğumuz gibi... Kafanıza takılan bir yer varsa veya eleştirmek istediğiniz bir nokta, saygı çerçevesinde her türlü yoruma açığım. Herkese iyi kraklamalar:D Selametle kalın.
Ellerine saglik
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.