Natural

natural

Breaking News

Keygenme 7



Yazı dizimizin 7nci serisinde yine bir isme göre hesaplanan crackme ile karşınızdayız. Farkındayım bazılarına öff geliyor. Ancak bundan sonraki 2 yazıda altın vuruş yapacağız! O sebeple sabırlı olalım. Okuduğumuz her yazı yazdığımız her asm kodu bizim için tecrübe olacak. Uzatmadan lafı devam edelim.
Programı Ollydebugger ile açalım CTRL+N yapıp Names penceresini görelim. GetDlgItemText apisine sağ tıklayarak "Set breakpoint on every reference" seçelim. Programı çalıştırıp isim serial girin. "Check Serial" tuşuna basınca crackme break pointte duracak. Bizde incelemeye başlıyacağız.
4011D7|.PUSH 19                                 ; /Count = 19 (25.)
4011D9|.PUSH crackme_.0040309A                  ; |Buffer = crackme_.0040309A
4011DE|.PUSH 66                                 ; |ControlID = 66 (102.)
4011E0|.PUSH [ARG.1]                            ; |hWnd = 000E06F8 ('Crackme - not cracked yet',class='FHCF_Crackme')
4011E3|.CALL <JMP.&USER32.GetDlgItemTextA>      ; \GetDlgItemTextA--->girdiğimiz serialin alındığı yer
4011E8|.PUSH 1E                                 ; /Count = 1E (30.)
4011EA|.PUSH crackme_.0040307C                  ; |Buffer = crackme_.0040307C
4011EF|.PUSH 65                                 ; |ControlID = 65 (101.)
4011F1|.PUSH [ARG.1]                            ; |hWnd = 000E06F8 ('Crackme - not cracked yet',class='FHCF_Crackme')
4011F4|.CALL <JMP.&USER32.GetDlgItemTextA>      ; \GetDlgItemTextA-->girdiğimiz ismin alındığı ger
4011F9|.CMP EAX,6    ;ismin uzunluğu burada kontrol ediliyor
4011FC|.JB SHORT crackme_.00401251  ;eğer 6dan küçükse dallan yoksa devam
4011FE|.MOV ECX,EAX    ;ismin uzunluğu ecx'e yazılıyor
401200|.MOV EBX,0F    ;ebx=0Fh
401205|.SUB ECX,4    ;ecx=ecx-4
401208|.MOV DWORD PTR DS:[4030C4],ECX           ;ecx değeri 4030C4 adresine taşınıyor
40120E|.PUSH EDI
40120F|.PUSH crackme_.00403051                  ; /Arg2 = 00403051
401214|.PUSH crackme_.00403061                  ; |Arg1 = 00403061
401219|.CALL crackme_.0040126E                  ; \crackme_.0040126E--> hesaplama yapılan call F7 ile dalalım
Yukarıdaki call 40126E adresine dallanıyor:
40126E/$ PUSH EBP
40126F|. MOV EBP,ESP
401271|. ADD ESP,-4
401274|. XOR EDX,EDX    ;yazmaçlar sıfırlanıyor
401276|. XOR EAX,EAX
401278|. XOR ECX,ECX
40127A|. XOR ESI,ESI                            ;  crackme_.00401180
40127C|. XOR EDI,EDI
40127E|> MOVSX EAX,BYTE PTR DS:[ECX+403080] ;girdiğimiz ismin 5nci hanesinden itibaren her karakterin
      ;hex değeri eax'e atılıyor.
