Hoşgeldin Misafir

1. Makalenin Devamı

İliya Norton

2 Şub 2018
24 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
İlk makalenin devamı arkadaşlar , yer yetmedi 

00407F04    /.  55            PUSH EBP
00407F05    |.  8BEC          MOV EBP,ESP
00407F07    |.  81C4 F4FDFFFF ADD ESP,-20C
00407F0D    |.  53            PUSH EBX
00407F0E    |.  56            PUSH ESI
00407F0F    |.  57            PUSH EDI
00407F10    |.  33C0          XOR EAX,EAX
00407F12    |.  8985 F4FDFFFF MOV DWORD PTR [EBP-20C],EAX
00407F18    |.  8985 F8FDFFFF MOV DWORD PTR [EBP-208],EAX
00407F1E    |.  8945 FC       MOV DWORD PTR [EBP-4],EAX
00407F21    |.  8B75 10       MOV ESI,DWORD PTR [EBP+10]
00407F24    |.  8B5D 08       MOV EBX,DWORD PTR [EBP+8]
00407F27    |.  33C0          XOR EAX,EAX
00407F29    |.  55            PUSH EBP
00407F2A    |.  68 CC804000   PUSH cracked1.004080CC
00407F2F    |.  64:FF30       PUSH DWORD PTR FS:[EAX]
00407F32    |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
00407F35    |.  BF 01000000   MOV EDI,1
00407F3A    |.  81FE 60F00000 CMP ESI,0F060
00407F40    |.  75 08         JNZ SHORT cracked1.00407F4A
00407F42    |.  6A 01         PUSH 1                              ; /Result = 1
00407F44    |.  53            PUSH EBX                            ; |hWnd
00407F45    |.  E8 FEC6FFFF   CALL <JMP.&user32.EndDialog>        ; \EndDialog
00407F4A    |>  8B45 0C       MOV EAX,DWORD PTR [EBP+C]
00407F4D    |.  2D 10010000   SUB EAX,110                         ;  Switch (cases 110..111)
00407F52    |.  74 08         JE SHORT cracked1.00407F5C
00407F54    |.  48            DEC EAX
00407F55    |.  74 3A         JE SHORT cracked1.00407F91
00407F57    |.  E9 48010000   JMP cracked1.004080A4
00407F5C    |>  6A EC         PUSH -14                            ; /Index = GWL_EXSTYLE; Case 110 of switch 00407F4D
00407F5E    |.  53            PUSH EBX                            ; |hWnd
00407F5F    |.  E8 FCC6FFFF   CALL <JMP.&user32.GetWindowLongA>   ; \GetWindowLongA
00407F64    |.  0D 00000800   OR EAX,80000
00407F69    |.  50            PUSH EAX                            ; /NewValue
00407F6A    |.  6A EC         PUSH -14                            ; |Index = GWL_EXSTYLE
00407F6C    |.  53            PUSH EBX                            ; |hWnd
00407F6D    |.  E8 16C7FFFF   CALL <JMP.&user32.SetWindowLongA>   ; \SetWindowLongA
00407F72    |.  6A 02         PUSH 2
00407F74    |.  68 E1000000   PUSH 0E1
00407F79    |.  6A 00         PUSH 0
00407F7B    |.  53            PUSH EBX
00407F7C    |.  E8 FFC6FFFF   CALL <JMP.&user32.SetLayeredWindowA>
00407F81    |.  68 E0804000   PUSH cracked1.004080E0              ; /Text = "Prolixe KeygenMe #1 by Fabsys -Unregistred-"
00407F86    |.  53            PUSH EBX                            ; |hWnd
00407F87    |.  E8 04C7FFFF   CALL <JMP.&user32.SetWindowTextA>   ; \SetWindowTextA
00407F8C    |.  E9 15010000   JMP cracked1.004080A6
00407F91    |>  81EE EA030000 SUB ESI,3EA                         ;  Switch (cases 3EA..3EB)
00407F97    |.  74 0C         JE SHORT cracked1.00407FA5
00407F99    |.  4E            DEC ESI
00407F9A    |.  0F84 FA000000 JE cracked1.0040809A
00407FA0    |.  E9 01010000   JMP cracked1.004080A6
00407FA5    |>  6A 1E         PUSH 1E                             ; /Count = 1E (30.); Case 3EA of switch 00407F91
00407FA7    |.  8D85 FCFEFFFF LEA EAX,DWORD PTR [EBP-104]         ; |
00407FAD    |.  50            PUSH EAX                            ; |Buffer
00407FAE    |.  68 E8030000   PUSH 3E8                            ; |ControlID = 3E8 (1000.)
00407FB3    |.  53            PUSH EBX                            ; |hWnd
00407FB4    |.  E8 97C6FFFF   CALL <JMP.&user32.GetDlgItemTextA>  ; \GetDlgItemTextA
00407FB9    |.  6A 1E         PUSH 1E                             ; /Count = 1E (30.)
00407FBB    |.  8D85 FCFDFFFF LEA EAX,DWORD PTR [EBP-204]         ; |
00407FC1    |.  50            PUSH EAX                            ; |Buffer
00407FC2    |.  68 E9030000   PUSH 3E9                            ; |ControlID = 3E9 (1001.)
00407FC7    |.  53            PUSH EBX                            ; |hWnd
00407FC8    |.  E8 83C6FFFF   CALL <JMP.&user32.GetDlgItemTextA>  ; \GetDlgItemTextA
00407FCD    |.  80BD FCFDFFFF>CMP BYTE PTR [EBP-204],0
00407FD4    |.  75 17         JNZ SHORT cracked1.00407FED
00407FD6    |.  6A 40         PUSH 40                             ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
00407FD8    |.  68 0C814000   PUSH cracked1.0040810C              ; |Title = "Error"
00407FDD    |.  68 14814000   PUSH cracked1.00408114              ; |Text = "Enter a Serial"
00407FE2    |.  53            PUSH EBX                            ; |hOwner
00407FE3    |.  E8 88C6FFFF   CALL <JMP.&user32.MessageBoxA>      ; \MessageBoxA
00407FE8    |.  E9 B9000000   JMP cracked1.004080A6
00407FED    |>  80BD FCFEFFFF>CMP BYTE PTR [EBP-104],0
00407FF4    |.  75 17         JNZ SHORT cracked1.0040800D
00407FF6    |.  6A 40         PUSH 40                             ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
00407FF8    |.  68 0C814000   PUSH cracked1.0040810C              ; |Title = "Error"
00407FFD    |.  68 24814000   PUSH cracked1.00408124              ; |Text = "Enter a Name"
00408002    |.  53            PUSH EBX                            ; |hOwner
00408003    |.  E8 68C6FFFF   CALL <JMP.&user32.MessageBoxA>      ; \MessageBoxA
00408008    |.  E9 99000000   JMP cracked1.004080A6
0040800D    |>  8D85 F8FDFFFF LEA EAX,DWORD PTR [EBP-208]
00408013    |.  8D95 FCFEFFFF LEA EDX,DWORD PTR [EBP-104]
00408019    |.  B9 00010000   MOV ECX,100
0040801E    |.  E8 19B8FFFF   CALL cracked1.0040383C
00408023    |.  8B85 F8FDFFFF MOV EAX,DWORD PTR [EBP-208]
00408029    |.  8D55 FC       LEA EDX,DWORD PTR [EBP-4]
0040802C    |.  E8 E3FDFFFF   CALL cracked1.00407E14
00408031    |.  8D85 F4FDFFFF LEA EAX,DWORD PTR [EBP-20C]
00408037    |.  8D95 FCFDFFFF LEA EDX,DWORD PTR [EBP-204]
0040803D    |.  B9 00010000   MOV ECX,100
00408042    |.  E8 F5B7FFFF   CALL cracked1.0040383C
00408047    |.  8B95 F4FDFFFF MOV EDX,DWORD PTR [EBP-20C]
0040804D    |.  8B45 FC       MOV EAX,DWORD PTR [EBP-4]
00408050    |.  E8 EBB8FFFF   CALL cracked1.00403940
00408055    |.  75 2F         JNZ SHORT cracked1.00408086
00408057    |.  68 34814000   PUSH cracked1.00408134              ; /Text = "Registred Version"
0040805C    |.  68 F1030000   PUSH 3F1                            ; |ControlID = 3F1 (1009.)
00408061    |.  53            PUSH EBX                            ; |hWnd
00408062    |.  E8 11C6FFFF   CALL <JMP.&user32.SetDlgItemTextA>  ; \SetDlgItemTextA
00408067    |.  68 48814000   PUSH cracked1.00408148              ; /Text = "Prolixe KeygenMe #1 by Fabsys -Registred-"
0040806C    |.  53            PUSH EBX                            ; |hWnd
0040806D    |.  E8 1EC6FFFF   CALL <JMP.&user32.SetWindowTextA>   ; \SetWindowTextA
00408072    |.  6A 00         PUSH 0                              ; /Style = MB_OK|MB_APPLMODAL
00408074    |.  68 74814000   PUSH cracked1.00408174              ; |Title = "Winner"
00408079    |.  68 7C814000   PUSH cracked1.0040817C              ; |Text = "GooD BoY"
0040807E    |.  53            PUSH EBX                            ; |hOwner
0040807F    |.  E8 ECC5FFFF   CALL <JMP.&user32.MessageBoxA>      ; \MessageBoxA
00408084    |.  EB 20         JMP SHORT cracked1.004080A6
00408086    |>  6A 00         PUSH 0                              ; /Style = MB_OK|MB_APPLMODAL
00408088    |.  68 88814000   PUSH cracked1.00408188              ; |Title = "Wrong Way"
0040808D    |.  68 94814000   PUSH cracked1.00408194              ; |Text = "BaD BoY"
00408092    |.  53            PUSH EBX                            ; |hOwner
00408093    |.  E8 D8C5FFFF   CALL <JMP.&user32.MessageBoxA>      ; \MessageBoxA
00408098    |.  EB 0C         JMP SHORT cracked1.004080A6
0040809A    |>  6A 00         PUSH 0                              ; /Result = 0; Case 3EB of switch 00407F91
0040809C    |.  53            PUSH EBX                            ; |hWnd
0040809D    |.  E8 A6C5FFFF   CALL <JMP.&user32.EndDialog>        ; \EndDialog
004080A2    |.  EB 02         JMP SHORT cracked1.004080A6
004080A4    |>  33FF          XOR EDI,EDI                         ;  Default case of switch 00407F4D
004080A6    |>  33C0          XOR EAX,EAX                         ;  Default case of switch 00407F91
004080A8    |.  5A            POP EDX
004080A9    |.  59            POP ECX
004080AA    |.  59            POP ECX
004080AB    |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
004080AE    |.  68 D3804000   PUSH cracked1.004080D3
004080B3    |>  8D85 F4FDFFFF LEA EAX,DWORD PTR [EBP-20C]
004080B9    |.  BA 02000000   MOV EDX,2
004080BE    |.  E8 55B5FFFF   CALL cracked1.00403618
004080C3    |.  8D45 FC       LEA EAX,DWORD PTR [EBP-4]
004080C6    |.  E8 29B5FFFF   CALL cracked1.004035F4
004080CB    \.  C3            RET

