Puzzle Inlay keygen algoritması tam çözüm

maviboynuz

Program Url: http://www.gamehouse.com

Program Tipi: süre kısıtlaması

     Araçlar: Softice, c++ builder(keygen için), sabır

Basit ( x )  Orta ( x )  Zor ( )  Pro ()


Başlangıç

Selamün Aleyküm, herkese hayırlı akşamlar. Gamehouse oyunlarıyla uğraşmaya devam ediyoruz. 13 adımda AdvantureInlay unpack yazısında da bahsettiğimiz gibi bu oyunların koruması oldukça dandik. Biz oyunu koruma dosyasından kolayca ayırabilsek de bu sefer keygen algoritmasını çözeceğiz ve kendi keygenimizi yazacağız. Oldukça uzun bir yazı olacağını tahmin ediyorum. Ayrıntıya girmeyi de düşünüyorum. Yazıyı daha iyi anlayabilmeniz için önce programı indirip, biraz karıştırmanızı tavsiye ederim. İnşallah yararlı olur. O zaman bilgisayar başına serüvenimiz başlıyor.

Yazı

               Programın keygen algoritması ilk bakıldığında çok karışık görünüyor. Oysa oldukça basit. Tek sorun takibi yapabilmekte. Çünkü adamlar isme karşılık gelen serialı 4 veya 5 aşamada hesaplatmışlar programlarına. Ben debug işlemleri için softice’ı kullanmayı tercih ettim. Aynı işlemleri Ollydbg de yapıyor. Programı bilgisayarınıza kurun  ve biraz oynayın. Gerçekten insanı rahatlatan oyunlar. Bağımlılık yapıyor bile denebilir. Oyunu her açtığınızda aşağıdaki pencere ile karılaşıyorsunuz.

 

              

               Unregistered Version yazan pencere başlığında oyunu daha 41 dakika oynayabileceğimiz yazıyor. Try Now ile oyunu oynuyoruz. Ancak biz Name ve Code kısmına birşeyler yazmaya başlayınca Try Now pasif hale geliyor. Name kısmına maviboynuz Code kısmına da 1234567890 sayılarını girelim ve Enter License Information butonuna tıklayıp hata mesajına bir bakalım.

 

 

               Kötü olan ingilizcemle çevirmeye çalışayım. “Lisans kodunuzun uzunluğu yanlış, lütfen girdiğiniz bütün harfleri kontrol edin.” diyor.  Demek ki kod için sabit bir uzunluk var. Program girdiğimiz lisans kodunun doğruluğuna bakmadan uzunluğunu kontrol ediyor. Tamam butonuna tıklayıp bu sefer Ctrl+d tuşlarına basarak softice programını çalıştıralım. bpx hmemcpy yazarak breakpointimizi koyalım. Softice’ın komut satırına x yazıp enter tuşuna basalım ve softice şimdilik uyku moduna geçsin. Enter License Inormation butonuna tekrar tıklayalım. Evet softiceDayız. bd 0 yazarak breakpointu kaldırıyoruz. F12 tuşuna basarak

(9 defa) program kodlarına ulaşıyoruz. Artık işimizi yapabiliriz. Kodlar önümüzde. Elimden geldiğince açıklamaya çalışacağım.

//---0-------0---------0----------0------------0------------0----------------0-----------------0-------------------------0

00512584    6A 18                   PUSH    18                                               ; softice ile programa giriş noktamız

00512586    8D4424 28            LEA     EAX, DWORD PTR SS:[ESP+28]   ; esp+28 deki adres eax’e yükleniyor

0051258A    50                       PUSH    EAX                                            ; push komutları dikkat ederseniz genellikle call

0051258B    68 E9030000        PUSH    3E9                                            ;çağrılarından önce kullanılıyor. Push komutları

00512590    56                        PUSH    ESI                                             ;değeri hafızada saklıyor. Böylece registerlar baş-

00512591    FFD7                   CALL    NEAR EDI                                    ;ka işlemler için kullanılabiliyor.

00512593    8A4424 40            MOV     AL, BYTE PTR SS:[ESP+40]        ;esp+40 adresimde girdiğimiz ismin ilk karakteri

                                                                                                            ;var. Al ye aktarılıyor.

00512597    84C0                    TEST    AL, AL                                         ;test komutu ile al nin boş olup olmadığına bakıyor

00512599    0F84 33030000     JE      INLAY.005128D2                             ;al nin içi boşsa program dallanacak.

0051259F    8A4424 24           MOV     AL, BYTE PTR SS:[ESP+24]        ;esp+24 adresinde de girdiğimiz kodun ilk karak-

005125A3    84C0                   TEST    AL, AL                                         ;teri yer alıyor. Ve al ye yüklenerek test ile kontrol

                                                                                                            ;ediliyor. Bir değer girilmemişse program adrese

005125A5    0F84 27030000    JE      INLAY.005128D2                             ;dallanıyor. Bu iki karşılaştırma bana mantıksız

                                                                                                            ;geldi. Çünkü isim veya kod kısmını boş bırakır-

                                                                                                            ;sanız zaten Enter license information butonuna

                                                                                                            ;tıklayamıyorsunuz. Yani gerek yok kontole.

005125AB    8D4C24 24          LEA     ECX, DWORD PTR SS:[ESP+24]   ;girdiğimiz yanlış lisans kodunun ilk karakteri

                                                                                                            ;ecx’e yükleniyor.

005125AF    51                        PUSH    ECX

005125B0    E8 EBEBFFFF     CALL    INLAY.005111A0                          ;bu çağrıya girmeden lisans kodumuzla ilgili bir

                                                                                                            ;işlem yapılacağını tahmin edebiliriz. F8 ile bakalım.

//---1-------1---------1----------1------------1------------1----------------1-----------------1-------------------------1

005125B0    E8 EBEBFFFF        CALL    INLAY.005111A0

burda biraz açıklama yapmak gerekiyor. Dallanma komutları ile dallandıkları komut satırlarını aynı renk yaptım ki anlaşılması kolay olsun. Evet bu kısımda girdiğimiz lisans kodu bazı karşılaştırmalardan geçiyor. Biraz inceleyelim. Şimdi satır satır açıklama ile program parçasının toplu olarak yaptığı işi açıklama farklı anlamlar içerebilir. Biraz öyle biraz da öyle deneyelim.

 

005111A0    8B4C24 04     MOV     ECX, DWORD PTR SS:[ESP+4]    ;esp+4 de bizim girdiğimiz lisans kod var. Bu kodun ilk ka-

                                                                                                      ;rakterinin adresi ecx registerına yükleniyor. Adresin yük-

                                                                                                      ;lendiğine dikkat edin. Ecx 1 artarsa bu lisans kodunun 2.

                                                                                                      ;karakterine geldiğimiz anlamına gelir.