401285|. IMUL EBX,EAX    ;ebx=ebx*eax
401288|. INC ECX    ;ecx değerini bir artır
401289|. CMP DWORD PTR DS:[4030C4],ECX  ;4030C4 adresindeki değer ile ecx'i karşılaştır
40128F|.^JNZ SHORT crackme_.0040127E  ;eşit değillerse dallan
401291|. LEA ECX,DWORD PTR DS:[EBX*2+1337] ;ecx=(ebx*2)+1337h
401298|. XOR CX,CX    ;cx=0
40129B|. LEA ECX,DWORD PTR DS:[ECX+EBX*4] ;ecx=ecx+(ebx*4)
40129E|. XOR EBX,ECX    ;ebx=ebx XOR ecx = gerçek serial
4012A0|. LEAVE
4012A1\. RETN 8
Yukarıda görüldüğü gibi ismimizi baz alarak elde ettiği bir sayı ile yapılan aritmetik ve mantıksal işlemlerden sonra bir serial üretiliyor. Aşağıda da göreceksiniz bu serial ile bizim girdiğimiz serial karşılaştırılıyor.
40121E|.PUSH EBX
40121F|.PUSH crackme_.0040309A                  ;  ASCII "11223344"->girdiğimiz serial
401224|.CALL crackme_.00401330
401229|.POP EBX                                 ;  0013FC78
40122A|.POP EDI                                 ;  0013FC78
40122B|.CMP EAX,EBX    ;iyi ve kötü serialler burada karşılaştırılıyor
40122D|.JNZ SHORT crackme_.00401251  ;dallanan jump komutu
40122F|.PUSH 40                                 ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
401231|.PUSH crackme_.0040304D                  ; |Title = "wee"
401236|.PUSH crackme_.00403019                  ; |Text = "You did it! Now make a keygen =)"
40123B|.PUSH 0                                  ; |hOwner = NULL
40123D|.CALL <JMP.&USER32.MessageBoxA>          ; \MessageBoxA
401242|.PUSH crackme_.0040303A                  ; /Text = "Crackme - cracked!"
401247|.PUSH [ARG.1]                            ; |hWnd = 000E06F8 ('Crackme - not cracked yet',class='FHCF_Crackme')
40124A|.CALL <JMP.&USER32.SetWindowTextA>       ; \SetWindowTextA
Keygeni yazarken ollyden aldığınız kodlardaki değerlerin hexadesimal yani 16lık olduğunu unutmayın. Şimdi aşağıda yukarda serial algoritmasının keygene dönüştürdüğümüz halini inceleyin:
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
cmp eax,6     ;ismin uzunluğunu 6 ile karşılaştır
jb _isimhata     ;eğer 6dan küçükse hata ver yoksa devam
mov ecx,eax     ;isin uzunluğu ecx'e atılıyor
mov ebx,0Fh     ;ebx=0Fh
sub ecx,4     ;ismin uzunluğundan 4 çıkart
mov uznIsim,ecx     ;uznIsim değişkenine ecx değeri yazdır


xor edx,edx     ;edx=0
xor eax,eax     ;eax=0
xor ecx,ecx     ;ecx=0
xor esi,esi     ;esi=0
xor edi,edi     ;edi=0
mov edx,offset isim    ;edx=ismimizin adresi
_dongu1:
MOVSX EAX,BYTE PTR DS:[4+edx+ecx]  ;ismin 5nci hanesinden itibaren 
      ;bir karakter alınıp hex değeri eax'e yazılır
IMUL EBX,EAX     ;ebx=ebx*eax
INC ECX      ;ecx değerini 1 artır
CMP DWORD PTR DS:[uznIsim],ECX   ;ecx ve uznIsim değişkenini karşılaştır
JNZ _dongu1     ;eşit değilse dallan yoksa devam
LEA ECX,DWORD PTR DS:[EBX*2+1337h]  ;ecx=(ebx*2)+1337h
XOR CX,CX     ;cx=0
LEA ECX,DWORD PTR DS:[ECX+EBX*4]  ;ecx=ecx+(ebx*4)
XOR EBX,ECX     ;ebx=ebx XOR ecx = gerçek serial
mov [serial],ebx
invoke wsprintf,addr serial,addr format,serial
invoke SetDlgItemText,hWin,edtSerial,ADDR serial
 
_Son:
xor eax,eax
ret

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

SerialUret endp
Türk Ters Mühendisliğine gönül vermiş
zaman harcamış 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 şudurki: Emek verilipde yapılmış bir şeyi çalma, onu satın al.

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

Hiç yorum yok