Colocamos un BP en
MessageBoxAIntroducimos algunos datos falsos y se detiene en el BP que colocamos
si nos fijamos en [ESP] apunta al retorno, en este caso:
004013C1Nos dirijimos ahí en el desambler y notaremos que un poco más arriba están las string del mensaje erroneo (chico malo):
004013AD |. 6A 30 PUSH 30 ; /Style = MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL
004013AF |. 68 60214000 PUSH CRACKME.00402160 ; |Title = "No luck!"
004013B4 |. 68 69214000 PUSH CRACKME.00402169 ; |Text = "No luck there, mate!"
004013B9 |. FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hOwner
004013BC |. E8 79000000 CALL <JMP.&USER32.MessageBoxA> ; \MessageBoxA
Si subimos un poco más notaremos otra string de otro chico malo pero si subimos un poco más encontraremos el mensaje bueno:
0040134D /$ 6A 30 PUSH 30 ; /Style = MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL
0040134F |. 68 29214000 PUSH CRACKME.00402129 ; |Title = "Good work!"
00401354 |. 68 34214000 PUSH CRACKME.00402134 ; |Text = "Great work, mate!
Now try the next CrackMe!"
00401359 |. FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hOwner
0040135C |. E8 D9000000 CALL <JMP.&USER32.MessageBoxA> ; \MessageBoxA
00401361 \. C3 RETN
por lo que lo más probable que un poco más arriba esté el salto en donde el programa se dirijirá al chico bueno o chico malo:
00401243 . /74 07 JE SHORT CRACKME.0040124C
00401245 . |E8 18010000 CALL CRACKME.00401362
0040124A .^|EB 9A JMP SHORT CRACKME.004011E6
0040124C > \E8 FC000000 CALL CRACKME.0040134D