29 Nisan 2020 Çarşamba
Webdata Pro Cracked Tutorial
Webdata Pro is the relational version of Webdata with a MySQL backend. It offers the power and flexibility previously available only in packages which cost 10 times as much and require programming skills to administrate. Our web database software requires no programming experience. All administration functions are performed with a web browser and a mouse. The simple point-and-click interface for building tables, designing search pages, and managing data is easy and intuitive.
26 Nisan 2020 Pazar
NinjaGram By Mobile46 Cracked Tutorial
Grim Reaper Dumped by Mobile46 decompile.us
Bunu indirin https://github.com/ZrCulillo/JIT-Freezer/releases
Exeyi bu programın üstüne sürükleyin. Bu program şimdi dump edebilirsiniz diye bir mesaj verecek onu verince megadumper ile dump edin.
Ardından Universal Fixer ile dumpe ettiğiniz exeyi fixleyin.
Softlic64.dll hatası verirse;
Dnspydaki mor yazılı kısma sağ tıklayıp "Edit Module..."e tıklayın ve aşağıdaki resimdeki gösterdiğim yerleri işaretleyip kaydedin.
Bu şekilde düzgün dump edilmiş ve çalışmış olması gerekiyor.
Exeyi bu programın üstüne sürükleyin. Bu program şimdi dump edebilirsiniz diye bir mesaj verecek onu verince megadumper ile dump edin.
Ardından Universal Fixer ile dumpe ettiğiniz exeyi fixleyin.
Softlic64.dll hatası verirse;
Dnspydaki mor yazılı kısma sağ tıklayıp "Edit Module..."e tıklayın ve aşağıdaki resimdeki gösterdiğim yerleri işaretleyip kaydedin.
Bu şekilde düzgün dump edilmiş ve çalışmış olması gerekiyor.
25 Nisan 2020 Cumartesi
.Net Dump ederken dikkaet edilmesi gereken yollar Modul editlemek
Burada modulu kaydederken neden bunları işaretliyorsunuz
Paketlenmiş exelerde bu işaretlerdiğim seçenekler kayıt yaparken değişebiliyor ve değişirse program hata verip düzgün çalışmayabiliyor o yüzden paketliyken olan veriler değişmesin aynı kalsın diye buraları işaretliyoruz.
22 Nisan 2020 Çarşamba
21 Nisan 2020 Salı
ConfuserEX Dump iki dosya birleştirme
Resource kısmı ayrılmışsa o zaman birleştirme yapıyorum. Ayrı olunca confuserex, farklı bir dllden rame yükleme yaptırıyor hemen belli oluyor zaten.
Merhaba
ConfuserEx Proxy Call Fixer 1.2
Dup Pop Patcher
String Decyrpter
ConfuserEx 5.0 Switch Killer
En son iki dosyayı birleştir
Yaptığım adımlar :
1.) AntiTamp Killer
2.) Modül Sel ve MD5'i Manuel Olarak Kaldırma
3.) Manuel Olarak Gizleme Yöntemlerini Kaldırma
4.) ProxyCall Fixer
5.) Calli Fixer
6.) ConfuserEx Unpacker 2.0
7.) De4dot 8 ile Yeniden Adlandırın .) Kullanılmayan Yöntemi Manuel Olarak Kaldırma & Kontrol akışı
16 Nisan 2020 Perşembe
4 Nisan 2020 Cumartesi
Keygenme 9
|
ÖN SÖZ |
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.
YAZI |
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.
SON NOTLAR |
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.
TEŞEKKÜRLER |
Türk Ters Mühendisliğine gönül veren
Zamanını harcayan herkese
sonsuz TEŞEKKÜRLER ........
Zamanını harcayan herkese
sonsuz TEŞEKKÜRLER ........
SON SÖZ |
Öldürmeyen Her Darbe Güce Güç Katar ::: BlueDeviL // SCT
UNUTMADAN |
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.
Diyeceğim şudurki: Emek verilipde yapılmış bir şeyi çalma, onu satın al.
Keygenme 8
|
ÖN SÖZ |
Ö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.
YAZI |
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
SON NOTLAR |
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:
Birde aşağıdaki resmi incelemenizi istiyorum:
TEŞEKKÜRLER |
Türk Ters Mühendisliğine Gönül vermiş
zamanını harcamış herkese
sonsuz TEŞEKKÜRLER ........
zamanını harcamış herkese
sonsuz TEŞEKKÜRLER ........
SON SÖZ |
Öldürmeyen Her Darbe Güce Güç Katar ::: BlueDeviL // SCT
UNUTMADAN |
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.
Diyeceğim şudurki: Emek verilipde yapılmış bir şeyi çalma, onu satın al.
Keygenme 7
|
ÖN SÖZ |
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.
YAZI |
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
SON NOTLAR |
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
TEŞEKKÜRLER |
Türk Ters Mühendisliğine gönül vermiş
zaman harcamış herkese
sonsuz TEŞEKKÜRLER ........
zaman harcamış herkese
sonsuz TEŞEKKÜRLER ........
SON SÖZ |
Öldürmeyen Her Darbe Güce Güç Katar ::: BlueDeviL // SCT
UNUTMADAN |
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.
Diyeceğim şudurki: Emek verilipde yapılmış bir şeyi çalma, onu satın al.
Keygenme 6
|
ÖN SÖZ |
Bu da orijinal bir crackme. Bu yazıda ve sonundaki keygen örneğinde nasıl random(rassal) sayı üreteceğimizi öğreneceğiz. Zaten 2 yolu var(benim bildiğim) assembly de burada bir tanesini göreceğiz. Yazıya başlamadan önce konu hakkında araştırma yapmak isteyen arkadaşlar "GetTickCount" APIsini internetten araştırsınlar bakalım ne işe yarıyormuş.
YAZI |
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_.00403096 ; |Buffer = crackme_.00403096 4011DE|.PUSH 66 ; |ControlID = 66 (102.) 4011E0|.PUSH [ARG.1] ; |hWnd = 000406A6 ('Crackme - not cracked yet',class='FHCF_Crackme') 4011E3|.CALL <JMP.&USER32.GetDlgItemTextA> ; \GetDlgItemTextA-->bu api serialimizi almaya yarıyor 4011E8|.PUSH 1E ; /Count = 1E (30.) 4011EA|.PUSH crackme_.00403078 ; |Buffer = crackme_.00403078 4011EF|.PUSH 65 ; |ControlID = 65 (101.) 4011F1|.PUSH [ARG.1] ; |hWnd = 000406A6 ('Crackme - not cracked yet',class='FHCF_Crackme') 4011F4|.CALL <JMP.&USER32.GetDlgItemTextA> ; \GetDlgItemTextA-->burada ise ismimiz alınıyor 4011F9|.CMP EAX,5 ;ismin uzunluğu 5 ile karşılaştırılıyor 4011FC|.JB SHORT crackme_.00401255 ;5ten haneden küçük bie isim girilmişse hata veriyor 4011FE|.MOV ECX,EAX ;ismin uzunluğu ecx'te 401200|.MOV DWORD PTR DS:[4030C0],ECX ;ecx'teki değer 4030C0 adresine yazılıyor 401206|.PUSH EDI 401207|.PUSH crackme_.00403051 ; /Arg2 = 00403051 40120C|.PUSH crackme_.00403061 ; |Arg1 = 00403061 401211|.CALL crackme_.00401272 ; \crackme_.00401272 401216|.PUSH EBX 401217|.PUSH crackme_.00403096 ; ASCII "11223344" 40121C|.CALL crackme_.00401310 401221|.CMP EAX,3838 ;eaxte serialimiz var ve 3838h ile karşılaştırılıyor 401226|.JBE SHORT crackme_.00401255 ;3838h'dan daha küçük ve eşitse dallanıyor yoksa devam 401228|.CALL crackme_.0040127C ;seriali kontrol algoritması burada F7 ile dalalım içine
Aşağıda seriali konrtol eden döngüde serialimizi 3838h 'a bölüyor. Önemli olan kalanın 0 olması. DIV, IDIV işleminde kalan her zaman edx değişkenine yazılır. Zaten serialin doğruluğunu kontrol eden test komutuyla edx = 0 olmadığı sürece hata verecektir.
40127C/$MOV EBX,3838 ;ebx=3838h 401281|.CDQ ;convert double to quad 401282|.IDIV EBX ;eax=eax / ebx, kalan=edx 401284\.RETN
Döngü bitti son kontrol için devam ediliyor:
40122D|.POP EBX ; 0013FC78 40122E|.POP EDI ; 0013FC78 40122F|.TEST EDX,EDX ;edx = 0 'mı 401231|.JNZ SHORT crackme_.00401255 ;0 değilse hata mesajına dallan yoksa iyi çocuk ;) 401233|.PUSH 40 ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL 401235|.PUSH crackme_.0040304D ; |Title = "wee" 40123A|.PUSH crackme_.00403019 ; |Text = "You did it! Now make a keygen =)" 40123F|.PUSH 0 ; |hOwner = NULL 401241|.CALL <JMP.&USER32.MessageBoxA> ; \MessageBoxA 401246|.PUSH crackme_.0040303A ; /Text = "Crackme - cracked!" 40124B|.PUSH [ARG.1] ; |hWnd = 000406A6 ('Crackme - not cracked yet',class='FHCF_Crackme') 40124E|.CALL <JMP.&USER32.SetWindowTextA> ; \SetWindowTextA
Yukardan ne anladık? öyle bir sayı olmalı ki, eax bölü ebx sonucundan kalan 0 olmalı. İsmimizle ilgili gördüğünüz gibi her hangi bir işlem yapılmıyor. Olay tamamen serialle ilgili. O zaman bu sayı bir çok sayı olabilir. EBX'teki değer 3838h olduğuna göre bu sayının katları bizim serialimiz olabilir, manuel bile hesaplayabilirsiniz. Şimdi biz bunu rassal bir sayı hesaplayıp 3838h ile çarpıcaz ve sonuç bizim serialimiz olacak. Peki rassal sayı assembly'de nasl hesaplanıyor? aslında basit. win32 de "GetTickCount" apisi adı altında bir api var. Bu api windowsun başlamasından beri geçen zamanı milisaniye olarak eax'e yazar. Yani biz bu apiyi her çalıştırdığımızda bize farklı bir rakam verecek :D Ama bana öyle kocaman bir sayı gerekmiyor. O yüzden ben keygeni yazarken eax'in sadece AH ve AL kısmındaki rakamları alıp işlem yapacağım. Keygen kaynak kodları BURADAN indirebilirsiniz. Buraya yapıştırma gereği duymuyorum.
SON NOTLAR |
Neymiş peki Win32 Programmer's reference dosyasını yanımızdan ayırmıyor muşuz değil mi. Şu an bazıları "onu nereden bulucam ben" diyo sanki. Birçok yerden bulabilirsiniz. Eğer MASM32 paketini indirip kurduysanız zaten içerisinde birçok help dosyasıyla beraber geliyor. Yok kurmadıysanız size internetten araştırın demiyorum. Manyak mısın kardeşim 6 derstir ne anlatıyorum ben keygen yazıyoruz :D Bunun için RadASM programı lazım demedikmi? Assembly derlemek için MASM32 kullancaz demedik mi? Hemen http://www.sctzine.com/ adresine gidiyorsun araçlar sayfasından Masm32 ve RadASM dosyalarını indirip kuruyorsun.
TEŞEKKÜRLER |
Türk Ters Mühendisliğine adanmış her saniyenin sahiplerine
sonsuz TEŞEKKÜRLER ........
sonsuz TEŞEKKÜRLER ........
SON SÖZ |
Öldürmeyen Her Darbe Güce Güç Katar ::: BlueDeviL // SCT
UNUTMADAN |
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.
Diyeceğim şudur ki: Emek verilip de yapılmış bir şeyi çalma, onu satın al.
Keygenme 5
|
ÖN SÖZ |
Keygen nasıl yazılır serimizin 5nci yazısında yine bir isme göre serial hesaplama algosuyla karşı karşıyayız. Pes etmek yeter demek yok bu işi öğreneceğiz. Buyrun kodları inceleyelim.
YAZI |
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.
4011D3|.PUSH 19 ; /Count = 19 (25.) 4011D5|.PUSH crackme_.00403096 ; |Buffer = crackme_.00403096 4011DA|.PUSH 66 ; |ControlID = 66 (102.) 4011DC|.PUSH [ARG.1] ; |hWnd = 000B0652 ('Crackme - not cracked yet',class='FHCF_Crackme') 4011DF|.CALL <JMP.&USER32.GetDlgItemTextA> ; \GetDlgItemTextA---->serialimiz alınıyor 4011E4|.PUSH 1E ; /Count = 1E (30.) 4011E6|.PUSH crackme_.00403078 ; |Buffer = crackme_.00403078 4011EB|.PUSH 65 ; |ControlID = 65 (101.) 4011ED|.PUSH [ARG.1] ; |hWnd = 000B0652 ('Crackme - not cracked yet',class='FHCF_Crackme') 4011F0|.CALL <JMP.&USER32.GetDlgItemTextA> ; \GetDlgItemTextA-->ismimiz bu api ile alınıyor 4011F5|.CMP EAX,5 ;ismimizin uzunluğu 5 ile karşılaştırılıyor 4011F8|.JB SHORT crackme_.00401245 ;5'ten küçükse dallanıyor yoksa devam 4011FA|.MOV ECX,EAX ;ismin uzunlupu ecx'e yazılıyor 4011FC|.MOV DWORD PTR DS:[4030C0],ECX ;ecx değeri 4030C0 adresine yazılıyor 401202|.PUSH EDI 401203|.PUSH crackme_.00403051 401208|.PUSH crackme_.00403061 40120D|.CALL crackme_.00401262 ;serial hesaplama döngüsüne dallanıyor F7 ile içine dalalım 401262 $ PUSH EBP ;F7 basıp daldığımız yer burası 401263 . MOV EBP,ESP 401265 . ADD ESP,-4 401268 . XOR EBX,EBX ;yazmaçlar sıfırlanıyor 40126A . XOR EDX,EDX 40126C . XOR EAX,EAX 40126E . XOR ECX,ECX 401270 . XOR ESI,ESI ; crackme_.00401180 401272 . XOR EDI,EDI ;buraya kadar 401274 > MOVSX EAX,WORD PTR DS:[ECX+403078] ;ismimizin+ecx yazmacının ilk iki baytı eax'e yazılıyor 40127B . IMUL ECX ;eax=eax * ecx 40127D . ADD EBX,EAX ;ebx=ebx+eax 40127F . ADD ECX,2 ;ecx=ecx+2 401282 . >CMP BYTE PTR DS:[ECX+403078],0 ;ecx+isim 0 ile karşılaştırılıyor ;ayrıca ecx 2şer 2şer arttığı için ;döngü daha çabuk bitiyor 401289 .^ JNZ SHORT crackme_.00401274 ;0 değilse dallan yoksa devam 40128B . ROL EBX,99 ;ebx=ebx ROL 99h 40128E . XCHG EAX,EBX ;yer değiştir 40128F . SHR EAX,CL ;eax=eax SHR CL 401291 . MOV ESI,EAX ;esi=eax=serial :) 401293 . LEAVE 401294 . RETN 8 401212|.PUSH EBX 401213|.PUSH crackme_.00403096 ; ASCII "11223344"->benim girdiğim serial 401218|.CALL crackme_.00401324 ;bu calldaki işlemden sonra girdiğimiz serial eax'e yazılıyor 40121D|.POP EBX ; crackme_.00403061 40121E|.POP EDI ; crackme_.00403061 40121F|.CMP ESI,EAX ;iyi kötü çocuk burada karşılaştırılıyor 401221|.JNZ SHORT crackme_.00401245 ;eğer yanlış serial girildiyse dallan yoksa devam 401223|.PUSH 40 ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL 401225|.PUSH crackme_.0040304D ; |Title = "wee" 40122A|.PUSH crackme_.00403019 ; |Text = "You did it! Now make a keygen =)" 40122F|.PUSH 0 ; |hOwner = NULL 401231|.CALL <JMP.&USER32.MessageBoxA> ; \MessageBoxA 401236|.PUSH crackme_.0040303A ; /Text = "Crackme - cracked!" 40123B|.PUSH [ARG.1] ; |hWnd = 000B0652 ('Crackme - not cracked yet',class='FHCF_Crackme') 40123E|.CALL <JMP.&USER32.SetWindowTextA> ; \SetWindowTextA
SON NOTLAR |
Seriali crackme zaten kendisi verdiği ve buraya kadar bununla ilgili buna benzer 4 crackmeyi de çözdüğünüz için keygenin assembly kodlarını buraya yazmıyorum. Ancak kaynak kodları buradan indirebilirsiniz.
TEŞEKKÜRLER |
Türk Ters Mühendisliğine gönül vermiş herkese
sonsuz TEŞEKKÜRLER ........
sonsuz TEŞEKKÜRLER ........
SON SÖZ |
Öldürmeyen Her Darbe Güce Güç Katar ::: BlueDeviL // SCT
UNUTMADAN |
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.
Diyeceğim şudurki: Emek verilipde yapılmış bir şeyi çalma, onu satın al.
Keygenme 4
|
ÖN SÖZ |
Keygen Nasıl yazılır serisi kaptanın seyir defteri 4 :) Yine isme göre hesaplama yapılıyor kısa ve basit bir döngü. Canınızı sıkmayın 9 yazılık bu seride ilerideki crackmelerde farklı şeyler var. Şimdi kodlarımızı inceleyelim.
YAZI |
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.
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-->serialin alındığı api 4011E4|.PUSH 1E ; /Count = 1E (30.) 4011E6|.PUSH crackme_.00403078 ; |Buffer = crackme_.00403078 4011EB|.PUSH 65 ; |ControlID = 65 (101.) 4011ED|.PUSH [ARG.1] ; |hWnd = 00401000 4011F0|.CALL <JMP.&USER32.GetDlgItemTextA> ; \GetDlgItemTextA-->ismimizin alındığı api 4011F5|.CMP EAX,5 ;apiden dönen değerin biride ismin uzunluğudur o da eax'e yazılır ;burada eax yani ismin uzunluğu 5 ile karşılaştırılıyor 4011F8|.JB SHORT crackme_.00401249 ;ismimiz 5 handen kısa ise dallan yoksa devam et 4011FA|.MOV ECX,EAX ;ismin uzunluğu ecx'e yazılıyor 4011FC|.MOV DWORD PTR DS:[4030C0],ECX ;ecxdeki veri 4030C0 adresine yazılıyor 401202|.PUSH EDI ; ntdll.7C900228 401203|.PUSH crackme_.00403051 ; /Arg2 = 00403051 401208|.PUSH crackme_.00403061 ; |Arg1 = 00403061 40120D|.CALL crackme_.00401266 ; \crackme_.00401266--> bu call serial hesaplanan yeri çağırıyor F7 ile dalalım
CALL 401266 adresini çağırıyor bu adrese F7 (trace into) ile giriyoruz ve orada nelerin döndüğünü öğreneceğiz. Şimdi serilain hesaplandığı yerleri inceleyelim ve ne yapıldığını anlamaya çalışalım:
401266/$PUSH EBP 401267|.MOV EBP,ESP 401269|.ADD ESP,-4 40126C|.XOR EBX,EBX ;yazmaçlar sıfırlanıyor 40126E|.XOR EDX,EDX 401270|.XOR EAX,EAX 401272|.XOR ECX,ECX 401274|.XOR ESI,ESI ; crackme_.00401180 401276|.XOR EDI,EDI 401278|.MOV ECX,DWORD PTR DS:[4030C0] ;ecx'e ismin uzunluğu yazılıyor 40127E|.SUB ECX,2 ;ecx=ecx-2 401281|.MOVSX EAX,WORD PTR DS:[ECX+403078] ;ecx+isim ->hangi karaktere denk geliyorsa oradan itibaren ;o karakterin hex değeri eax'e yazılıyor 401288|.XOR EAX,ECX ;eax=eax XOR ecx 40128A|.IMUL ECX ;eax=eax * ecx 40128C|.CDQ ;convert double quad 40128D|.IDIV DWORD PTR DS:[4030C0] ;eax=eax / ismin uzunluğu, edx=kalan 401293|.NOT EAX ;eax'i ters çevir 401295|.MOV DWORD PTR DS:[4030C4],EAX ;eax'deki değeri 4030C4 adresine yaz 40129A|.LEAVE 40129B\.RETN 8
Hesaplama bitince RETN ile içine girdiğimiz CALL değerinden bir sonraki satıra uçuyoruz:
401212|.PUSH EBX 401213|.PUSH crackme_.00403096 401218|.CALL crackme_.00401328 ;eax=girdiğimiz serial 40121D|.POP EBX ; kernel32.7C817077 40121E|.POP EDI ; kernel32.7C817077 40121F|.CMP EAX,DWORD PTR DS:[4030C4] ;eax ile gerçek serial karşılaştırılıyor 401225|.JNZ SHORT crackme_.00401249 ;eşit değilse dallan 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 = 00401000 401242|.CALL <JMP.&USER32.SetWindowTextA> ; \SetWindowTextA
SON NOTLAR |
Yukarıda olly ile de incelerseniz daha iyi anlarsınız, döngü dahi yok sadece ismimizin son iki hanesini alıp eax'e yazıp onunla bir kaç mantıksal işlem yapıyor o kadar. Keygenin kaynak kodlarını buradan alabilirsiniz.
TEŞEKKÜRLER |
Türk Ters Mühendisliğine katkıda bulunan herkese
sonsuz TEŞEKKÜRLER ........
sonsuz TEŞEKKÜRLER ........
SON SÖZ |
Öldürmeyen Her Darbe Güce Güç Katar ::: BlueDeviL // SCT
UNUTMADAN |
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.
Diyeceğim şudurki: Emek verilipde yapılmış bir şeyi çalma, onu satın al.
Kaydol:
Kayıtlar (Atom)
-
JByteMod-Beta JByteMod is a multifunctional bytecode editor with syntax highlighting and live decompiling. New in 1.4.0: Method graphing f...
-
Xiaomi Redmi Note 8 Pro IMEI Repair (Özel Anlatım) Merhabalar, değerli MobilKulup üyelerimiz, bugün sizlere xiaomi redmi note 8 pro ...
-
Windows için açık kaynaklı bir x64 / x32 hata ayıklayıcı. Plugins Bu sayfa, x64dbg'ye bir şekilde katkıda bulunan ancak kaynak kodunun...