Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: Revolutions en 9 Junio 2010, 22:24 pm



Título: Quitar una imagen de la impresion
Publicado por: Revolutions en 9 Junio 2010, 22:24 pm
Hola todos como vais por estos lares?
Vengo de vez en cuando para leer un poco, en fin lo que a todos poco tiempo.....

Bueno al caso, resulta que tengo un programa en VB6, que a parte de otras limitaciones tiene una imagen que dice TRIAL y lo pone en medio de lo que se imprime y no se como noquearla

Os paso unos datos para ver el paciente en cuestion

VICTIMA: ID FLOW 5.0

DESCARGA: http://www.jollytech.com/download/IDFlowDemo.exe

PROTECCION: cada 30 Minutos de funcionamiento salta un contador con 120 Segundos que te deja block, tiempo de uso 30 dias, protegido contra el cambio de fecha, al imprimir pone cartel de TRIAL.

AVANCES: no tiene hablitado el form de registro, pasado por varios detectores de packer y no tiene, he chequeado con regmonitor y filemonitor, en el registro no he encontrado nada, he dado un paso atras, estoy echo un lio, con XP todo perfecto pero he cambiado de pc con windows 7 y todo son errores, aparte mcafee me ha borrado casi todo los programas de Ingenieria inversa, este reto se me pone muy cuesta arriba, creo que voy a poner XP y volver a lo de siempre, bueno al lio, he decompilado y estoy en proceso de traceo de varias parte del codigo en concreto la direccion 012A577 que donde hace la verificación del trial.

Bueno espero que me ayuden y me den consejo de como seguir.
SALUDOS A LOS GRANDES....

REvo


Título: Re: Quitar una imagen de la impresion
Publicado por: MCKSys Argentina en 9 Junio 2010, 23:19 pm
Si es una imagen, podrias probar con Multiextractor http://www.multiextractor.com/ (http://www.multiextractor.com/). Con ese la puedes reemplazar sin problemas (si no esta empacado).

Todo el tema de timers, etc, lo podrias resolver con VBReformer.

Como siempre, puedes usar Olly y quitar todo a mano :)

Saludos!


Título: Re: Quitar una imagen de la impresion
Publicado por: Mintaka en 10 Junio 2010, 20:49 pm
Hola Revolutions.
Si usas el Olly (como te dice el amigo MCKSys), verás que es fácil dar con las zonas donde están las limitaciones.Por ejemplo buscas en -All referenced text strings- la frase mágica "Trial version".La encuentra fijo y le sustituyes los ascii de las letricas por 20 y bye bye, water mark.La comparación con el 1E (para los días) también la encuentras fijo, etc...
Solo tienes que ponerte y lo sacas.
Suerte,

Mintaka


Título: Re: Quitar una imagen de la impresion
Publicado por: Revolutions en 10 Junio 2010, 21:24 pm
Gracias MCKSys Argentina por tu respuesta

con multiextractor no sale la imagen, quizas este en un error y no era una imagen, bueno sigo con ello y comento.

Inestimable MINTAKA tengo suerte contigo de verdad cada vez que pido ayuda ahi estas, me he alegrado mucho de ver que sigues en la brecha.

Lo intentare, pero creo que ya vi lo de ALL REFERENCED STRINGS y no estaba

Ya comento, GRACIAS de nuevo por vuestra ayuda

SALUDOS


Título: Re: Quitar una imagen de la impresion
Publicado por: Revolutions en 14 Junio 2010, 12:23 pm
Hola, los progresos son regulares, como bien dijo MINTAKA era correcto los encuentra en las referencias, (no he conseguido lo del 1E por no saber como)estan en unicode pues el programa es multilenguaje, he nokeado para que no lo imprima pero al intentar grabar las modificaciones no me deja pues dice que es la dll del sistema VB6.

Alguna ayuda mas por favor. GRACIAS


Título: Re: Quitar una imagen de la impresion
Publicado por: Mintaka en 14 Junio 2010, 14:41 pm
... (no he conseguido lo del 1E por no saber como)..........al intentar grabar las modificaciones no me deja pues dice que es la dll del sistema VB6.


1Eh=30d, que son los días de trial y normalmente los puedes encontrar buscando en la ventana del desensamblado, la instrucción PUSH 1E.
Es posible que te salga más de una ocurrencia.Es cuestión de poner BP y mirar que hace más adelante con ese valor 1E y así vas descartando.Pero me da la impresión que va a ser en la primera que te pare.
Y en cuanto a las modificaciones es que no lo estás haciendo en el lugar adecuado.Hazlo con un editor hexadecimal buscando la frase en unicode y creo que te saldrá más o menos por el offset 0024BB2A.
Saludos,