005111A4    8A01             MOV     AL, BYTE PTR DS:[ECX]              ;lisans kodumuzun ilk karakteri Al registerında

005111A6    33D2            XOR     EDX, EDX                                     ;edx regiserı sınıflanıyor. (1xor 1= 0, 0 xor 0=0,1 xor 0=1)

                                                                                                      ;olduğundan kendisiyle xorlanan registerlar sıfırlanır.

005111A8    84C0             TEST    AL, AL                                         ;al registerı boş mu? Boş ise dallancak ve orada ecx 

005111AA   7E 10             JLE     SHORT INLAY.005111BC               ;registerındaki değer al ye aktarılacak.

005111AC   8D6424 00      LEA     ESP, DWORD PTR SS:[ESP]        ;

005111B0   3C 20             CMP     AL, 20                                         ;” “boşluk mu? Al deki

005111B2   7F 08             JG      SHORT INLAY.005111BC               ; jg kullanıldığına göre 20h değerinden küçük mü?

005111B4   8A41 01         MOV     AL, BYTE PTR DS:[ECX+1]           ;

005111B7    41                 INC     ECX                                               ;

                                                                                                      ;

005111B8    84C0            TEST    AL, AL                                         ;

                                                                                                      ;

 005111BA   7F F4           JG      SHORT INLAY.005111B0                ;

005111BC    8A01            MOV     AL, BYTE PTR DS:[ECX]              ;

005111BE    84C0            TEST    AL, AL                                         ;
005111C0    74 24            
JE      SHORT INLAY.005111E6                ;

005111C2    41                 INC     ECX                                               ;

005111C3    3C 2D           CMP     AL, 2D                                         ;”-“

005111C5    74 19             JE      SHORT INLAY.005111E0                ;

005111C7    3C 61           CMP     AL, 61                                         ;”a”

005111C9    7C 04            JL      SHORT INLAY.005111CF                ;

005111CB    3C 7A           CMP     AL, 7A                                         ;”z”

005111CD    7E 10           JLE     SHORT INLAY.005111DF               ;

005111CF    3C 41           CMP     AL, 41                                         ;”A”

005111D1    7C 04           JL      SHORT INLAY.005111D7                ;

005111D3    3C 5A           CMP     AL, 5A                                         ;”Z”

005111D5    7E 08           JLE     SHORT INLAY.005111DF               ;

005111D7    3C 30           CMP     AL, 30                                         ;”0”

005111D9    7C 0B           JL      SHORT INLAY.005111E6                ;  

005111DB    3C 39           CMP     AL, 39                                         ;”9”

005111DD    7F 07           JG      SHORT INLAY.005111E6                ;

005111DF    42                 INC     EDX                                               ; lisans kodumuzu sayıyor. Sayaç olarak kullanılmış.

005111E0    8A01            MOV     AL, BYTE PTR DS:[ECX]              ;

005111E2    84C0            TEST    AL, AL                                         ;

005111E4    75 DC           JNZ     SHORT INLAY.005111C2               ; asıl döngü bu.

005111E6    33C0            XOR     EAX, EAX                                     ; döngü bitti. Eax registerı 0’lanıyor.

005111E8    83FA 0F        CMP     EDX, 0F                                       ; F -> 15, edx bizim girdiğimiz kodun uzunluğunu içeriyor.

005111EB    0F94C0        SETE    AL                                               ; eğer eşitlerse al 1 değerini alıyor.

005111EE    C3                RETN                                                       ; call çağrısı sona eriyor.

//---2-------2---------2----------2------------2------------2----------------2-----------------2-------------------------2

toplayacak olursan yukarıdaki kodlardan lisans kodumuzun 15 karakter olması gerektiğini anlıyoruz. Eğer girdiğimiz 15 karakter 0 dan 9 za kadar rakamlar, a dan z ye kadar ve A dan Z ye kadar ingiliz alfabesinin harflerini içeriyorsa sorun yok. Noktalama işaretleri veya türkçe karakterler girilirse program saymayı bırakıp sete al komutu ile al 0’lanıyor. “ “ boşluk girilirse sayım devam ediyor ancak boşluk sayılmıyor. Ascii karakter tablosundaki ilk 32(20h) karakterden birisi girilirse bunlar da yine başta olurlarsa sayılmıyorlar, arada olurlarsa sayma işini sona erdiriyorlar. Burada yer alan call çağrısındaki bu sayım işi yazacağımız keygende yer almayacak. Çünkü biz ismi alıp kodu vereceğiz. Yine de incelemiş olduk.

//---3-------3---------3----------3------------3------------3----------------3-----------------3-------------------------3

 

005125B0    E8 EBEBFFFF             CALL    INLAY.005111A0

 

005125B5    83C4 04                  ADD     ESP, 4                                               ;

005125B8    85C0                      TEST    EAX, EAX                                           ; eax call çağrısında lisans kodumuz 15 karakter-

                                                                                                                      ;se 1, değilse 0 olarak set edilmişti. Burada

005125BA    75 22                     JNZ     SHORT INLAY.005125DE                     ;kontrol ediliyor. Eğer dallanma gerçekleşmezse

; “Lisans kodunuzun uzunluğu yanlış, lütfen ;girdiğiniz bütün harfleri kontrol edin.”

;türünden bir mesaj alıyoruz. 15 karakter ;girmişsek, jnz dallanması gerçekleşecek ve

;farklı bir hata mesajı göreceğiz.

005125BC    A1 D45A5100         MOV     EAX, DWORD PTR DS:[515AD4]         ;

005125C1    68 00040000           PUSH    400                                                   ;

005125C6    8D9424 C4010000 LEA     EDX, DWORD PTR SS:[ESP+1C4]         ;

005125CD    52                          PUSH    EDX                                                  ;

005125CE    6A 0C                    PUSH    0C                                                     ;

005125D0    50                          PUSH    EAX                                                  ;

005125D1    FF15 D8405100       CALL    NEAR DWORD PTR DS:[<&USER32.LoadStringA>]

005125D7    6A 00                     PUSH    0                                                       ;

005125D9    E9 85000000           JMP     INLAY.00512663                                  ;

005125DE    6A 01                     PUSH    1                                                       ;bu kısma dallandığımıza göre 1. aşamayı atlattık.

005125E0    8D4424 28            LEA     EAX, DWORD PTR SS:[ESP+28] 

005125E4    50                          PUSH    EAX

005125E5    8D4C24 48              LEA     ECX, DWORD PTR SS:[ESP+48]

 

 

               Lisans kodunuz 15 karakter ancak yanlış ise yukarıdaki mesajı göreceğiz. Bozuk bir ingilizce ile tercüme edelim. Yanlış kod girdiniz. Lütfen.... anlıyoruz da anlatamıyoruz ne yapalım. Neyse yinede iyi çünkü gerçek seriale daha yakınız. Takibe devam edelim. 005125DE adresinde iken softice programında F9’a basıp breakpoint koyalım. Komut satırına x yazıp enter ve softice dan çıkalım.

               Evet şimdi license name yerine maviboynuz,   license code yerine 123456789abcdef yazalım enter license information tuşuna basalım.

