Keygen for s3rh47 KeygenMe 18.05.2018

Kategori Assembly, Cracking
23.07.2018
3384 Okunma

Esenlikler;
s3rh47 KeygenMe ile bugün yeni bir keygenning dersini yapacağız. KeygenMe’yi (ve keygeni ile kaynak kodlarını da) yazımızın en altındaki bağlantıdan ya da decompile.us‘daki konu başlığından indirebilirsiniz.

1. KeygenMe’yi ExeInfo ile açalım:

Gördüğünüz gibi herhangi bir paketleme kullanılmamış.

2. IDA Pro ile önce dosyayı disassemble etmek ve kurcalamak istiyorum:

Resimde sol tarafta keygenme içerisindeki yordamları (fonksiyon) görüyorsunuz. Pembe olanlar dışarıdan çağrılan fonksiyonlar. Start, DialogFunc, sub_4010DE ve sub_40110F ise s3rh47’in yazdığı yordamlar ;) Biz bu 4 dört yordamı inceleyeceğiz. Eğer assembly yazılarımı okuduysanız, Start yordamı henüz ekrana bir pencere basılmadan önce yapılan hazırlıkları barındırıyor. s3rh47 Start yordamı içerisinde DialogBoxParam apisini çağırıyor ; bu yordam bir taslak(template) kullanarak pencere (modal dialog olarak geçer) yaratıyor. Ama bu kadar değil; API pencere yaratmak için bir de yordama ihtiyacı var: DialogFunc.

3. Şimdi de sol taraftaki mönüden DialogFunc’a çift tıklayarak bu yordamın(IDA Pro bunları subroutine olarak adlandırıyor ben yordam demeye devam edeceğim) içine girelim(Kod satırlarına noktalı virgüllerden son eklemeler yaptım onları da okuyalım):

Yukarıda da gördüğünüz gibi DialogFunc s3rh47’in penceresinin ikonunu dialoga ekliyor, “Hakkinda” butonuna basılırsa mesaj kutusunu açıyor ve eğer “Kayit Et” butonuna basarsa da “401091. CALL 0040110F” satırında görüleceği gibi kayıt etme algoritmasının bulunduğu yordam çağrılıyor.

4. Şimdi keygenmemizi ollydbg ile açalım ve 40110F adresine kesme noktamızı(breakpoint) F2 ile koyalım, sonra F9 ile çalıştıralım. KeygenMe dialogu ekrana gelince ben
Name: bluedevil
Serial: 1122334455667788
girdim. Kayit Et butonuna basalım ve aşağıdaki kodda duralım:

Aşağıdaki döngü girdiğimiz serialdeki değeri sanki bir onaltılık sayı yazmışız gibi belleğe atıyor ama tam olarak değil. Yani 11111111 girdiysen belleğe 31313131 olarak değil yine 11111111 olarak alıyor. Ayrıca algoritma 8 karakter alıp alıp işlem yapıyor EDX yazmacının 8 ile kontrolünün nedeni o. Mesela 12345678AB girdiniz seriale AB önemsenmiyor çünkü döngü başlarken AL yazmacının 0 olup olmamasını kontrol ediyor. Durum böyle olunca en çok 32 karakterlik bir serial girmemiz gerekiyor.

401304 adresindeki “CALL 004010DE” çağrısı bizim hata ve başarma mesajlarımızı çözen fonksiyon:

s3rh47 iyi çocuk ve kötü çocuk mesajlarını 3 ile XORlayarak şifrelemiş. Seriali GetDlgItemTextA APIsi ile çekip tek tek karakterlerini kontrol ediyor ve ‘-‘ tire varsa kaç tane tire olduğunu sayıp yığına(stack) gönderiyor. Eğer doğru serial girilmişse iyi çocuk mesajını bu tire sayısından gelen 3 ile tekrar xorlayıp MessageBox APIsi ile ekrana bastırıyor.

401296 adresine geldiğimizde, memory dump ekranına tıklayıp Ctrl+G yapıp 0x403918 adresini çokan kutucuğa yazıp git dersek orada içerisinde tireler olmayan doğru serialimizi göreceğiz. Buna 3 tane de tire eklersek geçerli bir serialimiz olur:
name: bluedevil
serial:55D8479A-C992A463-64739734-A6B7CDD3

Ama s3rh47 bir tire kontrolü yapmamış.
55D8479-A-C992A46364739734A6B7CDD-3
55D8479A-C992A463-64739734A6-B7CDD3
5-5-D-8479AC992A46364739734A6B7CDD3
Örneğin bu üçü de geçerli serial oluyor. Sadece tireler yan yana gelmemesi gerek yoksa 4011FB adresindeki tire sayacı döngüsü ard arda gelen tirelerden ikincisini sanki bir onaltılık değermiş gibi memory’e atıyor ve saymıyor. Bu da serialin hatalı olmasına neden oluyor.

Ayırdına vardıysanız s3rh47 kullanıcının girdiği kullanıcı adını kullanarak zaten doğru seriali keygenme içerisinde kullanıyor. Ben de kodun burasını kopyala yapıştır ile alıp kendi assemly kodumun içerisime gömüp keygenimi yazacağım.

[dm]163[/dm]

Comments of this post

byclone

byclone
21 August 2018

Sayın Blue DeviL,
Örnek aldığım nadir kişilerdensiniz.Tutorial’i zevkle okudum.Tebrik ederim güzel bir anlatım olmuş.
Tutorial’e vesile olduğu ve keygenme için s3rh47’a da ayrıca teşekkür ederim.
Tire kontrolü olmadığından gözümden kaçırarak tiresiz key verdiğim keygenmedir.

BlueDeviL

BlueDeviL
01 September 2018

Çok teşekkürler, amacımız kaliteli Türkçe içerik üretmek. Beğenildiyse, işe yarıyorsa ne mutlu bize. Senin dll keygenme’ne de bakıyordum ama evde çalışamayınca çözüm üretmek, tutorial yazmak maalesef olmuyor. Zaman gerekiyor güzel bir yazı yazabilmek için.