Keygen for Keygen mi? #3 by FnZnL!

19.06.2018
2387 Okunma

Merhabalar, elime geçen bir “KeygenMe” üzerinden eğitim yazılarımıza devam ediyoruz. Bu yazımda kırma/keygen yazma işlemi ile tutorial yazma işlemini eş zamanlı yapıyorum. Anlatım bozukluğu, ya da “daha kolayı vardı” diyeceğiniz yerler için şimdiden özür dilerim.

Başlayalım.

KeygenMe’yi çalıştırdığımızda herhangi bir onay butonunun olmadığını görüyoruz. Diğer bir deyişle, program öncelikle uygun uzunlukta kullanıcı adı ve parolanın girilmesini kontrol ediyor, bize bu ikisi sağlandıktan sonra “aferin” kutucuğunu çıkartıyor.

İlk iş olarak bu uzunlukların ne olduğunu kontrol edelim.


Evet 1001(3E9) ve 1002(3EA) ID numaralı kutucuklarda yapılan kontrolü bulduk ve ilk aşamayı tamamladık. Sırada kutucuklara yazılan metinler için herhangi bir kontol olup olmadığını kontrol etmek.

Yukarıdaki kontrol döngüsünü örnekle adım adım tekrar edelim:

Kullanıcı adı olarak 13 karakterli “ABCDEFGHIJKLM” yazmış olalım. ecx sıfırlandı. edx 13 değerini aldı. eax de kullanıcı adı değeri var. Pointer, eax değerinin 0’ıncı baytında yanı “A” karakterini oku. “A”(41) , “Z”(5A) dan büyük mü? Değil. Peki “A”(41) , “@”(40) tan küçük mü? Değil. Devam et. ecx’i 1 arttırdık ve ecx 1 oldu. 1, 13’e eşit mi? Değil. Döngüyü başa sar.

Özetle girilen kullanıcı adı 40 ila 5A arasındaki karakterlerden, yani sadece latin alfabesindeki büyük harflerden oluşabilirmiş. Böylelikle en sonunda yazacağımız kullanıcı adı havuzumuzun boyutu belli olmuş oldu.

Devam edelim. Bakalım başka ne kontroller var.

Yukarıdaki kontrol döngüsünü örnekle adım adım tekrar edelim:

Kullanıcı adı olarak 13 karakterli “ABCDEFGHIJKLM” yazmış olalım. Şifre olarak da “1234567890123456” girelim. ecx sıfırlandı. eax de kullanıcı adı değeri var. Pointer, eax değerinin 0’ıncı baytında yanı “A” karakterini oku. 3 ekle (41+3=44 yani “D”). ebx de kullanıcı adı değeri var. Pointer, ebx değerinin 0’ıncı baytında yanı “1” karakterini oku. “D”(44), “1”(31) e eşit mi? Değil. Devam et. ecx’i 1 arttırdık ve ecx 1 oldu. 1, 4’e eşit mi? Değil. Döngüyü başa sar.

Özetle girilen kullanıcı adının ilk dört karakteri özelinde şifrede bir kontrol var. Kullanıcı adının ilk dört karakterinin, sırasıyla, değerinin 3 fazlası; şifrenin ilgili sıradaki karakterinden büyük olamaz.

Oluşturacağımız şifre için ilk kısıtımızı da bulmuş olduk. Devam edelim.

Özetleyelim. Şifrenin ilk karakterini al. 13 le xor la. 30 dan büyük olmamalı. 40 ekle. Şifrenin 6ncı karakteriyle karşılaştır. Büyükse hataya git değilse aynısını 2 ve 7nci karakter için kontrol et.

Geçelim diğer kontrole:

Bu döngüde şifremizin 1 ile 9 ve 2 ile 10 uncu karakterleri arasında bir kontrol var. Bu kontrol sonucunda da şifremizin 11 ve 12nci karakterleri bulunuyor. 1 ve 9ncu karakteri alıyor, bunları xor luyor ve sonucu eax’e yazıyor. Çıkan sonuç 30 la kıyaslanıyor. Küçükse 30 eklenip 7A ile kıyaslanıyor ve küçükse devam edilip; eax değerinin, şifrenin 11nci karakterine eşit olması kontrol ediliyor. Aynı işlemler 2 ve 10ncu karakterler ile yapılıp 12nci karakter bulunuyor.

Geldik son ve en basit kontrole:

Yukarıdaki kontrol kullanıcı adının ilk 4 karakterinin şifrenin 13,14,15,16ncı karakterleriyle aynı olup olmadığını kontrol ediyor. Bu kadar basit.

Bu işlemler sonucunda deneme için girdiğimiz “ABCDEFGHIJKLM” kullanıcı adına denk gelen şifrelerden birinin “:9345ij89039ABCD” olduğunu buluyoruz.

Tebrikler programı kırdınız :)

Şimdi gelelim keygen yazma işlemine. Bildiklerimizi toparlayalım ve fonksiyonlarımızı oluşturalım.
1- Kullanıcı adı 13 karakterden oluşacak ve sadece büyük latin harflerini içerecek.
2- Kullanıcı adının ilk dört karakterinin, sırasıyla, değerinin 3 fazlası; şifrenin ilgili sıradaki karakterinden büyük olamaz. Buna göre kullanıcı adına yazılabilecek en büyük karakter “Z”(5A) olduğuna göre şifrenin ilk 4 karakterinde bulunabilecek en büyük karakter “]”(5D) olabilir.
3- Şifrenin ilk karakterini al. 13 le xor la. 30 dan küçükse 40 ekle.30dan büyükse 7A ile kıyasla. 7A dan büyükse 20 çıkar, değilse devam et. Şifrenin 6ncı karakteriyle karşılaştır. Aynısını 2 ve 7nci karakter için kontrol et.
4- Şifrenin 1 ve 9ncu karakterini al, bunları xor la ve sonucu eax’e yaz. Çıkan sonuç 30 la kıyasla. Küçükse 30 ekle, 7A ile kıyasla. Küçükse devam et; eax değeri, şifrenin 11nci karakterine eşit olmalı. Aynı işlemler 2 ve 10ncu karakterler ile yap 12nci karakteri bul.
5- Kullanıcı adının ilk 4 karakteri şifrenin son 4 karakteri olacak

Yazdığım KeyGen’e ait Kaynak Kodlar ekte mevcut. Takıldığınız her yerde soru sormaktan çekinmeyin.

Yazı boyunca yaptığımız hatalardan ötürü şimdiden affola.

[dm]160[/dm]

Comments of this post

Henüz yorum bulunmuyor!