//---4-------4---------4----------4------------4------------4----------------4-----------------4-------------------------4

005125DE    6A 01                           PUSH    1                                                 ;

005125E0    8D4424 28                    LEA     EAX, DWORD PTR SS:[ESP+28]    ; bizim girdiğimiz lisans kodu

005125E4    50                                PUSH    EAX                                            ;

005125E5    8D4C24 48                    LEA     ECX, DWORD PTR SS:[ESP+48]    ; girdiğimiz isim

005125E9    51                                PUSH    ECX                                            ;

005125EA    8D9424 CC000000        LEA     EDX, DWORD PTR SS:[ESP+CC]   ; bu adrese sonra kullanılacak gerçek lisans

                                                                                                                      ; kodunun ilk karakteri hariç geri kalanı gelecek.

005125F1    52                                PUSH    EDX                                            ;

005125F2    E8 C9F7FFFF               CALL    INLAY.00511DC0                          ; keygen algoritması burada bir göz gezdirelim.

//---5-------5---------5----------5------------5------------5----------------5-----------------5-------------------------5

005125F2    E8 C9F7FFFF               CALL    INLAY.00511DC0

00511DC0    8B5424 08                 MOV     EDX, DWORD PTR SS:[ESP+8]                      ; ismimizin ilk karakterinin adresi edx’e alınıyor.

00511DC4    8A02                         MOV     AL, BYTE PTR DS:[EDX]                                ; ismin ilk karakteri al’ye alınıyor.

00511DC6    81EC 00010000        SUB     ESP, 100                                                                ; ismimizin bulunduğu adresten 100h(256) byte geriye yer

                                                                                                                                                    ;açılıyor.  Sonradan anlıyorum ki küçük harfle girilen lisans

                                                                                                                                                    ;ismi büyük harfe çevrilecek ve bu hafız bölgesine yerleş-

                                                                                                                                                    ;tirilecek. 100h olmasının sebebi gireceğimiz lisans name

                                                                                                                                                    ; en fazla 255(ffh) karakter olacak.

00511DCC    53                              PUSH    EBX                                                                     ; işlem yapılacağı için eski değerleri saklanıyor.

00511DCD    56                             PUSH    ESI                                                                       ; register sayısı fazla olmadığından farklı işlemler için aynı

                                                                                                                                                    ; registerler kullanılıyor. Eski değerlerinin kaybolmaması için

                                                                                                                                                    ; push la hafızaya saklanıyor.

00511DCE    33C9                         XOR     ECX, ECX                                                            ; ecx ve esi 0 lanıyor.

00511DD0    33F6                          XOR     ESI, ESI                                                                ;

00511DD2    84C0                         TEST    AL, AL                                                                 ; al de değer var mı? Yukarda ismin ilk karakterini almıştı.

00511DD4    57                              PUSH    EDI                                                                       ; edi de döngüde kullanılacak demek ki değeri saklanıyor.

00511DD5    74 3E                         JE      SHORT INLAY.00511E15                                     ; al boşsa döngüden çıkılıyor.

00511DD7    81F9 FF000000   CMP     ECX, 0FF                                                        ; ecx de girdiğimiz lisans name in uzunluğu var. FFh(255)

                                                                                                                                                    ; den fazlası dikkate alınmayacak. Kimin o kadar uzun ismi

                                                                                                                                                    ; ki. Burası aynı zamanda döngünün başlangıcı

00511DDD    7D 36                       JGE     SHORT INLAY.00511E15                                    ; lisans ismi 255 i geçerse döngüyü sonlandır.

00511DDF    3C 61                        CMP     AL, 61                                                                  ; ‘a’ ile ismin karakteri karşılaştırılıyor

00511DE1    7C 13                         JL      SHORT INLAY.00511DF6                                ; daha küçükse büyük harf mi diye bakılacak

00511DE3    3C 7A                        CMP     AL, 7A                                                                 ; ‘z’ ile ismin karakteri karşılaştırılıyor

00511DE5    7F 0F                         JG      SHORT INLAY.00511DF6                                ; daha büyükse büyük harf mi diye bakılacak yalnız burada

                                                                                                                                                    ; bir saçmalık var zaten z den büyükse büyük harf olma ihti-

                                                                                                                                                    ;mali yok . çünkü ascii tablosunda büyük harfler küçük

                                                                                                                                                    ;harflerden daha küçüktür.

00511DE7    0FBEF8                     MOVSX   EDI, AL                                                            ;bu kısım çalışırsa demekki girilen lisans isminin karşılaştırı-

                                                                                                                                                    ;lan karakteri küçük harftir. Tabi ingiliz alfabesinin. al deki

                                                                                                                                                    ; değer edi ye alınıyor.

00511DEA    8BD9                        MOV     EBX, ECX                                                           ; ecx deki değer ebx e alınıyor. Ecx sayaçtı. 0 dan başladı.

                                                                                                                                                    ;ebx de 0 dan başladı. İlk karakter için ebx 0.

00511DEC    03DF                         ADD     EBX, EDI                                                             ;edi deki değer ile ebx deki değer toplanıp ebx e alınıyor

                                                                                                                                                    ; yani c deki ebx+=edi gibi

00511DEE    8D74B3 E0               LEA     ESI, DWORD PTR DS:[EBX+ESI*4-20]          ; işte algoritmanin formülü bu ebx yani karakterin numarsı

                                                                                                                                                    ;ve sıra numarsı ebx de tabi sıra numarası 0 dan başlıyor

                                                                                                                                                    ; esi ilk önce 0 ve 20 az sonra ne olduğunu anlayacağız.

                                                                                                                                                    ;hepsi toplanıp esiye alınıyor. Demek ki bulacağımız sonuc

                                                                                                                                                    ;esi de olacak

00511DF2    2C 20                         SUB     AL, 20                                                                   ;bu işlem küçük harfi büyültür. Büyük harfe çevirir.  Biraz

                                                                                                                                                    ;anlatalım. a harfi 61, A harfi 41 aradaki fark 20 hexadecimal.

                                                                                                                                                    ;onluk sistemde a harfi 97, A harfi 129 yani fark 32.

