Autor
|
Tema: Limite de tiempo (Leído 6,818 veces)
|
Amalthia_
Desconectado
Mensajes: 36
|
Hola a todos,
Tengo un programa de musica: Tap it 5.2, que ya desde el inicio debe activar el SetTimer y a los dos minutos me presenta un mensaje del tipo "your time is up! Es una demo y no pide ningún tipo de serial ni activación, ni nada por el estilo, estoy trabajando con el y simplemente se para al alcanzar el limite de tiempo. He tratado de localizar el texto del mensaje, pero no lo encuentro por ningún sítio. El problema es que soy nuevo en esto del cracking y no se como abordar el tema. Quiero currarmelo pero no se como hacerlo. ¿Alguna idea de como puedo craquear este programa? Gracias por cualquier tipo de ayuda.
salu2
Amalthia_
|
|
|
En línea
|
|
|
|
tena
Desconectado
Mensajes: 668
|
¿Se para en el sentido de que te aparece el mensaje?
Proba poniendo un bp en MessageBoxA..
o sino cuando te sale el mensaje, te vas al oly y lo pauseas, despues presiona ALt+F9, te vas al mensaje y le das a OK, el oly se debe de parar justo despues de la llamada al mensaje.
slds
|
|
|
En línea
|
|
|
|
Amalthia_
Desconectado
Mensajes: 36
|
Gracias Tena por tu respuesta, El problema es que cuando me sale el primer mensaje para introducir la contraseña, (ya puse el bp al MessageBoxA) ya es demasiado tarde. Igual me da introducir la contraseña y empezar a utilizar el programa, que no hacer nada. El tiempo empieza a correr inexorablemente desde que hago click para iniciar el programa. A los 2 minutos recibo el mensaje "your time is up!". Lo que ocurre es que mis conocimientos de cracking son limitados, (soy musico) y no se como se tracea una rutina de SetTimer. Creo que sabiendolo hacer debe ser relativamente sencillo. Está claro que al iniciar el programa lo primero que hace es guardar el valor del reloj, (hora actual) después le añadira los 2 minutos y por fin comparara los dos valores, enviandome el mensaje "your time is up! cuando se iguale o sobrepase el valor indexado. Consiguiendo cambiar el jmp que termina el programa por uno que vuelva siempre al test o cmp quedaria solucionado el tema. Tengo clara la teoría pero no se como tracear una rutina de manipulacion del reloj del sistema. Gracias de nuevo por cualquier sugerencia. salu2 Amalthia_
|
|
|
En línea
|
|
|
|
tena
Desconectado
Mensajes: 668
|
The SetTimer function creates a timer with the specified time-out value.
UINT SetTimer(
HWND hWnd, // handle of window for timer messages UINT nIDEvent, // timer identifier UINT uElapse, // time-out value TIMERPROC lpTimerFunc // address of timer procedure <=== AQUI );
Para tracear el SetTimer debes ir a la direccion del procedimiento.
La verdad que no le entiendo nada a ese programita, parecen ejercicios pero baa, la cosa es que vi que esta compilado con RealBasic...
Comparando con uno que vi hace poco este tambien crea una sección y me parece que la papusa esta ahi dentro.
Si queres caer cuando crea la ventana nomas ponele un bp en CreateWindowExA.
La primera vez que cae en el SetTimer si le cambias el tiempo a -1, despues al terminar una melodia se queda como tonto repitiendo un tono.
slds
|
|
|
En línea
|
|
|
|
tena
Desconectado
Mensajes: 668
|
Bueno mirate por aqui, ponele unbp a ShowWindow y veras como cae en la primera ventana, luego en la que pones el pass, y luego en la nag que te sale y se cierra. 0040DAC5 |CMP BYTE PTR DS:[EBX+92],0 <=== LA PAPA 0040DACC |JE SHORT Tap_It_D.0040DADA 0040DACE |PUSH 5 ; /ShowState = SW_SHOW 0040DAD0 |MOV EAX,DWORD PTR DS:[EBX+58] ; | 0040DAD3 |PUSH EAX ; |hWnd 0040DAD4 |CALL DWORD PTR DS:[<&USER32.ShowWindow>] ; \chankui 0040DADA |MOV EBX,DWORD PTR DS:[EBX+80] 0040DAE0 |TEST EBX,EBX 0040DAE2 \JNZ SHORT Tap_It_D.0040DAB0 0040DAE4 POP EBX 0040DAE5 RETN el contenido de [ebx+92] debe ser 0, o cambias el JE por un JMp, pero bueno yo no entiendo este progui, porque se queda ahi tocando la misma nota aunque las figuras van cambiando, y es muy lento suerte
|
|
|
En línea
|
|
|
|
Amalthia_
Desconectado
Mensajes: 36
|
Hola tena,
Ante todo muchas gracias por tu paciencia.
Este programita es el más sencillo de un lote de 33 dedicados a la Teoría de la Musica, (Armonia, claves, escalas, arpegios, inversiones, etc) aquí el alumno solo tiene que repetir los golpes que oye y aprender el ritmo. No son notas, es ritmo. Como todos los programas tienen el mismo sistema de protección, pense que si aprendía a liberar uno, podría liberar los otros también. Me equivoque. Es más dificil de lo que pensaba.
Como me dijiste puse un bp, (Toggle breackpoint on import) a ShowWindow, pero cuando pulso F9 no me va directamente a la primera ventana (al menos yo no la veo) ¿Tengo que seguir pulsando F9 o F7/F8 o hay otra forma de tracear? Por otro lado necesitaría saber como se llega a 0040DAC5, (sin usar GO TO expresión) ya que al tener cada programa un tamaño diferente esta dirección seguramente cambiara. Por último, el cambio de JE a 0040DADA por un JMP no me sirvio de nada, tampoco el JMP a 0040DAE5. ¿Ayudaria algo el JMP a 0040DADA cambiando el MOV para que vuelva a poner EBX+80 en 0?
Tena, es muy fácil aprender contigo pero estoy empezando ahora y por lo tanto, comprendería perfectamente que no quieras perder tu tiempo conmigo.
Gracias de nuevo por todo lo que me has ayudado hasta ahora.
salu2 :-)
|
|
|
En línea
|
|
|
|
tena
Desconectado
Mensajes: 668
|
Ademas del salto de 40DACC que debes cambiar por un JMP, me olvide de decirte que tambien debes de cambiar aqui
00497A8B CMP [ARG.1],0 00497A8F JE SHORT Tap_It_D.00497AC9 <==CAMBIALO POR JMP 00497A91 MOV EAX,[ARG.1] 00497A94 CMP DWORD PTR DS:[EAX+1C],0 00497A98 JE SHORT Tap_It_D.00497AC9 00497A9A MOV EAX,[ARG.1] 00497A9D MOV ECX,DWORD PTR DS:[EAX+1C] 00497AA0 CALL Tap_It_D.0040DE50 00497AA5 MOV EAX,[ARG.1] 00497AA8 MOV EDX,DWORD PTR DS:[EAX+1C] 00497AAB MOV ECX,EDX 00497AAD MOV ESI,DWORD PTR DS:[ECX] 00497AAF MOV ECX,EDX 00497AB1 CALL DWORD PTR DS:[ESI+178] ; al ShowWindow
debes cambiar el JE por un jmp para evitar que te muestre el mensaje.
slds
|
|
|
En línea
|
|
|
|
biribau
Desconectado
Mensajes: 181
|
Hola He encontrado otra forma mas facil... es un programa realmente sencillo Lo comentaré por pasos: 1. Primero ponemos un break en SetTimer al arrancar, continuamos con F9 2. Rompemos en SetTimer, vemos que el tiempo es de 90000 ms. o sea, el minuto y medio de trial, cambiamos ese param por uno pequeño, con CTRL+E 90 00 00 00 3. Ponemos un bp tambien en la rutina a la que llamará cuando cumpla el tiempo(TimerProc) o sea, en 4725c0 y le damos a F9 4. Caemos en la rutina a la que llama el timer, sin embargo no la podemos bypasear porque es llamada por otros timers del programa, como puede ser esto? el codigo luce tal que así: 004725C0 PUSH EBX 004725C1 PUSH ESI 004725C2 PUSH EDI 004725C3 . PUSH EBP 004725C4 . SUB ESP,8 004725C7 . MOV EBX,DWORD PTR SS:[ESP+24] 004725CB . PUSH EBX ; /TimerID 004725CC . PUSH DWORD PTR SS:[ESP+20] ; |hWnd 004725D0 . CALL DWORD PTR DS:[<&USER32.KillTimer>] ; \KillTimer 004725D6 . MOV EAX,DWORD PTR DS:[4CC234] 004725DB . PUSH EAX 004725DC . PUSH EBX 004725DD .CALL Tap_It_I.004457D0 004725E2 . POP ECX 004725E3 . POP ECX 004725E4 . MOV DWORD PTR SS:[ESP+4],EAX 004725E8 . CMP WORD PTR DS:[EBX+1C],2 004725ED . JE SHORT Tap_It_I.00472610 004725EF . C743 28 000000>MOV DWORD PTR DS:[EBX+28],0 004725F6 .>MOV WORD PTR DS:[EBX+1C],0 004725FC . TEST EAX,EAX 004725FE . JE Tap_It_I.004726D1 00472604 . PUSH EBX 00472605 . CALL DWORD PTR SS:[ESP+8] <------------------OJO depende del parametro 00472609 . POP ECX 0047260A JMP Tap_It_I.004726D1 bien pues parece que está escrito en un lenguaje OO de estos que tiene virtual table donde se almacenan las direcciones de los métodos (como dijo tena anteriormente esta posiblemente escrito en RealBasic el cual es orientado a objetos), por eso la primera llamada que salta a la vista es un call ss:[esp+8] en 472605, de hecho es la única que puiede ser dinámica, he rastreado la anterior y no parece que se use el valor del identificador del timer que podía ser otra posibilidad no? Si no tocamos nada en el programa...(y poniendo 90 de tiempo al SetTimer no nos dara tiempo), el primer timer que saltara sera el del trial... 5. Nos metemos con F7 dentro de la llamada sospechosa esa, y ponemos un hardware break al principio(por alguna razon olly me desactiva el bp software quizas por estar fuera de la sección de codigo). Ahora si ejecutamos desde el comienzo el programa vemos que esa zona no se ejecuta cuando salta el timer por otras razones que no sean las del trial. Por tanto podemos deducir que esa es el corazon estatico culpable de la ventanita de trial y por ello vamos a eliminarla. 6. Si has reiniciado olly sigue de nuevo los pasos 1-4, y cuando entres en esa funcion, ensamblamos un retn (en 1843ed), y parece que funciona... NOTA: no he podido probar el programa bien porque no me funciona el sonido en la máquina virtual, supongo que suena Saludos, es mi primer post, espero no haber metido mucho la gamba jejejee
|
|
|
En línea
|
|
|
|
Amalthia_
Desconectado
Mensajes: 36
|
Hola tena y biribau,
Parece que al final no es tan sencillo.
Tu solución de los JMPs tena, no cambia nada: el "YOUR TIME IS UP! sigue saliendo religiosamente.
He seguido los pasos que tu explicas biribau, pero al menos a mi, cuando me sale el primer trial, al introducir la contraseña y dar al enter el programa se cuelga. Veo que el olly indica que está running pero queda todo bloqueado. Por otro lado, y esto, como principiante, es para mi fascinante, he comprobado que al intentar parchear el programa con el WinHex, cuando busco la dirección 1843eD, (su equivalente) me dice que no existe. Efectivamente al volver a ejecutar el olly y sin cambiar nada puse un Go to Expression 001843eD y me responde que no existe. Es necesario iniciar la rutina del SetTimer para que se genere esa dirección, así es que mi pregunta es la siguiente: ¿Como consigo meter en un Editor Hex el retn al que tú te refieres si no encuentra el código donde ponerlo?
Aprendo mucho con vosotros, me hacéis pensar y os estoy muy agradecido. Me encantaría que pudieseis seguir ayudándome.
salu2 :-)
|
|
|
En línea
|
|
|
|
biribau
Desconectado
Mensajes: 181
|
Vale, a mi me funciona con lo que te dije, = es que no explique bien los pasos, donde tienes que poner el ret no es el lugar del "call ss:[esp+8]" sino en la funcion donde se mete, o sea, le das a F7 y luego espacio y retn. La funcion esa ha de ser la del trial, para llegar a ella tienes que esperar que pase el tiempo o hacer el hack al SetTimer, para que sea la primera en la que entra, si te intentas loguear romperas otra vez en ese call ss:[esp+8] peeero no debes parchear la funcion más veces, ya que esta cambia con el tiempo segun quien llame al procedimiento(no me refiero a que cambie el codigo, cambia solo la direccion a la que salta, recuerda que es un call [esp]). He probado en otro ordenador y tienes razon, no encuentra esa direccion, me he dado cuenta de que es dinamica, ademas si la intentas buscar al principio de la ejecución no la encuentra tampoco, ¿horror? no tanto... Despues de trazar un poco el programa me doy cuenta de que esa parte de codigo la carga en runtime, y para ello utiliza las funciones GlobalAlloc(para reservar el bloque de memoria donde va a escribir el codigo) y _lread, _lopen, _lseek para cargar el codigo.... No lo mire más pero parchearlo no deberia ser mas dificil que coger un numero suficientemente grande de bytes seguidos de la funcion a parchear y buscarlos en el fichero, asegurate de que no hay mas de una ocurrencia o tendras problemas. Si quieres seguir la via honesta, descifra los parametros de _lseek y varios _lread y pista. El lugar donde los encuentras es aqui: Saludos.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Limite Tiempo
Ingeniería Inversa
|
MGZS
|
7
|
4,029
|
27 Febrero 2011, 21:13 pm
por MGZS
|
|
|
LIMITE DE TIEMPO CON UN .BAT O SCRIPT (FECHA DE CADUCIDAD)
Scripting
|
GEORGEFRT
|
3
|
8,429
|
16 Noviembre 2011, 03:16 am
por Eleкtro
|
|
|
Límite de tiempo/tamaño en videos HD de Youtube
Multimedia
|
nhaalclkiemr
|
2
|
5,507
|
17 Noviembre 2012, 20:58 pm
por bettu
|
|
|
Límite de tiempo de sesión... uuuuffffff...
Sugerencias y dudas sobre el Foro
|
[Arg] $triker;
|
1
|
3,674
|
14 Julio 2016, 18:20 pm
por Machacador
|
|
|
Limite de tiempo por acción?
Sugerencias y dudas sobre el Foro
|
z3nth10n
|
5
|
3,301
|
21 Febrero 2017, 20:06 pm
por #!drvy
|
|