Natural

natural

Breaking News

Keygenme 3



Keygen Nasıl yazılır serimizin üçüncü yazısıyla karşınızdayız. Yazar 3ncü crackme olsa bile işimizi çok zorlaştırmamış. Sadece serial algoritmasında biraz oynamış, ayrıca ismin en çok 8 karakter olması ile ilgili bir kod koymuş o kadar. Şimdi kodları inceleyelim:.
Programımızı PEiD ile kontrol ediyoruz, herhangi bir sıkıştırma yok. Kripto analizi de yapıyoruz(PEiD'in pluginlerinden), sorun yok. Devam edelim. Programımızı çalıştıralım. İsim ve Serial bölümü, güzel. Şimdi birşeyler yazıp tamam diyelim. herhangi bir mesaj kutusu ya da hata vermedi. Aklımıza yazalım bunu. Şimdi programımızı Olly ile açalım. Kod(CODE) ekranına sağ tıklayıp "Search For > All referenced text strings" tıklayalım. Açılan pencerede "ASCII "You did it! Now make a keygen =)" " yazan yere çift tıklayın. Biraz daha yukarı çıkın ve aşağıdaki kodlarda olduğumuzu göreceksiniz. Kod satırlarının yanındaki yorum satırlarını okuyunuz:
4011D3|.PUSH 19                                 ; /Count = 19 (25.)
4011D5|.PUSH crackme_.00403096                  ; |Buffer = crackme_.00403096
4011DA|.PUSH 66                                 ; |ControlID = 66 (102.)
4011DC|.PUSH [ARG.1]                            ; |hWnd = 002204F4 ('Crackme - not cracked yet',class='FHCF_Crackme')
4011DF|.CALL <JMP.&USER32.GetDlgItemTextA>      ; \GetDlgItemTextA
4011E4|.PUSH 1E                                 ; /Count = 1E (30.)
4011E6|.PUSH crackme_.00403078                  ; |Buffer = crackme_.00403078
4011EB|.PUSH 65                                 ; |ControlID = 65 (101.)
4011ED|.PUSH [ARG.1]                            ; |hWnd = 002204F4 ('Crackme - not cracked yet',class='FHCF_Crackme')
4011F0|.CALL <JMP.&USER32.GetDlgItemTextA>      ; \GetDlgItemTextA
4011F5|.TEST EAX,EAX    ;isim girildimi?
4011F7|.JE SHORT crackme_.00401249  ;girlmediyse 401249 adresine dallan
4011F9|.CMP EAX,8    ;ismin uzunluğunu 8 ile karşılaştır
4011FC|.JG SHORT crackme_.00401249  ;8'den büyükse hata değilse devam et
4011FE|.MOV ECX,EAX    ;ecx=eax
401200|.MOV DWORD PTR DS:[4030C0],ECX  ;4030C0 adresine ecx değeri atılıyor
401206|.PUSH EDI
401207|.PUSH crackme_.00403051                  ; /Arg2 = 00403051
40120C|.PUSH crackme_.00403061                  ; |Arg1 = 00403061
401211|.CALL crackme_.00401266                  ; \crackme_.00401266;bu call içinde algoritmamız hesaplanıyor F7 ile dallanalım

DALLANDIĞIMIZ ADRES (401266) burası:

401266/$ PUSH EBP
401267|. MOV EBP,ESP
401269|. ADD ESP,-4
40126C|. XOR ECX,ECX    ;ecx=0
40126E|. MOV EBX,11111    ;ebx=11111h(ollyde gördüğünüz 16lık bir değerdir 10luk değil)
401273|> MOVSX EAX,BYTE PTR DS:[ECX+403078] ;eax'e ismin her bir hanesinin hex değeri sırayla atılıyor
40127A|. ADD EBX,EAX    ;bu değerler ebx'te toplanıyor
40127C|. SUB BH,17    ;ebx'in bh kısmından 17h çıkartılıyor
40127F|. INC ECX    ;ecx bir artıyor
401280|. CMP DWORD PTR DS:[4030C0],ECX  ;ecx ve ismin uzunluğu karşılaştırılıyor
401286|.^JNZ SHORT crackme_.00401273  ;eşit değilse dallan eşitse bitir devam et
401288|. IMUL EBX,EBX,71   ;ebx=ebx*ebx*71h
      ;bu son işlemden sonra oluşan değer bizim serial!
40128B|. LEAVE
40128C\. RETN 8
Burada bir konuya değinmek istiyorum. 4 genel maksat yazmacı olan AX,BX,CX,DX yazmaçları (ki bunlar 16bitliktir8'er bitlik 2 parçaya ayrılmıştır. AX için bu AH ve AL' dir. Bunu biraz daha açalım isterseniz. Eğer AX= 0011000000111001b, ise ozaman AH=00110000b ve AL=00111001b 'dir. Ayrıca H(high) L ise (low) anlamındadır. Bu döngüde biter bitmez kaldığımız yerden devam ediyoruz. Ebx yazmacınca gerçek serialimiz var.
401216|.PUSH EBX
401217|.PUSH crackme_.00403096                  ;  ASCII "112233"
40121C|.CALL crackme_.0040131C
401221|.POP EBX                                 ;  0013FC78
401222|.POP EDI                                 ;  0013FC78
401223|.CMP EAX,EBX    ; karşılaştırma burada yapılıyor
401225|.JNZ SHORT crackme_.00401249
401227|.PUSH 40                                 ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
401229|.PUSH crackme_.0040304D                  ; |Title = "wee"
40122E|.PUSH crackme_.00403019                  ; |Text = "You did it! Now make a keygen =)"
401233|.PUSH 0                                  ; |hOwner = NULL
401235|.CALL <JMP.&USER32.MessageBoxA>          ; \MessageBoxA
40123A|.PUSH crackme_.0040303A                  ; /Text = "Crackme - cracked!"
40123F|.PUSH [ARG.1]                            ; |hWnd = 002204F4 ('Crackme - not cracked yet',class='FHCF_Crackme')
401242|.CALL <JMP.&USER32.SetWindowTextA>       ; \SetWindowTextA
401211 adresindeki CALL'un dallandığı yer bizim serialimizin hesaplandığı yer. Yukarıda burayı incelemiştik şimdi oradaki kodları keygenimiz için düzenleyelim ve RadASM ile keygeni yazalım:
SerialUret PROC uses ebx edi esi,hWin:DWORD

;GetDlgItemText ile girilen isim ve isim uzunluğunu elde ederiz
invoke GetDlgItemText,hWin,edtAD,ADDR isim,30h
mov uznIsim,eax     ;isim uzunluğu bir değişkende
test eax,eax     ;ismin girilmiş mi?
jz _isimyok     ;girilmemişse ise hata ver yoksa devam
cmp eax,8     ;isim uzunluğunu 8 ile kontrol et
jg _isimhata     ;büyükse hata ver

xor ebx,ebx     ;ebx=ebx XOR ebx =0
XOR ECX,ECX     ;ecx = 0
MOV EBX,11111h     ;ebx = 11111h
_dongu1:
MOVSX EAX,BYTE PTR DS:[ECX+isim]  ;ismin ilk baytının hex değerini eax'e at
ADD EBX,EAX     ;ebx = ebx + eax
SUB BH,17h     ;bh = bh - 17h
INC ECX      ;ecx'i bir artır
CMP DWORD PTR DS:[uznIsim],ECX    ;ismin uzunluğu ile ecx'i karşılaştır
JNZ _dongu1
IMUL EBX,EBX,71h    ;ebx= ebx*ebx*71h =o da bizim serial oluyo zaten
mov[serial],ebx 
invoke wsprintf,addr serial,addr format,serial
invoke SetDlgItemText,hWin,edtSerial,ADDR serial
 
_Son:
xor eax,eax
ret

_isimyok:
invoke SetDlgItemText,hWin,edtSerial,ADDR isimHata
jmp _Son
_isimhata:
invoke SetDlgItemText,hWin,edtSerial,ADDR isimHata
jmp _Son

SerialUret endp
Keygeni üretme algoritmasının hazır halini yukarıda verdim. Kodların hazır halini BURADAN indirebilirsiniz.
sorularımı cevapsız bırakmayan herkese
sonsuz TEŞEKKÜRLER ........
Öldürmeyen Her Darbe Güce Güç Katar ::: BlueDeviL // SCT
Bu programı kullanarak para kazanıyorsanız lütfen satın alın. Bu yazının yazılma amacı program yazanlara programlarını daha iyi korumaları konusunda yol göstermektir. Lisanssız kullanımda Dokümanı hazırlayan sorumlu değildir.
Diyeceğim şudur ki: Emek verilip de yapılmış bir şeyi çalma, onu satın al.

Blue DeviL
E-Mail: bluedevil@sctzine.com
ICQ: 82503282

Hiç yorum yok