00511DF4    EB 12                      JMP     SHORT INLAY.00511E08                              ; bu jmp büyük harfe çevrilmiş karakteri yeni yerine koya-

                                                                                                                                                    ;cak olan komut satırına gönderiyor. Çünkü hemen altındaki

                                                                                                                                                    ; kodlar lisans ismi büyük karakter girilirse çalışacak olan kı

                                                                                                                                                    ;sımlar. Yani karakter küçükse jmp nin üstündeki kodlar

                                                                                                                                                    ;karakter büyükse jmp nin altındaki kodlar çalışacak. Her                                                        

                                                                                                                                                    ;durumda harf büyüyecek ve yeni yerine yerleşecek.

00511DF6    3C 41                       CMP     AL, 41                                                                  ; karakter ‘A’ ile karşılaştırılıyor.

00511DF8    7C 13                         JL      SHORT INLAY.00511E0D                                ; küçükse  bir sonraki karaktere geçilecek

00511DFA    3C 5A                      CMP     AL, 5A                                                                 ; karakter ‘Z’ ile karşılaştırılıyor

00511DFC    7F 0F                        JG      SHORT INLAY.00511E0D                                ; büyükse bir sonraki karaktere geçilecek. Bunun anlamı

                                                                                                                                                    ; eğer küçük harf değilse, büyük harf mi? Eğer büyük harf

                                                                                                                                                    ;de değilse o karaktere hiçbir işlem yapma ve bir sonraki

                                                                                                                                                    ;karaktere geç yani lisans ismi sadece küçük veya büyük

                                                                                                                                                    ;ingiliz alfabesinin harflerinden oluşabilir.

00511DFE    0FBEF8                     MOVSX   EDI, AL                                                            ;evet burası çalışıyorsa girilen karakter büyük harf demektir.

                                                                                                                                                    ;ve edi ye alınıyor

00511E01    8BD9                          MOV     EBX, ECX                                                           ;ecx deki değer yani harfin sırası ebx e alınıyor

00511E03    03DF                          ADD     EBX, EDI                                                             ;ve üstüne harfle toplanıyor. Sıra nosunun 0 dan başladığı-

                                                                                                                                                    ;unutmayın

00511E05    8D34B3                      LEA     ESI, DWORD PTR DS:[EBX+ESI*4]                ;evet formülümüz burada –20 yok. Şimdi küçük harf formü-

                                                                                                                                                    ;lünde neden 20 olduğu anlaşılıyor. Küçük harflerle büyük

                                                                                                                                                    ;harfler arasında 20h değeri vardı. Demek ki maviboynuz ile

                                                                                                                                                    ;MaViBoynuZ veya maviBOYNUZ aynı lisans numarasına

                                                                                                                                                    ;sahip olacak.

00511E08    88440C 0C            MOV     BYTE PTR SS:[ESP+ECX+C], AL               ;büyük harf yeni yerime yerleşiyor.

00511E0C    41                               INC     ECX                                                                        ;ecx artıyor. Yani sıra numarası artıyor

00511E0D    8A42 01                 MOV     AL, BYTE PTR DS:[EDX+1]                            ; bir sonraki karakter al ye alınıyor

00511E10    42                                INC     EDX                                                                        ; bir sonraki karaktere geçiliyor

00511E11    84C0                           TEST    AL, AL                                                                 ; son karakter mi?

00511E13   75 C2                           JNZ     SHORT INLAY.00511DD7                              ; hayırsa döngü başına

şimdi döngünün kısaca ne iş yaptığını yazalım. Lisans name ile girilen karakterler içindeki küçük ve büyük harfleri topladı ve bir sayı hesapladı. Girdiğiniz lisans isminin içindeki harfler ayıklandı ve diğer karakterlerden ayrıldı ve yeni yerine yerleştirildi. Demek ki mavi1b?o*nuZ ile maviboynuz aynı lisans numarasına sahip olacak. Tabi ma1222342vibo,üğöçynuz da. Burada oluşan sayı esi de bakalım hangi sayı oluşmuş ve kodlara devam edelim. Yazının uzun olacağını söylemiştim. Ancak daha da uzun olacak çünkü gerçek lisans koduna ulaşmak için daha aşama çok. Kayıt edelim de elektrik gider.

//---6-------6---------6----------6------------6------------6----------------6-----------------6-------------------------6

girdiğimiz lisans name sonucu bir değer hesaplandı. maviboynuz için bu değer 1924AE7h sayısı. Bir alt satıra bakalım.

 

00511E15    81E6 FFFFFF7F  AND     ESI, 7FFFFFFF                   ;esi de bizim girdiğimiz name için hesaplanan sayı var. Peki

                                                                                                   ;diğer sayı da ne. 7FFFFFFF sayısı 32 bitte yazılabilecek en

                                                                                                   ;büyük işaretli sayıdır. 7FFFFFFF=2147483647. sayılar işaretli

                                                                                                   ;ve işaretsiz olarak 2ye ayrılır. İşaretli sayılar – ve + olur.

                                                                                                   ;işaretsizler ise 0 dan başlar yani negatifleri yoktur.

;1byte 8 bittir. 11111111 sayısı 8 bit ile yazılabilecek en büyük sayıdır. Ve bu sayı 255 dir. Çevirme işlemi şu şekilde olur.

;1*1+1*2+1*4+1*8+1*16+1*32+1*64+1*128 bu sayı işaretsizdir. Eğer işaretli olursa soldan ilk bit sayı değil işaret biti olur. Eğer 1 ;ise sayı negatif 0 ise pozitiftir. 11111111 sayısı 1. bit 1 olduğundan negatif bir sayıdır. Sayının değeri ise

; 1*1+1*2+1*4+1*8+1*16+1*32+1*64=-127 bu da işaretli 8 bit ile yazılabilecek en küçük sayıdır. Toparlayalım 8 bit işaretsiz sayılar

;0 ile 255 arasında işaretliler ise –127 ile +127 arasında olurlar. Gelelim 7FFFFFFF sayısına 7 nin karşılığı 0111 dir. Bu da ne ;demek işaretli sayılarla yazılabilecek en büyük sayı. Bir fazlası 8000000 sayısı eder. 8 in karşılığı 1000 dır. Yani negatif bir sayı.

;buradaki and işlemi bizim isimden dolayı hesaplanan sayımızın fazlasını yok etmek yani soldan ilk biti 0 yaparak sayıyı +hale getir

;mek için kullanılmış. Çünkü 1 and 0=0 ve  0 and 0 = 0 dır.

00511E1B    75 14                  JNZ     SHORT INLAY.00511E31      ;aşağıdaki kodları atlıyoruz. Yalnız aşağıdaki kodlar çalışırsa

00511E1D    8B8424 10010000 MOV     EAX, DWORD PTR SS:[ESP+110] ; yanlış serial numarası mesajı ekrana geliyor.

00511E24    5F                       POP     EDI                                     ;

00511E25    5E                       POP     ESI                                     ;

00511E26    C600 00               MOV     BYTE PTR DS:[EAX], 0       ;tabi buradaki 0 ı 1 yaparsanız başka

