Natural

natural

Breaking News

Keygenme 8



Önceki örneklere nazaran bir farklı crackme daha. Bunu beğendim. Çünkü bu crackme'yi gerçekren reverse etmemiz gerekecek. Öncekilerde serial hesaplanıp ortaya çıkıp bizimkiyle kontrol ediliyordu. Ancak burada gerçek serial algoritmaya girmiyorsa hata oluyor. Bu sebeple crackme'deki serial kontrol algoritmasının tersine çevireceğiz ki gerçek olan tek seriali bulalım.
Crackme'yi olly ile yükleyin. CTRL + N yapın. Gelen Pencerede programın dallandığı APIleri görüyosunuz. Daha doğrusu windowsdali DLL(dinamik link kütüphanelerinden)den çağırdığı APIleri görüyorsunuz. Bize lazım Olan "GetDlgItemText" APIsi onu bulup sağ tıklayın ve "Set Breakpoint on every reference" seçeneğini seçin. Olly menüsünde B işareti breakpointleri gösterir. Ona tıklarsanız programın breakpointleri koyup koymadığını hangi adreslere koyduğunu görürsünüz. neyse lafı uzattık. Şimdi F9 ile çalıştıralım crackme açılınca isim seriali girelim "check" diyince olly hoop diyecek ve duracağız:
4011D3|.PUSH 19                                 ; /Count = 19 (25.)
4011D5|.PUSH crackme_.00403082                  ; |Buffer = crackme_.00403082
4011DA|.PUSH 66                                 ; |ControlID = 66 (102.)
4011DC|.PUSH [ARG.1]                            ; |hWnd = 000C0764 ('Crackme - not cracked yet',class='FHCF_Crackme')
4011DF|.CALL <JMP.&USER32.GetDlgItemTextA>      ; \GetDlgItemTextA---> serialimiz burada alınıyor (breakpoint buraya konulmuş)
4011E4|.CMP EAX,8    ;serialin uzunluğu 8 ile karşılaştırılıyor
4011E7|.JNZ SHORT crackme_.0040124A  ;8 den farklı ise dalllan yoksa devam et
4011E9|.PUSH 1E                                 ; /Count = 1E (30.)
4011EB|.PUSH crackme_.00403064                  ; |Buffer = crackme_.00403064
4011F0|.PUSH 65                                 ; |ControlID = 65 (101.)
4011F2|.PUSH [ARG.1]                            ; |hWnd = 000C0764 ('Crackme - not cracked yet',class='FHCF_Crackme')
4011F5|.CALL <JMP.&USER32.GetDlgItemTextA>      ; \GetDlgItemTextA---->ismimiz bu api ile alınıyor(diğer breakpoint buraya konulmuş)
4011FA|.TEST EAX,EAX    ;isim var mı yokmu
4011FC|.JE SHORT crackme_.0040124A  ;yoksa dallan 
4011FE|.PUSH EDI
4011FF|.PUSH crackme_.0040303F                  ; /Arg2 = 0040303F
401204|.PUSH crackme_.0040304F                  ; |Arg1 = 0040304F
401209|.CALL crackme_.00401267                  ; \crackme_.00401267
40120E|.PUSH EBX
40120F|.PUSH crackme_.00403082
401214|.CALL crackme_.00401330
401219|.CALL crackme_.00401271   ;hesaplamamın yapıldığı call buraya F7 ile dalıyoruz
40121E|.POP EBX
40121F|.POP EDI
401220|.CMP EDX,91919191
401226|.JNZ SHORT crackme_.0040124A
401228|.PUSH 40                                 ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
40122A|.PUSH crackme_.0040303B                  ; |Title = "wee"
40122F|.PUSH crackme_.00403019                  ; |Text = "You did it! =)"
401234|.PUSH 0                                  ; |hOwner = NULL
401236|.CALL <JMP.&USER32.MessageBoxA>          ; \MessageBoxA
40123B|.PUSH crackme_.00403028                  ; /Text = "Crackme - cracked!"
401240|.PUSH [ARG.1]                            ; |hWnd = 000C0764 ('Crackme - not cracked yet',class='FHCF_Crackme')
401243|.CALL <JMP.&USER32.SetWindowTextA>       ; \SetWindowTextA
Aşağıda gerçek serial hesaplanmıyor arkadaşlar eğer sizde olly ile tek tek incelerseniz göreceksiniz. Burada girilen seriali belli komutlar ile test ediyor. Eğer istenen değerler ile bir doğruluk varsa hataya atlama yapılmıyor ve devam ediyor. Şimdi kodları inceleyelim:
401271/$MOV CL,0FD    ;CL=0FDh
401273|.XOR EBX,EBX    ;ebx=0
401275|.MOV BX,AX    ;bx=ax-> serialin en sağ 4baytı
401278|.AND EAX,FFFF0000   ;seriali FFFF0000 ile AND işlemi yap
40127D|.ROR EAX,10    ;eax=eax ROR 10
401280|.ADD BX,0FCDE    ;bx=bx + 0FCDEh
401285|.ROR AX,CL    ;AX=AX ROR CL(0FDh)
401288|.CMP AX,1337    ;burada ax=1337 olmalı
40128C|.JNZ SHORT crackme_.004012A2
40128E|.ROL BX,CL    ;BX=BX ROL CL(0FDh)
401291|.CMP BX,9292    ;burada bx 9292h olmalı
401296|.JNZ SHORT crackme_.004012A2
401298|.MOV EDX,91919191   ;edx=91919191h eğer doğru serial grildiyse
      ;buraya kadar devam ediyor ve edx'e bu değer atanıyor
      ;sonrada mesajdan önce bununla karşılaştırma yapılıyor
