İliya Norton
- 2 Şub 2018
- 24 Mesaj
Aktiflik
Seviye
Deneyim
İ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.-
-
İyi forumlar-
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.-
İyi forumlar-
