Announcements

Hello. It's been a long time. I have translated many of my latest projects and documents. I have hidden the all Turkish content except the document about the A* algorithm. I will translate it but I decided to keep it for a while because of the time issue. Also, there are a lot of old projects of mine are waiting to be translated.

Thanks.

Düzenleme(2012): Doküman yazılım güvenliği bilinci oluşturmak üzere eğitim amaçlı yazılmıştır. Hedef alınan program şahsıma aittir ve test amaçlıdır. Yazı lise yıllarıma ait olduğundan sürç-i lisan ettiysem af dilerim.


Gerekenler 

Ollydbg 
Keygen yazacağınız herhangi bir programlama dili(Ben delphide yazdığım örnek keygen kaynak kodunu dahil ettim) 

Burdan indirebilirsiniz.

Keygen yapmak reverse engineering’in en zor ve uzun süren konularından birisidir.Çünkü programın seri numarasının hesaplandığı bölgenin çok iyi bir şekilde analiz edilmesi gerekmektedir.Programın girdiğimiz seri numarayı ve hesaplanan seri numarayı karşılaştırdığı bölgede yeterince araştırma yapmış olmak ve daha gerisine dönerek kullanıcı adının alındığı bölgeden itiraben dikkatli bir şekilde registerleri,apileri ve işlemleri izleyerek doğru yerleri tespit etmeliyiz.Buraları izleyerek serial fishing denilen yöntemide gerçekleştirebiliriz.Yani hesaplama tamamlandıktan sonra, mesela “FireX” girdiysek karşılığı “235-26756766352” oluyor.Onu debugger ile görüp seri numarayı elde etmiş olarakta paylaşım yapabiliriz.Fakat sıkı kodlanmış bir uygulamanın seri numarasıda sap gibi ortada olmaz.Gerekirse not alarak işlemleri takip etmeniz gerekecektir. 


Fakat dağıttımız seri numara zamanla kara listeye girebilir ve seri numaramız işe yaramaz hale gelebilir.Bu sebeple keygen yazmak daha mantıklıdır.Zor bir iştir.Fakat neticesi güzeldir.Bazı uyanık cracker teamler 15-20 tane seri numarayı bulup tespit ettikten sonra programa koyuyorlar ve keygen diyorlar(Program sadece seri numara üretiyorsa) Bir süre sonra verilen seri numaralar tekrar etmeye başlıyorsa o keygenden çok seri numara listesi gibi birşeydir.Keygende programın seri numarasının hesaplanma mantığını çözmek vardır. 

Programda kullanıcı adının dışında başka şeyler daha istenmesi ,seri numaranın parçalara ayrılarak hesaplanması işimizi dahada zorlaştırmaktadır.Fakat sıkı bir çalışmayla üstesinden gelinebilir.Programın her adımının dikkatle takip edilmesi,gözümüzü registerlerdan ayırmamamız gerekmektedir.Özellikle keygen yapımında sabır çok önemlidir.Çünkü işimiz programına göre hayli uzar.Program sıkı korunmuş ve birçok matematiksel işlemden geçirilmişse oldukça uzun kodlar bizi bekleyecektir.Keygen olayına kısaca gözatarsak; 

Deneme amaçlı kısa bir program yazdım.Bu program için keygen yazacağız.Deneme amaçlı programı kolaylık olması açısından visual c++ ile yazdım.Örneğin delphi ile yazsaydım.Programda birçok prosedür çağrısı ve daha uzun kodlar bizi bekliyor olacaktı.Bir programı debugger ile açtığınızda her taraf call ile doluysa delphi olduğunu anlayabilirsiniz (: Deneme amaçlı programda static linking’i seçtiğim için dosyanın boyutu biraz büyük oldu.Sebebi farklı windows sürümlerini kullanan arkadaşların sorun yaşamaması.Ayrıca keygenide delphi bilenlerin ağırlık olması sebebiyle delphide yazdım.Kaynak kodlarını indirebilirsiniz. 

Ollydbg ile önce hedef programa gözattıktan sonra kilit noktayı buluyoruz. Kodlara sağ tıklayıp search for->all referenced text strings’e basar hata mesajını aratırsak o bölgeye ulaşabiliriz.Tabi dosya packlenmiş olacak,şifrelenmiş olacak,daha sıkı korunmuş olacak işler bu kadar yolunda gitmeyecek.Resimde gördüğünüz üzere bölgeye ulaştık. 

 

Şimdide register butonuna bastığımızdan itibaren başlayan bölgeyi analiz edelim. 

 

 

 

Programı sizde satır satır izleyerek gözlemleyebilirsiniz.Ben işlemleri resimde belirteceğim ve keygende hangi adımları yapmamız gerektiği ortaya çıkacak.Keygeni yazarken direk debuggerdan assembly kodlarını kopyalayıp programımıza uyarlayıp kullanabiliriz.Fakat işlemler fazlasıyla karmaşıksa adımları izleyerek sonuca ulaşabiliriz.Örneğin orada döngü varsa assembly koduyla döngüye girmek yerine delphide yada herhangi bir dile özgü şekliyle döngü oluşturarak aynısını tekrarlayabiliriz. 

 

İşlemleri sıralarsak 
1-)İsmi ve seri numarayı al(Keygen için önemli değil ismi almamız ve hesaplatmamız yeterli) 
2-)İsmin uzunluğunu al. 
3-)Karakterleri döngüde teker teker ele al ve karşılıklarını topla.Debugger ile baktığımızda mesela “a” yazdıysak hex karşılığı olan 61’i göreceğiz.Biz decimal olarak karşılığını toplatacağız yani 97.Düzenlersek “asd” yazdıysak karşılıkları olan 97+115+100’ü toplayacağız.Yani harflerin karşılıklarını topluyoruz. 
4-)Döngüden sonra çıkan değerin karesini al. 

Bunların tespitini tabiki registerlara bakarak yapıyoruz.Değerler hangi registera aktarılmış,nerelerde kullanılmak üzere geri çağrılıyor vs bunların hepsini dikkatlice izlememiz lazım. 

Bu adımları kendi kullandığımız programlama diliyle yerine getiriyoruz.Forma kullanıcı adını alan bir edit seri numarayı gösteren label veya edit koyduktan sonra gereken matematiksel işlemleri adım adım yerine getiriyor ve sonucu yazdırıyoruz.Yada programın hesaplama yaptığı assembly kodlarını kopyalayıp keygene koyabilirsiniz bu da başka bir yöntemdir.Fakat arada gereksiz bazı yerlerde olabileceğinden biraz uğraştırabilir.