programita

Iniciado por ana6, 22 Mayo 2010, 06:45 AM

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

LSL

#40
ahí tambien retornas a una zona comun de ejecución de eventos, y te costará un rato salir de bucles de programación.

Bueno lo siguiente, no es lo mas ortodoxo, pero es 100% efectivo con el componente timer, y es dejarlo sin el evento asociado Ontimer, lo que se puede hacer facilmente con un editor de recursos, en este caso he utilizado el eXeScope, ...abrimos el ejecutable a modificar, te desplazas a Resource -> RCData ->TFMMAIN -> pulsas Control+F para buscar el texto TimerTimer, pulsas OK y caes en el primer texto encontrado, seleccionas la linea "OnTimer = TimerTimer", click derecho y Delete, asi en los 4 objetos timer, te cambias de formulario o sales del eXeScope y te pregunta si quieres guardar los cambios, pulsas OK, y a tomar viento los eventos asociados a la función TimerTimer.



Otra forma mas profesional es poner el valor de intervalo=timeout = 0 cuando se le pasa los parametros a la Api SetTimer en tiempo de ejecución, con esto el evento ontimer asociado no se generará.

Cargamos el ejecutable en Ollydbg, parado en el EP, en la ventana de desensamblado pulsamos Control+N, (nos muestra la ventana de nombres en el corriente módulo, sobre el titulo de la ventana escribimos settimer, con lo que nos localiza y coloca encima de dicha función, pulsamos Intro, para que nos muestre todas las llamadas a dicha funcion importada, le colocamos a cada llamada un BP con F2.
Corremos el programa con F9 y cada vez que utilize un timer, parara en dicha  call a settimer. Ojo no todos los settimer estaran asociaciodos al mensaje de registrar, hay algunos timer necesarios para que el programa realiza trabajos repetitivos necesarios para el buen funcionamiento, por lo que nos fijaremos en cuales son los que nos interesa deshabilitar y cuales no nos interesa por tener otra función encomendada. Por ejemplo hay un settimer que vamos a pasar por el cada vez que querramos ver un menú, a este le quitamos el BP de interrupción para que nos deje manejar el programa.

Si nos fijamos en la composición de los parametros que se le pasan a la función SetTimer que los podemos ver en el Stack cuando se va ajecutar el call a la Api, vemos que son 4 parametros.

Antes del call al SetTimer, tenemos 4 ordenes PUSH con distintos valores, y en el 2º push es en el que se le introduce el valor de milisegundos a procesar, asi que se le pone un BP con F2 en dicho segundo PUSH, para encontrar el ó los SetTimer que se utilizan para contar los 7 minutos aproximadamente, pues en ese 2º push, tenemos que cambiarle al valor 0 para que no se ejecute el OnTimer.

Para cambiarle el valor, si tienes lugar para un par de bytes, puedes ponerle directamente PUSH 0, pero si solo tienes un byte, por ejemplo un PUSH EAX, que utiliza solo un byte con el valor 50, tienes que subir hasta donde EAX coge el valor, para cambiarlo a valor 0, asi llegará al PUSH EAX = 0.

por ejemplo:

005BCBE3  |.  6A 00                PUSH 0                                             ; /Timerproc = NULL
005BCBE5  |.  8B45 FC            MOV EAX,DWORD PTR [EBP-4]        
005BCBE8  |.  0FB640 3E         MOVZX EAX,BYTE PTR [EAX+3E]      
005BCBEC  |.  69C0 E8030000 IMUL EAX,EAX,3E8                          
005BCBF2  |.  50                     PUSH EAX                                       ; |Timeout
005BCBF3  |.  6A 03                PUSH 3                                           ; |TimerID = 3
005BCBF5  |.  8B45 FC            MOV EAX,DWORD PTR [EBP-4]        
005BCBF8  |.  8B40 58            MOV EAX,DWORD PTR [EAX+58]    
005BCBFB  |.  50                    PUSH EAX                                       ; |hWnd
005BCBFC  |.  E8 0707E5FF     CALL <JMP.&user32.SetTimer>         ; \SetTimer


como ves el 2º PUSH, introduce el valor Timeout =Intervalo en milisegundos
y solo utiliza un byte ( 50 = PUSH EAX )
ahí no podemos poner PUSH 0 ( que equivaldria a 6A 00  porque pisariamos el siguiente codigo con lo que daria error la función ),
entonces en la linea superior tenemos que EAX coge su valor al multiplicarse por 3E8 (1000 en decimal), ahí si podemos modificar para que el valor de EAX se multiple por 0, con lo que siempre tendremos en PUSH EAX, el intervalo 0.

Saludos.

LSL.

yako-_-

Makina!!!!


Espero ese tute....   :silbar:

Saltar una mochila y la limitación...  ;-)

Muy interesante  ::)

un saludo!!!!
Para que vivir, pudiendo trabajar los Domingos

                                                                Yako-_-

ana6

Hola LSL


e probado lo que dices en el post anterior y aun sigue pidiendo la licencia para el bluetooth

sigue parandose cuando pansan el tiempo.

no es mejor realizarlo licenciado?

se ponga el que se ponga que este licienciado.

o soy una tonta que no se puede realizar?.

ana

LSL

#43
¿ matado los eventos TimerTimer, sigues cayendo en el inicio de dicha función en 0065F25C ?

Tambien te recuerdo que para evitar el mismo mensaje a través de la función "acSenderStartExcute", en la dirección 0065C33C tienes que cambiar la instrucción TEST AX,AX por la de XOR AX,AX, para eso cuando estes encima de dicha dirección, pulsas el espaciador y podras cambiar la instrucción en ensamblador, y si prefieres pulsas Control+E para editarlo en hexadecimal, cambias "66 85 C0" por "66 33 C0", luego tienes que salvar los cambios en el executable, para eso click derecho, linea menu "Copy to executable" la selección o todos los cambios, y despues click derecho en la nueva ventana y "save file".

Saludos.

LSL.

ana6

#44
hola LSL



Te cometo que realizando todo eso y como en el ultimo post sigue parando pidiendo el registro del dongle.


como comente en el anterior post no es mejor lo del registro?.

o es que soy una tonta y no lo estoy realizando  bien.


ana

ana6

hola me podeis ayudar en este programita como realizar el tute por mas que lo intento no puedo.

espero me podais ayudar o decirme como lo ago.

gracias

ana6

hola de nuevo me podeis ayudar con este programita por favor.

ya que soy nueva y no me aclro necesito para que funcione.


gracias

MCKSys Argentina

@ana6: Creo que deberias revisar todo lo expuesto hasta el momento. La solución está ahí. Sólo debes tomarte el tiempo y revisar lo dicho...

Saludos y Ánimo!!
MCKSys Argentina

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


yako-_-

LSL como va ese tute?

Tengo ganas de leerlo  ;)


Un saludo!!
Para que vivir, pudiendo trabajar los Domingos

                                                                Yako-_-

ana6

hola chicos

perdonar pero soy una tonta y no me aclaro

MCKSys Argentina me puedes echar una mano ya que salio otra version nueva y no lo consigo o puedes acerme un tutorial para poder buscar el chico bueno.

estare muy agradecida.

ana