Mintaka


Título: Re: Quitar una imagen de la impresion
Publicado por: gastonp en 15 Junio 2010, 00:48 am
Estuve buscando las cadenas de texto y siguiendolas pude hacer las siguientes modificaciones:

Código:
012A6A3C   .  FF15 4C114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaOnErro>;  MSVBVM60.__vbaOnError
012A6A42   .  E8 09020000   CALL IDFlow.012A6C50
012A6A47   .  3BC6          CMP EAX,ESI
012A6A49      7F 15         JG SHORT IDFlow.012A6A60
012A6A4B   .  E8 00E90B00   CALL IDFlow.01365350                      ;  mensaje trial over
012A6A50   .  8975 E0       MOV DWORD PTR SS:[EBP-20],ESI
012A6A53   .  FF15 30114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaExitPr>;  MSVBVM60.__vbaExitProc
012A6A59   .  68 D56A2A01   PUSH IDFlow.012A6AD5
012A6A5E   .  EB 74         JMP SHORT IDFlow.012A6AD4
012A6A60   >  C745 E0 FFFFF>MOV DWORD PTR SS:[EBP-20],-1

cambiando el salto JG de 012A6A49 por un JMP podemos seguir usandolo despues de los 30 dias.

Para sacar el texto de Trial version en la impresión:

Código:
010B1E31      .  FF15 80104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeOb>;  MSVBVM60.__vbaFreeObjList
010B1E37      .  83C4 1C       ADD ESP,1C
010B1E3A      .  66:85F6       TEST SI,SI
010B1E3D         0F84 D0000000 JE IDFlow.010B1F13                        ;  mensaje trial version en vista previa impresion
010B1E43      .  57            PUSH EDI
010B1E44      .  8B75 2C       MOV ESI,DWORD PTR SS:[EBP+2C]
010B1E47      .  56            PUSH ESI
010B1E48      .  8B45 28       MOV EAX,DWORD PTR SS:[EBP+28]
010B1E4B      .  50            PUSH EAX
010B1E4C      .  8B4D 24       MOV ECX,DWORD PTR SS:[EBP+24]
010B1E4F      .  51            PUSH ECX
010B1E50      .  8B55 20       MOV EDX,DWORD PTR SS:[EBP+20]

hay que cambiar el JE que esta en 010B1E3D por un JMP. Esto ultimo lo probe en la vista de impresion y funciona bien. No se si al imprimir saldra bien ya que no tengo impresora en casa para probar.

Tambien con el VB Decompiler encontre un form que se llama frmTrialPause que es el que aparece cada 30 minutos. Habria que buscar el salto para evitarlo.

Otra cosa que me llamo la atencion es que hay un form llamado frmActivation pero dentro del programa no veo ninguna opcion para registrarlo.


Título: Re: Quitar una imagen de la impresion
Publicado por: PeterPunk77 en 15 Junio 2010, 01:02 am
Esta es la línea donde empieza el prodecimiento que imprime " Trial Version " en las tarjetas:
Código
  1. 010A93A0     55                     PUSH EBP
y basta con convertir esa línea en un RET (0xC3)

Esta es la línea donde empieza el procedimiento que controla el período de prueba:
Código
  1. 00F99640     55                     PUSH EBP
y basta con convertir esa línea en un RET (0xC3)

Con esos dos parches el programa ya da no caduca ni muestra el texto. Pero podemos quitar esa ventanita que al arrancar nos dice que nos quedan 30 días. Y ésta es la línea donde comienza el procedimiento que nos muestra dicha nag:
Código
  1. 012A5060     55                     PUSH EBP
y basta, nuevamente, con convertir esa línea en un RET (0xC3)

Y si queréis que no os salga la ventana que pregunta qué tipo de versión queremos evaluar (por cierto yo no noto diferencia entre ellas), podéis nopear estas líneas:
Código
  1. 012A6A42     E8 09020000            CALL 012A6C50
  2. 012A6A47     3BC6                   CMP EAX,ESI
  3. 012A6A49     7F 15                  JG SHORT 012A6A60

Saludos.