Gördüğünüz gibi bu fonksiyonun başlangıç adresi(00407F04) ekranda görülen formun DlgProc argümanı ile aynı. MSDN linkini hala okumadıysanız şimdi açıp okumanın bence tam zamanı.-
MSDN linkinden okumadığınıza göre bu DlgProc, forma gelen her windows mesajın işlendiği fonksiyon oluyor. Bu windows mesajlar textboxlara yazı yazmaktan butonlara tıklamaya, uygulamayı kapatmaktan fare imlecini formun üzerine getirip çıkarmaya kadar aklınıza gelen kullanıcı arayüzü ile alakalı her şey olabilir. Elbette her mesaj türünde bir şey yapmak zorunda değil. Örneğin, textboxta klavye tuşuna basmak ya da kaldırmak bir olay(event) olabilir ama uygulama bunun karşılığında bir şey yapmayabilir. Ki yapmıyor da göründüğü kadarıyla.-
Windows message handling ayrı bir yazının konusu ama temel olarak bu fonskiyon şu işi yapıyor. Kendisi sürekli message pool’u dinliyor. İstediği mesaj tiplerinden birisi gelirse (mouse down, close vb…) gerekli yerlere yönlendiriyor. Bunu da bir tür switch-case ile yapıyor.-
Burada tek yapacağımız başlığa sadık kalarak “Yaldır yaldır cracking” peşinde koşmak. O zaman “GooD Boy” ve “Bad Boy” MessageBoxlarının gösteriminin kontrol edildiği yeri bulmak. Sanki zor değil gibi ha? Bu konuda aklın yolu bir değil. Bir sürü yol var. En “yaldır yaldırını” size göstereyim o zaman. “BaD Boy” mesajı gösteren MessageBoxA çağrısının yapıldığı bölümün en başında bir ok var. Bu, buraya bir zıplama olduğunu gösteriyor. Olly’de o satırı seçelim:-

