Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: aguml en 16 Abril 2007, 02:20 am



Título: ¿¿Seria correcto o tendria que saltar a una posicion anterior??
Publicado por: aguml en 16 Abril 2007, 02:20 am
Bueno pues la aplicacion segun el peid dice que esta hecha con visual basic 6 aunque he probado con el smartcheck y no pude ver nada con el. Se llama LC1X2 v.3.3.
Ya consegui quitar las que te avisan de que es shareware nada mas arrancar y ahora tengo aqui la que te sale al cerrar la aplicacion y creo que lo tengo pero quiero preguntar algo por si peco de listillo y hago algo mal.
Decir antes de nada que esta aplicacion no se puede registrar puesto que si la quieres que no sea de evaluacion de 30 dias tendrias que descargartela de un lugar privado y pagando.

Mi duda es la siguiente:

(http://aycu31.webshots.com/image/13710/2000890640495193597_rs.jpg)

¿seria correcto mandar el salto ahi o tendria que mandarlo a algun sitio anterior para liberar la memoria o alguna cosa?
Es que justo encima hay un call a una api que tiene pinta de que sea para liberar memoria o algo puesto que no se para que vale esa api.
Decir que mandando la el salto a la call que señalo en la imagen  la aplicacion se cierra sin dar problemas.


Título: Re: ¿¿Seria correcto o tendria que saltar a una posicion anterior??
Publicado por: tena en 16 Abril 2007, 03:55 am
Aparentemente si libera memoria por ahi arriba, pero bueno si te funciona, no esta mal. Y otra cosa, dices que expira despues de 30 dias, tendrias que parchearlo tambien para que eso no suceda.

Saludos


Título: Re: ¿¿Seria correcto o tendria que saltar a una posicion anterior??
Publicado por: aguml en 16 Abril 2007, 04:57 am
Lo de los 30 dias de prueba no tengo mas remedio que esperar para ver el mensaje que me lanza y poder atacarlo puesto que adelantando la fecha no sucede nada. Ya le he quitado varias limitaciones que consistian en que solo funcionaban las opciones hasta la jornada 5. Como digo, ya estan todas esas "reparadas" jeje. Y ahora, si alguien no lo remedia con una gran idea, a esperar 30 dias. Este programita me lo pidio un amigo y como estoy empezando pues me lo tome como algo personal y la verdad es que investigando este programita he aprendido mucho sobre la forma de proteger los programas de este fabricante que es la misma forma para todos.
Por supuesto, quiero dejar claro que yo no le voy a cobrar nada a este amigo y que lo estoy haciendo para aprender a la vez que ayudo a alguien y porque le debo un favor aunque solo nos conozcamos de un foro y despues en el msn pero me hizo falta algo de madrid y el se ofrecio a ir a la tienda y ver si lo habia y si lo habia me lo mandaba por correo y aunque la tienda ya no existia, la intencion es lo que cuenta y el se porto yendo a buscarla mientras que otro se nego.
Bueno, Bueno, que esto no viene al caso.
a ver si alguien me ilumina y me dice alguna forma para conseguir que me muestre ese mensaje de la caducidad de los 30 dias o si no a esperar.


Título: Re: ¿¿Seria correcto o tendria que saltar a una posicion anterior??
Publicado por: Hendrix en 16 Abril 2007, 14:57 pm
Citar
a ver si alguien me ilumina y me dice alguna forma para conseguir que me muestre ese mensaje de la caducidad de los 30 dias o si no a esperar.

Si no funciona cambiando el tiempo el programa debe guardar algun valor en el registro o en algun archivo....intenta parchear las apis del registro para ver si lee alguna o si genera algun archivo...

Un Saludo.  ;) ;)


Título: Re: ¿¿Seria correcto o tendria que saltar a una posicion anterior??
Publicado por: karmany en 16 Abril 2007, 16:57 pm
Hola aguml de nuevo...

Yo lo primero particularmente no pondría el nombre del programa.

Yo veo lo siguiente:

1- Ese programa está compilado en Visual Basic, fíjate cómo llama a las funciones de Visual Basic (a la librería MSVBVM60.dll).

2- Fíjate una cosa muy importante. Ese salto que hace o no hace según, lo realiza o no tras comparar que en una zona de la memoria sea el valor = cero:
CMP DWORD PTR SS[EBP-58], 0

Ya te está dando un dato importante. Y ese valor de EBP-58 en la linea anterior te pone el valor de EAX.
En definitiva JGE salta si el valor es mayor o igual, es decir, si EAX es menor que 0 (FFFFFFFF) NO saltará.

Podrías intentar averiguar porqué EAX tiene ese valor poniendo BP.

Eso de poner directamente un salto a vba__End no está bien, porque VB va liberando de memoria variables que utiliza.. si no hubiese otra opción pues vale pero no en este caso.
Si dices que ya todo lo tienes arreglado pues ahí puedes poner un simple JMP sustituyendo al JGE y ya está arreglado.

Pero yo analizaría porqué EAX te da un valor menor que 0.


Título: Re: ¿¿Seria correcto o tendria que saltar a una posicion anterior??
Publicado por: aguml en 16 Abril 2007, 22:34 pm

1- Ese programa está compilado en Visual Basic, fíjate cómo llama a las funciones de Visual Basic (a la librería MSVBVM60.dll).

Ufffffff estoy verdisimo y la verdad es que no entiendo nada de lo que explicas ahi.


2- Fíjate una cosa muy importante. Ese salto que hace o no hace según, lo realiza o no tras comparar que en una zona de la memoria sea el valor = cero:
CMP DWORD PTR SS[EBP-58], 0

Ya te está dando un dato importante. Y ese valor de EBP-58 en la linea anterior te pone el valor de EAX.
En definitiva JGE salta si el valor es mayor o igual, es decir, si EAX es menor que 0 (FFFFFFFF) NO saltará.

Podrías intentar averiguar porqué EAX tiene ese valor poniendo BP.

Eso de poner directamente un salto a vba__End no está bien, porque VB va liberando de memoria variables que utiliza.. si no hubiese otra opción pues vale pero no en este caso.
Si dices que ya todo lo tienes arreglado pues ahí puedes poner un simple JMP sustituyendo al JGE y ya está arreglado.

Pero yo analizaría porqué EAX te da un valor menor que 0.

Pues no se exactamente que es lo que busca en esa comparacion, lo que si se es que si la obligo a saltar no pasa nada y si la nopeo tampoco. Ademas los saltos que hay mas arriba ninguno se dirige a un lugar que salte el mensaje y probe a saltar al vba_end y funciono. Creo que el autor ha hecho modificaciones para que no se pueda parchear simplemente con un jmp o un nop.

Si no funciona cambiando el tiempo el programa debe guardar algun valor en el registro o en algun archivo....intenta parchear las apis del registro para ver si lee alguna o si genera algun archivo...

Yo no se hacer eso, estoy empezando aun y no se que apis son esas ya que de visual basic he tocado muy poco. Me vendria muy bien un listado con sus respectivas descripciones y para que se usa cada una.


Título: Re: ¿¿Seria correcto o tendria que saltar a una posicion anterior??
Publicado por: karmany en 17 Abril 2007, 01:27 am
Sí que veo que estás muy verde y ese programa tiene pinta de ser muy fácil... mira te voy a ayudar ya que pones interés.

Te mando un privado...


Título: Re: ¿¿Seria correcto o tendria que saltar a una posicion anterior??
Publicado por: aguml en 17 Abril 2007, 02:23 am
ya lo tienes con el link.
Gracias por intentar ayudarme.