------------------
Edito porque se me olvidó quitar un mensaje "molesto". Cuando le das a imprimir te sale un messagebox diciéndote que es una versión de prueba y que le va a añadir el texto " Trial Version " a la tarjeta (aunque realmente no lo haga porque lo hemos parcheado antes). Así que podemos parchear la llamada a esa messagebox y el salto como que aceptamos siempre:
Código
  1. 011EE1F7     E8 54AAEBFF            CALL 010A8C50
  2. 011EE1FC     0FBFD0                 MOVSX EDX,AX
  3. 011EE1FF     85D2                   TEST EDX,EDX
  4. 011EE201     75 60                  JNZ SHORT 011EE263
dejándolo así:
Código
  1. 011EE1F7     90                     NOP
  2. 011EE1F8     90                     NOP
  3. 011EE1F9     90                     NOP
  4. 011EE1FA     90                     NOP
  5. 011EE1FB     90                     NOP
  6. 011EE1FC     0FBFD0                 MOVSX EDX,AX
  7. 011EE1FF     85D2                   TEST EDX,EDX
  8. 011EE201     EB 60                  JMP SHORT 011EE263

Y como no me ha llegado a salir la nag esa de la pausa cada media hora pues no la he investigado.

Saludos.


Título: Re: Quitar una imagen de la impresion
Publicado por: gastonp en 15 Junio 2010, 03:48 am
jaja mucho mas facil que estar parchando saltos  :laugh: !! Gracias PeterPunk77, solo tengo una duda: ¿ como llegaste a saber que la rutina de 00F99640 es la que controla el periodo de prueba?
El comienzo de la rutina dice que viene de un jump de 005516E8 pero en esa direccion solo esta el jump y una instruccion sub.
Gracias de nuevo, a vos y a todos los del foro por tomarse la molestia de enseñarnos a nosotros los que recien empezamos.
Un saludo


Título: Re: Quitar una imagen de la impresion
Publicado por: PeterPunk77 en 15 Junio 2010, 14:08 pm
¿ como llegaste a saber que la rutina de 00F99640 es la que controla el periodo de prueba?
Adelanté la fecha de windows para ver el mensaje que salía al haber caducado. Luego puse un punto de ruptura en rtcMsgBox y vi que procedimiento era el que lo llamaba.

Saludos.


Título: Re: Quitar una imagen de la impresion
Publicado por: Revolutions en 15 Junio 2010, 21:00 pm
Como de costumbre.... para quitarse el sombrero.
GRACIAS POR ENSEÑARNOS ALGO CADA DIA.

Una cosa el VBReformer me da problemas cuando decompila en el 4% y se cerraba ¿Alguna sugerencia?

Me siento en Familia.  GRACIAS

Revo


Título: Re: Quitar una imagen de la impresion
Publicado por: gastonp en 15 Junio 2010, 21:47 pm
Citar
Cita de: gastonp en Hoy a las 03:48
¿ como llegaste a saber que la rutina de 00F99640 es la que controla el periodo de prueba?
Adelanté la fecha de windows para ver el mensaje que salía al haber caducado. Luego puse un punto de ruptura en rtcMsgBox y vi que procedimiento era el que lo llamaba.

Saludos.

Hice lo mismo que vos PeterPunk77 pero al romper en rtcMsgBox no lo hace dentro de la rutina de 00F99640. Al principio me fije en la pila para ver a donde regresaba (las rutinas que habian llamado a esta) y no sabia muy bien como encararlo hasta que me di cuenta de que en la pila estaba el texto de que se modifico la fecha en el reloj del sistema y una direccion de retorno. Segui bajando en el stack hasta que encontre una direccion de retorno debajo de la cual ya no estaba ese mensaje y casualmente esa direccion de retorno estaba dentro de la rutina que vos mencionas. Todo esto es para preguntarte si es asi como se debe llegar a ese punto o si hay otra forma de hacerlo.

Citar
Con esos dos parches el programa ya da no caduca ni muestra el texto. Pero podemos quitar esa ventanita que al arrancar nos dice que nos quedan 30 días. Y ésta es la línea donde comienza el procedimiento que nos muestra dicha nag:
Código

012A5060     55                     PUSH EBP

y basta, nuevamente, con convertir esa línea en un RET (0xC3)

Y si queréis que no os salga la ventana que pregunta qué tipo de versión queremos evaluar (por cierto yo no noto diferencia entre ellas), podéis nopear estas líneas:
Código

012A6A42     E8 09020000            CALL 012A6C50
012A6A47     3BC6                   CMP EAX,ESI
012A6A49     7F 15                  JG SHORT 012A6A60

¿Como rompes en esas ventanas para saber desde donde son llamadas, ya que por lo que veo no son MessageBox?

Gracias