Escurridizo código

Iniciado por BossGoedel, 14 Febrero 2010, 00:49 AM

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

BossGoedel

Hola. Soy primerizo y me ha surgido un problema. A ver si me podéis echar una mano.

En un determinado programa (ejecutable PE), estoy intentando llegar al cófido que valida una key. Usando el IDA pro fee, y después de poner breakpoints a los messabox y getitemdialog para ver si cazaba el punto donde se lee y comprueba el serial, no obtuve ningún resultado. Entonces opté por pegarme la currada y poner breakpoints en todos y cada uno de los bloques de código. Pero no ha habido forma, cuando navego justo por los controles donde se introduce el serial y se da al ok, no salta ni un solo break.

He usado el Olly para hacer un Atach justo cuando estoy en la pantalla del serial, y también justo cuando le doy al botón...pero el debugueador se coloca en el ntdll y de ahí ya no se puede ir a ningún sitio.  :-[

¿Alguna idea de a lo que me enfrento?  :P

tena

* Carga el exe en el olly
* Luego das run para ejecutarlo
* Te vas a la ventana de registro, pones cualquier cosa.
* Volves al olly, presiona F12 para pausarlo, luego Alt+F9
* Regresas al programa y aceptas la ventana
* El oly se detiene justo despues de la llamada a la ventana de "serial invalido".

y luego buscas por ahi...

slds

MCKSys Argentina

Ahora, ¿estás seguro de que usa GetDlgItemTextA ?

¿ Probaste con GetWindowTextA ?

Si el ejecutable es un VC2008, usa las API terminadas con W (osea GetDlgItemTextW, GetWindowTextW)

¿ Has hecho el tutorial de Ricardo Narvaja ? (http://ricardonarvaja.info/WEB/INTRODUCCION%20AL%20CRACKING%20CON%20OLLYDBG%20DESDE%20CERO/)

Ahi aprenderás métodos para poner BPs rápidamente, asi también, como para navergar por el código del EXE sin problemas.

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


BossGoedel

Gracias a los dos por vuestras respuestas.

Tena: Gracias por la descripción. Cuando procedo así, y después de indicarle con Alt f9 que ejecute hasta regresar al user code, no regresa, puedo navegar tranquilamente por la pantalla de verificación del serial del programa y el olly no detecta nada.
AL hacer el pause, el debugger se queda en una instrucción del ntdll; pego parte del código por donde ha pasado antes de quedarse en la última instrucción:
[...]
7C91E4F9    54              push esp
7C91E4FA    E8 29000000     call ntdll.RtlRaiseException
7C91E4FF    8B0424          mov eax,ss:[esp]
7C91E502    8BE5            mov esp,ebp
7C91E504    5D              pop ebp
7C91E505    C3              retn
7C91E506    8DA424 00000000 lea esp,ss:[esp]
7C91E50D    8D49 00         lea ecx,ds:[ecx]
7C91E510 >  8BD4            mov edx,esp
7C91E512    0F34            sysenter
7C91E514 >  C3              retn

ME tiene mosqueado ese Systender. Creo que debe de lanzar más de un thread que paraliza la acción del debugger...pero esto ya sobrepasa mis conocimientos.

MCKSys: Gracias, MCKSys, efectivamente lo que usa es el GetDLgItemTextW, pero lo hace en infinidad de sitios y no para en ninguno...tal vez por que use pantallas construidas en código, tal vez por que el depurardor no llega por algún método de seguridad, que por cierto, no parece comercial.
No he hecho el tutorial de Ricardo, pero me temo que tendré que hacerlo.

Si tenéis alguna idea o rerecencia donde pueda leer como abordar el tema cuando parece que hay más de un thread en juego os lo agradecería mucho.

Un saludo y gracias

tena

Configura las Excepciones para el rango 00000000-FFFFFFFF

* Dale run para que se ejecute el programa, te vas a la ventana
de registro y metes cualquier numero de serial ("no aceptes aun");

Pone un BP CONDITIONAL en TranslateMessage y configuralo para
que pare con la condicion MSG==202

* Volves al programa y aceptas, oly debe caer en la api,
ahora ALT+F9 para volver al codigo, y desde ahi empiezas a buscar el serial
o lo que sea...

slds

BossGoedel

Cita de: tena en 14 Febrero 2010, 14:28 PM
Configura las Excepciones para el rango 00000000-FFFFFFFF

* Dale run para que se ejecute el programa, te vas a la ventana
de registro y metes cualquier numero de serial ("no aceptes aun");

Pone un BP CONDITIONAL en TranslateMessage y configuralo para
que pare con la condicion MSG==202

* Volves al programa y aceptas, oly debe caer en la api,
ahora ALT+F9 para volver al codigo, y desde ahi empiezas a buscar el serial
o lo que sea...

slds


Gracias Tena. Algo debo de hacer mal, por  que nada cambia.
Veo que en Debug options, en Exceptions, está configurado como tú dices.
Después arranco, pongo el serial y no hago nada más.
En el command del olly pongo BP TranslateMessage MSG==202 y le doy a enter.
Le doy al botón ok del programa y el olly se queda donde siempre; la opción de alt-f9 está deshabilitado en ese momento...perece que no ha encontrado donde pararse..es como si el debugger se parara antes...  :P

tena

perdon es un bp conditional log, ponele en las opciones que el ollydbg se detenga cuando se cumpla la condicion que pusiste.

slds

BossGoedel

Cita de: tena en 16 Febrero 2010, 15:53 PM
perdon es un bp conditional log, ponele en las opciones que el ollydbg se detenga cuando se cumpla la condicion que pusiste.

slds

Ok. Así lo he hecho, Tena, gracias, se lo he puesto a todos los translatemessage...pero el olly no para en ningún sitio distinto al de siempre; se queda tieso en la misma linea como siempre. Supongo que me resta estudiar la pantalla de Log a ver que dice al respecto ¿no?
Me temo que debe de haber un hilo por ahí haciendo de las suyas...pero eso ya me supera. Creo que el hecho de que en ntdll se pare después de pasar por systender, significa que llama a kifastsystemcall...y ahí está NTCreateThread...Si alguno sabe algo de este tema o conoce literatura al respecto...

Gracias por tu interés tena   :D