00511E29    5B                       POP     EBX                                    ;

00511E2A    81C4 00010000    ADD     ESP, 100                            ;

00511E30    C3                       RETN                                              ;

00511E31    C6440C 0C 00      MOV     BYTE PTR SS:[ESP+ECX+C], 0 ;algoritmayı çözmeye devam 0 değeri bir adrese atılıyor.

                                                                                                   ;bu adres bizim girdiğimiz ve büyük harflere çevrilen lisans

                                                                                                   ;name in sonuna konuyor. İsmin sonuna gelindiğini anlasın.

00511E36    8B8C24 1C010000 MOV     ECX, DWORD PTR SS:[ESP+11C] ;esp+11c deki değer bir adres bu adresteki değer

                                                                                                   ;ecx e aktarılıyor. Değeri 1

00511E3D    51                       PUSH    ECX                                   ;bu değer saklanıyor.

00511E3E    8D5424 10           LEA     EDX, DWORD PTR SS:[ESP+10] ;büyük harflere çevrilmiş lisans isminin ilk karakteri edx e

                                                                                                   ;aktarılıyor.

00511E42    52                       PUSH    EDX                                   ;

00511E43    E8 38FEFFFF     CALL    INLAY.00511C80                  ;evet biraz da buraya dalalım. Bakim burada neler karşımıza çıkacak.

//---7-------7---------7----------7------------7------------7----------------7-----------------7-------------------------7

00511E43    E8 38FEFFFF     CALL    INLAY.00511C80

00511C80    81EC 7C040000      SUB     ESP, 47C                         ;

00511C86    53                          PUSH    EBX                                ;registerdaki değerler saklanıyor.

00511C87    55                          PUSH    EBP                               ;

00511C88    56                          PUSH    ESI                                 ;

00511C89    8B35 1C505100       MOV     ESI, DWORD PTR DS:[51501C] ;bazı sabit değerler var daha doğrusu isimler

00511C8F    803E 00                 CMP     BYTE PTR DS:[ESI], 0      ;sonuna geldi mi?

00511C92    57                          PUSH    EDI                                 ;

00511C93    8BBC24 90040000 MOV     EDI, DWORD PTR SS:[ESP+490] ;bizim girdiğimiz lisans ismi

00511C9A    74 24                     JE      SHORT INLAY.00511CC0    ;döngüden çıkıyor

00511C9C    8B1D 58405100      MOV     EBX, DWORD PTR DS:[<&KERNEL32.lstrcmpiA>] ;

00511CA2    8B2D 34405100      MOV     EBP, DWORD PTR DS:[<&KERNEL32.lstrlenA>] ;

00511CA8    56                          PUSH    ESI                                 ;sabit isim

00511CA9    57                          PUSH    EDI                                 ;bizim isim

00511CAA    FFD3                    CALL    NEAR EBX                       ;iki isim karşılaştırılıyor

00511CAC    85C0                     TEST    EAX, EAX                         ;aynılarsa eax 0 değerini alıyor

00511CAE    0F84 E3000000      JE      INLAY.00511D97                 ;ve serial alamıyorsunuz. Hatta kayıt defterine not bile yazılıyor

00511CB4    56                          PUSH    ESI                                 ;

00511CB5    FFD5                     CALL    NEAR EBP                      ;sabit ismin uzunluğu hesap ediliyor

00511CB7    8D7406 01              LEA     ESI, DWORD PTR DS:[ESI+EAX+1] ;bir sonraki isme geçiliyor

00511CBB    803E 00                 CMP     BYTE PTR DS:[ESI], 0      ; isimler bitti mi?

00511CBE   75 E8                     JNZ     SHORT INLAY.00511CA8   ;hayırsa döngü başına

00511CC0    8B8424 94040000 MOV     EAX, DWORD PTR SS:[ESP+494] ;buraya program akışı geldiyse isminiz arananlar liste-

                                                                                                   ;sinde yok demektir.

Kısa bir açıklama yapalım. Programcılar bazı isimlere lisans kodu vermek istememişler. Sizin girdiğiniz bu isimlerden mi diye kontrol ediyorlar. İsimler bana tanıdık gelmedi. Belki sizler bilirsiniz. Serial üretilmeyecek isimler şunlar.

NEILRUDNITSKI, CHATTERCENTIL, CHONGCHINGBAK, FRIENDSOFZEDTEC, MARIONNIEDRINGHAUS,

CRACKEDPROGRAM, PERCRACKS, KELLYKRONE. Bu isimler hakkında bilgisi olan varsa foruma yazarsa sevinirim.

Bizim ismimiz farklı olduğundan devam ediyoruz.

//---8-------8---------8----------8------------8------------8----------------8-----------------8-------------------------8

00511E43    E8 38FEFFFF     CALL    INLAY.00511C80

bu çağrıda bundan başka önemli bir şey yok. Onun için fazla dalmayın. Call dan sonraki kodları takip edelim.

00511E48    83C4 08        ADD     ESP, 8                       ;

00511E4B    85C0            TEST    EAX, EAX                   ; eax deki değer kontrol ediliyor. Hangi isimler vardı girilmemesi gereken

;eğer onlardan birisini girdiyseniz bu je komutu sizi dallandırmıyor ve program size hacker diyor. Bunu da registeriye(kayıt defterine)

;kayıt ediyor. Bundan sonra başka bir isimle doğru lisans kodunu girseniz de yanlış kod girdiniz mesajı ile karşılaşıyorsunuz. Tekrar ;eski haline getirmek için kayıt defterindeki satırı silin tam adresi ve silinecek kısmı da verelim

;Bilgisayarım\HKEY_LOCAL_MACHINE\Software\GameHouse\PuzzleInlay adresindeki

;RegFault    “OK” satırını silerseniz hacker olmaktan çıkarsınız.böylece isme karşılık gelen lisans kodu girdiğinizde oyun sizindir. ;yalnız hacker ismine lisans kodu üretiliyor. Ne kadar ilginç. Demek ki hackerları seviyorlar.

 

00511E4D    74 1D           JE      SHORT INLAY.00511E6C ; sorun yoksa sıçrama yapıyor.

00511E4F    8B8424 10010000 MOV     EAX, DWORD PTR SS:[ESP+110] ;

00511E56    68 B8425100 PUSH    INLAY.005142B8       ; ASCII "HACKER"

00511E5B    50                 PUSH    EAX                          ;

