26 Nisan 2020 Pazar

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.

[Resim: VaWyFo.png]

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.


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ışı





4 Nisan 2020 Cumartesi

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

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