-Gördüğünüz gibi Assembly penceresinin altında “Jump from 00408055“. Yani buraya o adresten bir atlama var. Ee o zaman bir de o adrese bakalım.-
-

0040804D    |.  8B45 FC       MOV EAX,DWORD PTR [EBP-4]
00408050    |.  E8 EBB8FFFF   CALL cracked1.00403940
00408055    |.  75 2F         JNZ SHORT cracked1.00408086
00408057    |.  68 34814000   PUSH cracked1.00408134              ; /Text = "Registred Version"
0040805C    |.  68 F1030000   PUSH 3F1                            ; |ControlID = 3F1 (1009.)


00408055” adresinde bir “jump condition” var. Yani şartlı zıplama.-

 -

Hemen bir x86 Assembly Reference kaynağına bakalım: http://ref.x86asm.net/coder32.html.-

JNZ: Jump short if not zero/not equal (ZF=1)-

Hımm yani ne diyor? Bir önceki karşılaştırmada eğer karşılaştırılanlar eşit değilse yani ZF=1 ise. Sağ üstteki Registers bölgesindeki, Flags alanında bulunan Z falgı 1 değilse, sıfırsa(0) zıpla.-

İşlemci bir karşılaştırma işlemi yapıyor ama bir hangarın içinde yapıyor. Dışarıdan göremiyoruz. Kapıya da bir adam dikmiş. İçeriden aldığı duruma göre bayrağı kaldırıp, indiriyor. Eğer kalkıksa “Eşit”, inekse “Değil”.  O bayrağı gören birisi de başarılı ya da başarısız olduğumuzu söylüyor.-

