Natural

natural

Breaking News

Keygenme 9




Keygen nasıl yazılır serimizin sonuna gelmişken güzel bir örnek ile bitiriyoruz serimizi. yazar bu crackmesin de FPU komutlarını da kullanmış. Aslında FPU konusu başlı başına ayrı bir olay. "Real Numbers" denilen gerçel sayılar ile işlem yapabilmenizi, trigonometrik ve aritmetik işlemleri kolaylıkla yapabilmenizi sağlıyor FPU komutları. Demek ki dergiden sonra bu konuya da girmeliyim. Ama siz FPU konusunda bilgi sahibi olmak istiyorsanız RAY isimli arkadaşın web sayfasını incelemelisiniz.
Aslında önceki incelediyseniz yapmanız gereken extra birşey yok farenizin scroll tuşuyla aşağıya doğru inerseniz serial kontrolünün yapıldığı yere gelirsiniz. Ama ben genede anlatayım: Crackmeyi Ollydebugger ile açın, CODE penceresine sağ tıklayın ve "Search For > All referenced Text Strings" Seçin açılan pencereden, doğru serial mesajına çıft tıklayın. Serial kontrolünün yapıldığı yerdesiniz biraz daha yukarı çıkıp "GetDlgItemTextA" apisinin olduğu yere gelin:
4011D3|.PUSH 19                                 ; /Count = 19 (25.)
4011D5|.PUSH crackme_.00403096                  ; |Buffer = crackme_.00403096
4011DA|.PUSH 66                                 ; |ControlID = 66 (102.)
4011DC|.PUSH [ARG.1]                            ; |hWnd = 00401000
4011DF|.CALL <JMP.&USER32.GetDlgItemTextA>      ; \GetDlgItemTextA ---->seriali alan api
4011E4|.MOV DWORD PTR DS:[4030C4],EAX  ;serialin  uzunluğunu 4030C4 adresine yazıyor
4011E9|.PUSH 1E                                 ; /Count = 1E (30.)
4011EB|.PUSH crackme_.00403078                  ; |Buffer = crackme_.00403078
4011F0|.PUSH 65                                 ; |ControlID = 65 (101.)
4011F2|.PUSH [ARG.1]                            ; |hWnd = 00401000
4011F5|.CALL <JMP.&USER32.GetDlgItemTextA>      ; \GetDlgItemTextA--->ismimizi alan api
4011FA|.MOV DWORD PTR DS:[4030C0],EAX  ;ismin uzunluğu 4030C0 adresine yazılıyor
4011FF|.ADD EAX,21    ;eax=eax+21h(eaxde ismin uzunluğu vardı)
401202|.CMP EAX,27    ;eax 27h ile kontrol ediliyor
401205|.JB SHORT crackme_.0040124C  ;altındaysa dallanıyor(ismimiz en az altı karakter olmalı 27h-21h)
401207|.MOV ECX,EAX    ;ecx=eax
401209|.PUSH EDI                                ;  ntdll.7C900228
40120A|.PUSH crackme_.00403051                  ; /Arg2 = 00403051
40120F|.PUSH crackme_.00403061                  ; |Arg1 = 00403061
401214|.CALL crackme_.00401269                  ; \crackme_.00401269 serialin hesaplandığı CALL F7 ile dalalım
F8 komutu Trace Over, F7 ise Trace Into anlamına gelir. Türkçeleştirirsek, Trace Over o komutu izler, Trace into izlemek için içine girer. F7 ile call'a daldık aşağıda isme göre serialin hesaplandığı kodları görüyorsunuz. Şimdi inceleyelim:
401269/$ PUSH EBP
40126A|. MOV EBP,ESP
40126C|. ADD ESP,-4
40126F|. XOR EBX,EBX    ;yazmaçlar sıfırlanıyor
401271|. XOR EDX,EDX
401273|. XOR ECX,ECX
401275|. XOR ESI,ESI
401277|. LEA EDX,DWORD PTR DS:[403078]  ;ismimizin bulunduğu adres değeri edx'e yazılıyor
40127D|. PUSH EDX                               ; /StringOrChar = FFFE48D5 ???
40127E|. CALL <JMP.&USER32.CharLowerA>          ; \CharLowerA varsa ismimizdeki büyükharfler küçültülüyor
401283|. MOV EDX,EAX    ;edx'e eax değeri atanıyor
401285|. XOR EAX,EAX    ;eax=0
401287|. XOR ECX,ECX    ;ecx=0
401289|> /MOVSX EAX,BYTE PTR DS:[ECX+403078] ;ismimizin her bir karakterinin hex değeri sırayla eax'e atılıyor
401290|. |XOR EBX,EAX    ;ebx=ebx XOR eax
401292|. |IMUL EBX    ;eax=ebx*eax , edx=0
401294|. |MOV EDX,EBX    ;edx=ebx
401296|. |SHL EDX,4    ;edx=edx SHL 4
401299|> |SUB EDX,133337h   ;edx=edx-133337h
40129F|. |CMP EDX,3434478h   ;edx ile 3434478h karşılaştırılıyor
4012A5|.^|JA SHORT crackme_.00401299  ;edx büyükse yukarı dallanarak edxteki çıkartma işlemi yapılıyor
      ;edx değeri 3434478h'den küçük olana kadar dallanacak