40129D|.SUB EAX,3897    ;eax=eax-3897h bunun neden yaptığını anlamadım
Sanırım keygeni nasıl yazmamız gerektiğini biraz detaylı anlatmalıyım. Yukarıdaki döngüyü olly ile incelediğinizde herhangi bir serialin hesaplanmadığını anlamış olmalısınız. Anlamadıysanız, bilgisayarı kapatıp televizyonu açın. Anladıysanız Ters mühendislik şimdi başlıyor, çünkü yukarıdaki kodu tersten çalıştırmazsak gerçek seriali bulamayız, şimdi inceleyelim:
SerialUret PROC uses ebx edi esi,hWin:DWORD;keygenimiz açılır açılmaz bu işlemi çalıştırıp
;bize gerçek seriali verecek

xor eax,eax  ;eax=0
xor ecx,ecx  ;ecx=0
xor ebx,ebx  ;ebx=0
mov cl,0FDh  ;CL=0FDh->CL değeri döngü boyunca değişmiyor 
mov bx,9292h  ;BX=9292h-&en son işlem bx mutlaka 9292h olmalı
ror bx,cl  ;BX=BX ROR CL-> ROL işleminin tersi
mov ax,1337h  ;AX=1337h-> AX'de mutlaka 1337h olmalı
rol ax,cl  ;AX=AX ROL CL->ROR'un terside ROL
sub bx,0FCDEh  ;BX=BX-0FCDEh->toplamanın tersi çıkartma ilkokul matematiği :D
rol eax,10h  ;EAX=EAX ROL 10h->bununla axte yazılı olan değeri eax'in en soluna yazıp ax'i boş bırakıyoruz
mov ax,bx  ;ax=bx->boşalan ax değerine bx'i yazıyoruz
mov [serial],eax ;eax=doğru serial

;Crackme için tek bir serial var
;bizim girdiğimiz seriali bir döngüden geçirerek
;bazı kontroller yapıyor ve arada hata bulunca döngüden çıkıyor
;biz döngüyü inceleyip ters çevirdik
;ve gerçek seriali hesapladık

invoke wsprintf,addr serial,addr format,serial;seriali olduğu gibi alır hex hali ile
invoke SetDlgItemText,hWin,edtSerial,ADDR serial
 
xor eax,eax
ret

SerialUret endp
basit olmasına rağmen en beğendiğim yazı bu oldu. Algoritma basit ama öğrenilmesi gereken bir konu ezber yok kafa çalıştırma var.
Birde aşağıdaki resmi incelemenizi istiyorum:

Türk Ters Mühendisliğine Gönül vermiş
zamanını 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