Código
00401099 . E8 E8000000 CALL <JMP.&user32.GetDlgItemTextA> ; \GetDlgItemTextA 0040109E . 83F8 0C CMP EAX,0C 004010A1 . 75 16 JNZ SHORT F7Crackm.004010B9 004010A3 . 8D35 00304000 LEA ESI,DWORD PTR DS:[403000] 004010A9 . 0FB646 FF MOVZX EAX,BYTE PTR DS:[ESI-1] 004010AD . 3806 CMP BYTE PTR DS:[ESI],AL 004010AF . 75 08 JNZ SHORT F7Crackm.004010B9 004010B1 . 60 PUSHAD 004010B2 . E8 77FFFFFF CALL F7Crackm.0040102E 004010B7 . EB 51 JMP SHORT F7Crackm.0040110A 004010B9 > 68 00304000 PUSH F7Crackm.00403000 ; /Arg1 = 00403000 ASCII "555555555555" 004010BE . E8 6C000000 CALL F7Crackm.0040112F ; \F7Crackm.0040112F 004010C3 . 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL 004010C5 . 68 24324000 PUSH F7Crackm.00403224 ; |Title = "Error" 004010CA . 68 19314000 PUSH F7Crackm.00403119 ; |Text = "" 004010CF . 6A 00 PUSH 0 ; |hOwner = NULL 004010D1 . E8 B6000000 CALL <JMP.&user32.MessageBoxA> ; \MessageBoxA ahi compara Eax con 0c, que es la longitud del serial, si no es igual salta al mensage de error, en este caso no salta (digite doce veces, "5"), luego vemos que mueve a ESI el serial que ingrese, y aqui viene el problema, no le entiendo muy muy bien a la siguiente instruccion: MOVZX EAX,BYTE PTR DS:[ESI-1], segun yo: mueve a eax un byte del contenido de DS en la direccion de memoria [ESI-1], olly marca DS:[00402FF]=00, y el movzx lo rellena con ceros. y de ahi compara un byte de mi serial con AL: AL=00 DS:[00403000]=35 ('5') y dependiendo del resultado de esa comparacion salta al cartel malo o bueno. Codigo de Mensaje bueno: 0040102E /$ 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL 00401030 |. 68 1C324000 PUSH F7Crackm.0040321C ; |Title = "Mensaje" 00401035 |. 68 18324000 PUSH F7Crackm.00403218 ; |Text = "Ok" 0040103A |. 6A 00 PUSH 0 ; |hOwner = NULL 0040103C |. E8 4B010000 CALL <JMP.&user32.MessageBoxA> ; \MessageBoxA
Y pues bueno, hasta aqui llegue, no se que serial compara para saltar al mensaje bueno, busque las api que utiliza y no hay alguna que compare, la unica comparacion que me lleva al mensaje bueno es esa con AL
alguna sugerencia/ayuda ??
Gracias
Edito.
Al introducir 20 caracteres (16, "5" y 4, "9");
llego a este call:
004010BE . E8 6C000000 CALL F7Crackm.0040112F ; \F7Crackm.0040112F
y me sale un mensaje de Error:
Don´t know how to step because memory at address 399393939 is not readable, try to change EIP or pass exception to program
Analizando eso en el Dump veo esto:
00403000 35 35 35 35 35 35 35 35 55555555
00403008 35 35 35 35 35 35 35 35 55555555
00403010 39 39 39 39 00 00 00 00 9999....
Supongo, no se, que como que trata de ejecutar esa direcion de memoria -> 399393939 que son los 9999 que escribi, eso un el overflow? y de ahi como le sigo