4012A7|. |OR DH,24h    ;dh=dh OR 24h
4012AA|. |AND AL,AH    ;al=al OR AH
4012AC|. |XOR EDX,EAX    ;edx=edx XOR eax
4012AE|. |INC ECX    ;ecx'i bir artır
4012AF|. |CMP DWORD PTR DS:[4030C0],ECX  ;ecx ismin uzunluğu ile karşılaştırılıyor
4012B5|.^\JNZ SHORT crackme_.00401289  ;eşit değilse dallan yoksa devam
4012B7|. XOR EBX,EDX    ;ebx=ebx XOR edx
4012B9|. MOV ECX,DWORD PTR DS:[4030C0]  ;ecx=ismin uzunluğu 4030C0 adresinde ismin uzunluğu vardı
4012BF|. SUB CL,3    ;CL=CL - 3
4012C2|. RCL EAX,CL    ;eax=eax RCL cl
4012C4|. MOV DWORD PTR DS:[4030C8],EAX  ;eax değeri 4030C8 adresine yazılıyor
4012C9|. WAIT     ;bu komut FPU(floating point unit) işlem yaparken CPU'nun beklemesini sağlar
4012CA|. FINIT     ;FPU kullanılacağı zaman yazmaçları ilklendirmeye yarar
4012CC|. FLD DWORD PTR DS:[4030C8]  ;Load Real Number, ST0'a yüklendi
4012D2|. MOV DWORD PTR DS:[4030CC],EDX  ;edx'deki değer 4030CC adresine yazıldı
4012D8|. MOV DWORD PTR DS:[4030D0],EBX  ;ebx'deki değer 4030D0 adresine yazıldı
4012DE|. FLD DWORD PTR DS:[4030D0]  ;Load Real Number, ST0'a yüklendi
4012E4|. FXTRACT    ;ST0 içeriğini 2 ye ayırır
4012E6|. FILD DWORD PTR DS:[4030CC]  ;4030CC adresindeki değeri ST0 ya yazar tamsayı olarak
4012EC|. FADD ST,ST(2)    ;ST0=ST0+ST2
4012EE|.>NOT WORD PTR DS:[4030C8]  ;4030C8 adreindeki veriyi ters çevir(1 leri 0'a 0ları 1e)
4012F5|. FIMUL DWORD PTR DS:[4030C8]  ;ST0=ST0*4030C8adresindeki değer
4012FB|. FSQRT     ;ST0'ın kare kökü
4012FD|. FSINCOS    ;ST0 kaynağındaki veriyi açı olarak alır ve ST0 ile ST1e sinüs kosinüs değerlerini yazar
4012FF|. F2XM1     ;2 üssü ST0-1 'i hesaplar ve ST0'a yazar, naapmış lan bu herif :D
401301|.>AND WORD PTR DS:[4030D0],4321h  ;4030D0 adresindeki değer ile 4321h AND işlemine tabi tut
40130A|. MOV EAX,DWORD PTR DS:[4030C8]  ;eax=4030C8 adresindeki değer
40130F|. FIMUL DWORD PTR DS:[4030D0]  ;ST0 daki değer ile 4030D0 adresindeki değr çarpılır sonuç ST0'a yazılır
401315|. FMUL ST(3),ST    ;ST3=ST3 * ST0
401317|. FSUBR DWORD PTR DS:[4030C8]  ;ST0=ST0-4030C8 adresindeki değer
40131D|. FST DWORD PTR DS:[4030CC]  ;4030CC adresine ST0'ı yaz
401323|. MOV EBX,DWORD PTR DS:[4030CC]  ;ebx=4030CC adresindeki veri
401329|. XOR EBX,EAX    ;ebx=ebx XOR eax
40132B|. XOR EBX,12340F0Fh   ;ebx=ebx XOR 12340F0Fh
401331|. XOR EBX,EDX    ;ebx=ebx XOR edx
401333|. IMUL EBX    ;eax=eax * ebx
401335|. MOV EBX,EAX    ;ebx=eax
401337|. LEAVE
401338\. RETN 8
Yani bu herif ne yapmış yaw burada :D Bildiği bütün komutları kullanmış adam. En son ebx yazmacına gerçek serialimiz yazılıyor.
401219|.PUSH EAX
40121A|.PUSH crackme_.00403096
40121F|.CALL crackme_.004013CC
401224|.POP ECX                                 ;  kernel32.7C817077
401225|.POP EDI                                 ;  kernel32.7C817077
401226|.CMP EAX,EBX    ;BURADA ise girilen serial ile hesaplanan kontrol ediliyor!
401228|.JNZ SHORT crackme_.0040124C  ;eşitse sıkıntı yok değilse kötü çocuğa dallanıyor!
40122A|.PUSH 40                                 ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
40122C|.PUSH crackme_.0040304D                  ; |Title = "wee"
401231|.PUSH crackme_.00403019                  ; |Text = "You did it! Now make a keygen =)"
401236|.PUSH 0                                  ; |hOwner = NULL
401238|.CALL <JMP.&USER32.MessageBoxA>          ; \MessageBoxA
40123D|.PUSH crackme_.0040303A                  ; /Text = "Crackme - cracked!"
401242|.PUSH [ARG.1]                            ; |hWnd = 00401000
401245|.CALL <JMP.&USER32.SetWindowTextA>       ; \SetWindowTextA
Şimdi sıra keygen hazırlamakta. Yine yukarıdaki serial hesaplama kodlarını alıp assembly haline getirip biraz düzenlemek gerekiyor. Aslında bunuda yapmasam siz yapsanız kendinize daha çok şey kadarsınız, uğraşın biraz. Ama ben bu derste de size kaynak kodları hazırladım. Buradan indirebilirsiniz.
Bu yazı bize ne öğretti? Tabiki CPU işlemleri dışında birde FPU işlemleri olduğu :D FPU hakkında en yukarıda bir adres vermiştim. O adrese gidip inceleyin derim. Çünkü bir çok yerde bunlarla karşılaşacaksınız. Özelliklede crpto konusuna gireceğiniz zaman bunları öğrenmiş olmanız sizin için birer artı olacak.
Türk Ters Mühendisliğine gönül veren
Zamanını harcayan 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