00511E5C    FF15 38405100 CALL    NEAR DWORD PTR DS:[<&KERNEL32.ls> ;

00511E62    5F                 POP     EDI                            ;

00511E63    5E                 POP     ESI                            ;

00511E64    5B                 POP     EBX                           ;

00511E65    81C4 00010000  ADD     ESP, 100               ;

00511E6B    C3                RETN                                     ;

00511E6C    8BC6            MOV     EAX, ESI                   ; evet burdan devam edelim. Biz lisans name den dolayı hesaplanan sayı

;(maviboynuz için 1924AE7h) eax e atılıyor

00511E6E    99                 CDQ                                      ;

00511E6F    F73D 08505100 IDIV    DWORD PTR DS:[515008] ;idiv bölme için kullanılır. Her zaman önündeki değer eax deki sayıyı

;böler. Bölümü eax’e kalanı da edx atar. 515008 adresine bakınca “d”görüyoruz. d->64h->100 onluk sistemde. Demekki 100 e bölü-

;yor.

00511E75    8B3D 60505100 MOV     EDI, DWORD PTR DS:[515060] ;bu adresin gösterdiği adreste 10 karakterden oluşan toplam

;100 tane anlamsız kelime var. Her 10 karakterin arasındada “00” karakteri ve bunların ilki ediye atılıyor.                            

00511E7B    55                 PUSH    EBP                         ;

00511E7C    8B2D 34405100 MOV     EBP, DWORD PTR DS:[<&KERNEL32.ls> ;

00511E82    85D2            TEST    EDX, EDX                   ;edx te 100 bölümden kalan vardı. Kalan 0 sa dallanma gerçekleşiyor.

00511E84    7E 0C           JLE     SHORT INLAY.00511E92 ;

00511E86    8BDA            MOV     EBX, EDX                  ;kalan 0 değilse kalan ebx e atılıyor

00511E88    57                 PUSH    EDI                           ;

00511E89    FFD5            CALL    NEAR EBP                ;eax e A yani 10 karakteri sayısı atılıyor. Anlamsız kelimeler 10 ;karakterdi.

00511E8B    4B                DEC     EBX                           ;ebx deki değer 1 azaltılıyor.

00511E8C    8D7C07 01    LEA     EDI, DWORD PTR DS:[EDI+EAX+1] ;bir sonraki 10 lu gruba geçiliyor.

00511E90  ^ 75 F6           JNZ     SHORT INLAY.00511E88 ; işlem ebx 0 olana kadar tekrar ediyor.

;anlamsız 10 ar karakterden oluşan ve aralarında bulunan “00” değerleri. Yani 11 karakter atlayarak bir sonrakine geçiliyor. 100 tane ;değer var tabloda. Sayıyı da 100 e bölmüştük. Demekki 100 e bölümünden kalanı buluyor ve kalanın sırasındaki 10 lu grubu alıyor.

;Tablo aşağıda 1 değer kalan 0 sa sonuncu değer kalan 99 olunca seçiliyor. maviboynuz için kalan 2Fh->47. sıradaki

;tabi saymaya 0 dan başlayacağız.

;FJHJMRTJEF.IDOPIUWGBI.QVTWHHIDJM.SCKAULGIWV.MSFDNIENKS.ZUKNCIWIRL.VKTCVPROFR.NNRLBKIFOR.

;AKBIVLAIAA.QESNBIUMPJ.TSMXXZMLBP.KCETQECACH.GOVMEEHGHJ.TEAAMJZAAM.QZTRGXOTQM.ITIVXYCZOW.

;UITOYQNIHT.LIHMWKXRXV.XXABYUNGOP.OGKLFVMZUS.MBQTLJLDLZ.JTBUYBRCHX.YDLQOHCOBO.YOMFAVPGVE.

;IUWHMXGKKX.QANKYKOJJN.XEELTOWQJC.JQZEDUDVEU.HUVVFXWSIK.QYQUUZKWOE.BPTBDLJXPV.YNSUGMCNQX.

;IQYNGICAVU.UDUOSMUKYM.UWIFRGQGHP.AJHEYMOLCC.XWPLCDGUCN.EEARIUSPQ.UDWJQLGMLX.QRGZSSZVWX.

;GTNVLZMVAA.AKVMSQPGGF.IDWYGTNFSP.VRIQMZEPQU.AINZPKGQCE.RRVJHFSBLS.PARGIFPVZL.CWKNWXGNUL.

;XVEVELCIYK.NUKVTMWCKB.MAVNEUDAJO.UCKUWZRFME.EKGYOUOTBF.ENEYSWMQKC.UGKEGVKBYE.FFXYQXLIMD.

;KOKNRRKXVQ.WFNUOLSZWF.EOPBYUFAGQ.KTZBSVGELC.YBGLXJLCYM.AYXNVGIPKL.ZPQNKPQKLQ.PRNQJEWHQL.

;KBZULXUJZP.AVQEFDFOVW.ANTBCAHTNS.SYTBMDODBI.LNWBIASDPV.XUYJQSPDYS.KYVNRJQMRY.WXGAKFRONF.

;IGSMZVERJQ.USLSJYICFD.TDDRKPNERN.ZVAOILWPET.WFXSRMVJFO.JEWXWYIBRU.ZUKFARIVPQ.VUIBPEOWOE.

;KYQNKWFQOH.LHOFXWLTBU.KLHYAGSQAQ.DMWQAWPMYP.QWYDZBLOND.LUCLFRBBAP.ANWFHSVTSI.PJAOUNGHDI.

;GJOGVPSJXJ.DCIBBUTXMU.FQELROMLDY.HJHQKMPSCV.EWRHKVKMBC.GEWHHWBLYA.YDTFWQIFRF.OYVNSNFDDF.

;HDOJYAJWGO.TRPZFSFGAM.GKTEKMQMCO.ANBOINKMRS.

;bu şifrenin bir parçası diye düşünüyoruz. Ve yanılıyoruz. Ama sonlara doğru yaklaştık. Bu 10 karakteri bir kenara yazalım.

00511E92    81FE A0860100 CMP     ESI, 186A0             ; lisans isminden dolayı hesaplanan sayıyı bu seferde başka bir sayı ile

;karşılaştırıyor. Hı 186a0h sayısı = 100000

00511E98    7C 10           JL      SHORT INLAY.00511EAA ;küçükse atla dediğine göre hesaplanan sayının 100000 den küçük ol-

;ması isteniyor. 100000 den küçük demek 5 basamaklı bir sayı demek. 10 da karakter var toplam 15 yapar. Bu lisans kodun uzun-

;luğuna eşit.

00511E9A    8D9B 00000000 LEA     EBX, DWORD PTR DS:[EBX] ;

00511EA0    D1FE            SAR     ESI, 1                        ;bu komut eax değerini 1 defa sağa kaydırıyor.yani 2’ye bölüyor.

00511EA2    81FE A0860100 CMP     ESI, 186A0            ;şimdi beş basamaklı oldu mu?

00511EA8  ^ 7D F6           JGE     SHORT INLAY.00511EA0 ;olmadıysa tekrar 2 ye böl. 5 basamaklı olana kadar.

; 1924AE7h sayısını 2 ye böle böle onluk sistemde 51493 kalıyor. 5 basamaklı hale 8 defa bölerek geldi.

00511EAA    57                       PUSH    EDI                            ;10 karakterlik anlamsız kelime grubu tablodan alınan

00511EAB    8D4C24 14             LEA     ECX, DWORD PTR SS:[ESP+14] ;MAVIBOYNUZ

00511EAF    51                       PUSH    ECX

00511EB0    FF15 38405100       CALL    NEAR DWORD PTR DS:[<&KERNEL32.ls> ;MAVIBOYNUZ’un bulunduğu adrese 10

;karakterlik kelime grubu kopyalanıyor

00511EB6    68 F0425100          PUSH    INLAY.005142F0                   ; ASCII "%05d" ; sayı için 5 yer açılıyor. d onluk sistemde

00511EBB    8D5424 14             LEA     EDX, DWORD PTR SS:[ESP+14]

00511EBF    52                         PUSH    EDX

00511EC0    FF15 54405100       CALL    NEAR DWORD PTR DS:[<&KERNEL32.ls> ;kelimenin yanına %5d yazılıyor. Yani buraya

;5 basamaklı sayı gelecek. Eğer sayı 3 basamaklı ise sola 0 konularak 5 basamağa çıkartılacak.

00511EC6    8BBC24 14010000 MOV     EDI, DWORD PTR SS:[ESP+114]

00511ECD    56                         PUSH    ESI

00511ECE    8D4424 14             LEA     EAX, DWORD PTR SS:[ESP+14]

00511ED2    50                          PUSH    EAX

00511ED3    57                          PUSH    EDI

00511ED4    FF15 D4405100      CALL    NEAR DWORD PTR DS:[<&USER32.wspr> ; iki değeri birleştiriyor.

;yani tablodan alınan 10 karakter ile lisans isminden oluşan ve 5 basamağa düşürülen sayıyı.

;maviboynuz için CWKNWXGNUL51493 evet bu lisans kodumuz mu acaba? Üzgünüm değil Ama az kaldı tek bir aşama kaldı.

00511EDA    83C4 0C                ADD     ESP, 0C

00511EDD    68 30505100          PUSH    INLAY.00515030                   ; ASCII ;"ZXHYGKLQ9867WEPRCDSANMJBVFTU5342"

;evet son tablomuz da bu. Az önce oluşan 15 karakter aşağıdaki döngü ve bu tablo ile lisans kod haline gelecek. Mantığı çok

;basit. Yine bölme ve kalana göre sıra. Kaça bölecek tahmin edin. Tabloda kaç karakter ve 32. 0 dan 31 e kadar. Hex olarak da 20

;ayrıca lisans kod bu 32 karakterden oluşuyor. Bazı harfler ve rakamlar yok.

00511EE2    FFD5                   CALL    NEAR EBP;eax’e 20h değeri yani 32

00511EE4    8BF0                     MOV     ESI, EAX        ;esi de 32 var

00511EE6    803F 00                 CMP     BYTE PTR DS:[EDI], 0 ;edi de CWKNWXGNUL51493 var. Şimdi tek tek gerçek lisans

;koda dönüşecek

00511EE9    5D                       POP     EBP

00511EEA    74 19                     JE      SHORT INLAY.00511F05;sona geldiyse git.

00511EEC    8BCF                    MOV     ECX, EDI;dönüşecek karakter ecx’e alınıyor

00511EEE    8BFF                     MOV     EDI, EDI

00511EF0    0FBE01                  MOVSX   EAX, BYTE PTR DS:[ECX];dönüşecek karakter eax de

00511EF3    99                          CDQ

00511EF4    F7FE                     IDIV    ESI;karakter 20h’a bölünüyor. Bölüm eax de ama önemli değil önemli olan edx deki kalan

00511EF6    41                          INC     ECX;bir sonraki karaktere geç

00511EF7    8A92 30505100  MOV     DL, BYTE PTR DS:[EDX+515030];yeni tablonun başından kalan kadar sayılıyor. Ve bulunan

;yeni karakter dl ye atılıyor. C(43h-67onluk) mod 20h(32 onluk) = 3 yani tabloda 0,1,2,3. karakter Y evet gerçek lisans kodunun

;ilk karakteri.

00511EFD    8851 FF                 MOV     BYTE PTR DS:[ECX-1], DL;edi de C nin üzerine yazılıyor.

00511F00    8039 00                  CMP     BYTE PTR DS:[ECX], 0 ;sona geldik mi?

00511F03  ^ 75 EB                     JNZ     SHORT INLAY.00511EF0; gelmediysek bir sonraki karakter

; yeni tablodaki yerler bu şekilde bulunuyor ve lisans kodumuz hazır hale geliyor.

License name : maviboynuz

License code :  YB7PBVQPMWMDNFA

 

Kod hesaplandığına göre bunu bir de karşılaştırmak gerekecek bakalım o nerede ve nasıl yapılıyor.

00511F05    8B9424 18010000 MOV     EDX, DWORD PTR SS:[ESP+118]; bizim lisans kod edx de

00511F0C    8BF7                      MOV     ESI, EDI                                 ;gerçek lisans kod esi de

00511F0E    8BFF                     MOV     EDI, EDI

00511F10    8A0E                      MOV     CL, BYTE PTR DS:[ESI]          ;karşılaştırma döngüsünün başı karşılaştırma tek tek yapı-

;lıyor ve ilk hatada döngüden çıkılıyor. İlk hatada 00511F47 adresine 00 karakteri konuluyor. Burası lisans kodun ilk karakteri

00511F12    84C9                      TEST    CL, CL

00511F14    75 05                      JNZ     SHORT INLAY.00511F1B

00511F16    803A 00                  CMP     BYTE PTR DS:[EDX], 0

00511F19    74 2F                      JE      SHORT INLAY.00511F4A

00511F1B    33C0                      XOR     EAX, EAX

00511F1D    8A02                    MOV     AL, BYTE PTR DS:[EDX]

00511F1F    3C 30                     CMP     AL, 30

00511F21    7C 1D                     JL      SHORT INLAY.00511F40

00511F23    3C 7A                     CMP     AL, 7A

00511F25    7F 19                      JG      SHORT INLAY.00511F40

00511F27    50                          PUSH    EAX

00511F28    E8 33F1FFFF          CALL    INLAY.00511060

00511F2D    51                          PUSH    ECX

00511F2E    8AD8                     MOV     BL, AL

00511F30    E8 2BF1FFFF         CALL    INLAY.00511060

00511F35    83C4 08                  ADD     ESP, 8

00511F38    3AC3                    CMP     AL, BL

00511F3A    75 0B                     JNZ     SHORT INLAY.00511F47

00511F3C    42                          INC     EDX

00511F3D    46                          INC     ESI

00511F3E  ^ EB D0                 JMP     SHORT INLAY.00511F10

00511F40    84C0       TEST    AL, AL

00511F42    74 03       JE      SHORT INLAY.00511F47

00511F44    42            INC     EDX

00511F45  ^ EB C9    JMP     SHORT INLAY.00511F10

00511F47    C607 00  MOV     BYTE PTR DS:[EDI], 0 ; yanlış karşılaştırma sonucunda program akışı buraya geliyor.

00511F4A    5F           POP     EDI ; lisans kodunuz doğruysa döngü bitimi akış buraya geliyor.

00511F4B    5E           POP     ESI  ; bu komutlar registerların kullanımlarının sona erdiğini ve eski değerlerini

00511F4C    5B          POP     EBX ;almalarını söyler

00511F4D    81C4 00010000   ADD     ESP, 100

00511F53    C3          RETN ;call çağrısı sona eriyor. Çok şükür.

 

 

///-----------------------------------------------------------------------------------------------------------------------------------------------      

 

005125F7    8A8424 D0000000         MOV     AL, BYTE PTR SS:[ESP+D0]        ;karşılaştır sonucu hata varsa al de 00 olacak

;ve program register olmayacak. Karşılaştırma doğruysa al de lisans kodunun son karakteri bulunacak.

005125FE    83C4 10                       ADD     ESP, 10                                        ;

00512601    84C0                             TEST    AL, AL                                          ;

00512603    74 39                            JE      SHORT INLAY.0051263E                 ; hata mesajına gidiyor. Anlayacağınız burayı jne

                                                                                                                      ; yaparsanız sakın doğru lisans kodunu girmeyin

                                                                                                                      ; yalnız program lisans ismini ve kodunu kayıt

                                                                                                                      ; düzenleyiciye kaydediyor ve program her çalıştı-

                                                                                                                      ;ğında kontrol ediyor. Oyunu her açtığınızda yanlış

                                                                                                                      ;kod girmeniz gerekecek anlayacağınız.

00512605    8D4424 40                     LEA     EAX, DWORD PTR SS:[ESP+40]    ;

00512609    50                                 PUSH    EAX                                            ;

0051260A    8D8C24 C4000000         LEA     ECX, DWORD PTR SS:[ESP+C4]   ;

00512611    51                                 PUSH    ECX                                            ;

00512612    E8 09F2FFFF                CALL    INLAY.00511820                           ;

00512617    83C4 08                ADD     ESP, 8                                                       ;registeriye kayıt yapılıyor.

0051261A    85C0                            TEST    EAX, EAX                                     ;

0051261C    74 20                            JE      SHORT INLAY.0051263E                 ; hata mesajına gidiyor. Hacker iseniz doğru ;serialı girseniz bile program sizi hata mesajına gönderiyor. Bundan daha önce bahsetmiştim. Normalde burayı değiştirmeniz

;gerekmiyor.

0051261E    68 EB030000                PUSH    3EB                                            ;

00512623    56                                 PUSH    ESI                                             ;

00512624    E8 47FDFFFF               CALL    INLAY.00512370                           ;

00512629    83C4 08                        ADD     ESP, 8                                         ;

0051262C    5F                                POP     EDI                                              ;

0051262D    5E                                POP     ESI                                              ;

0051262E    5D                                POP     EBP                                             ;

0051262F    B8 01000000                 MOV     EAX, 1                                         ;

00512634    5B                                POP     EBX                                             ;

00512635    81C4 B0090000             ADD     ESP, 9B0                                     ;

0051263B    C2 1000                        RETN    10                                                ;oyuna gider bir analiz de burada biter.

0051263E    A1 D45A5100                MOV     EAX, DWORD PTR DS:[515AD4]   ; hata mesajı hazırlıkları başlıyor. Buraya program

00512643    68 00040000                  PUSH    400                                             ; akışının gelmemesi gerekiyor.

00512648    8D9424 C4010000          LEA     EDX, DWORD PTR SS:[ESP+1C4] ;

0051264F    52                                PUSH    EDX                                            ;

00512650    6A 0A                           PUSH    0A                                               ;

00512652    50                                 PUSH    EAX                                            ;

00512653    FF15 D8405100             CALL    NEAR DWORD PTR DS:[<&USER32.LoadStringA>]  ;     

00512659    6A 30                            PUSH    30                                                                            ;     

0051265B    FF15 18415100             CALL    NEAR DWORD PTR DS:[<&USER32.MessageBeep>];

kayıt düzenleyicisindeki görüntüyü de verelim.

Registration ve RegName satırlarını silerek istediğiniz kadar deneme yapabilirsiniz. Biraz uzun bir yazı oldu okumaktan sıkılanlar için toparlanmış keygen algoritmasını, c de yazılmış kaynak kodunu ve borland c++ builder ile derlenmiş exe dosyasını verelim. onlar da burada.

Bu tutorialı yazmamdaki sebep birşeyler öğrenmekti. Öyle de oldu. Algoritmayı çözmüştüm ancak bu kadar ayrıntılı değil. Unutmayın en iyi öğrenme öğretirken yapılan öğrenmedir. Başka bir yazıda görüşmek üzere hayırlı akşamlar.

Key algoritması

 

1.lisans isminden ingiliz alfabesinin harfleri hariç diğer karakterleri çıkart.

2.kalan kısımla sabit isimleri karşılaştır. Eğer onlardan biriyse hiç serial üretme

3.isimle bir sayı hesapla

4.hesaplanan sayıyı 100 e böl ve kalanı bul

5.tablodan kalan sırasındaki 10 karakteri al

6.hesaplanan sayıyı sürekli 2’ye bölerek 5 basamaklı hale getir

7.tablodan aldığın 10 karakterle 5 basamaklı sayıyı birleştir

8.15 karakterden oluşan yeni değerini 1. karakterden başlamak üzere 32 ye böl

9.kalan yeni bir tablodaki gerçek lisans kodunun sıra numarasını gösteriyor.

10.yeni tablodan değeri al ve ekranda göster

11.oynu oynamaya başla eğer halen isteğin varsa.

 Son Notlar

program kodları parayı hak ediyor ama fazlasını değil. yine de bir programdan para kazanıyorsanız, programı satın alınız. Bu tutorial yalnızca bilgi vermek maksadıyla yazılmıştır. kötü bir amacımız yok yani. farklı bir amaçla kullanılacak olursa sorumluluk kabul edilmeyecektir. Lisansız kullanımdan tutoriali hazırlayanlar sorumlu değildir. insanlar açlıktan ölürken bir oyuna da bu kadar para verilmez ki. Belki de programları daha çok insan tarafından kullanılsın diye korumaları bu kadar basit. Neyse Formda bilgi paylaşan herkese teşekkürler. 

E-Mail: maviboynuz@mynet.com