Bu kadar basit. Bu “jump condition”dan önce, bir fonksiyona çağrı var. %99 ihtimalle bizim isim-serial no kontrolü orada yapılıyor ama “yaldır yaldır cracking” için de o hangara girmemize şimdilik gerek yok. Oranın gizemlerini sonraki yazılarda çözeriz. En azından windows messaging, compare instructions, assemblyde temel matematiksel işlemler ve stack yönetimini işlememiz, bir noktaya gelmiş olmanız gerekiyor.-

O yüzden, biz sadece bayrağın durumuna göre pozisyon alan adamla ilgileniyoruz. Örneğin o adamı aradan kaldırsak nasıl olur? Zaten programın genel akışı da oradaki “jump condition” olmasa zaten bizi “GooD Boy” mesajına götürüyor.-

O zaman aradaki kıl herifi ortadan kaldıralım. Aynı açılıştaki rahatsız edici MessageBoxA fonksiyonuna çağrıyı kaldırdığımız gibi o “jump condition”ı da NOPlarla süsleyelim gitsin. Hatırlıyorsunuz değil mi?-

Sağ click -> Binary -> Fill with NOPs-

kaydetmek için de-
-Sağ click -> Copy to executable -> Sağ click – > Save file.-

76vL5a.jpg
-


İyi forumlar-