Ayuda con un crackme

Iniciado por negux, 9 Enero 2012, 15:30 PM

0 Miembros y 1 Visitante están viendo este tema.

negux

Que tal, recien estoy terminando el curso de Ricardo y me dispuse a hacer un crackme, bueno, les cuento, el crackme estaba empacado con exe stealth, y con ayuda de google pude desempacarlo :P y Bueno tengo esta parte de lo que muestra el olly, donde lee lo que pongo como serial, y salta al mensaje de Error.
Código (asm) [Seleccionar]

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  :huh: :rolleyes:

.:UND3R:.

Sube el crackme para ver que se puede hacer, Saludos

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)