Encontrar el método que instancia un Form

Iniciado por Eleкtro, 11 Enero 2015, 04:25 AM

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

Eleкtro

Buenas!

Estoy utilizando una aplicación completamente gratuita desarrollada en Delphi que al iniciar el programa (justo al iniciarse) muestra 2 Forms insufribles con spam, ventanas que debo cerrar para que me muestre el Form principal de la aplicación, y al cerrar el Form principal (es decir, al cerrar la aplicación) vuelven a salir las molestas ventanas de spam que debo cerrar una vez más.

No encuentro ningún ejemplo sencillo en Google, todo es complejo de entender, como lo que explican en esta url, y no me aclaro.

¿Alguien me puede orientar un poco acerca de como puedo buscar y encontrar las instrucciones necesarias que debo noopear para bypasear esos Forms, en IDA Pro u OllyDbg 1.0?

EDITO:
Con el decompilder DEDE creo que he encontrado los RVA de los métodos que instancian los forms de publicidad (no se que hacer con los RVA), posteriormente he desensamblado esos métodos directamente en el DEDE para obtener los offsets del evento "FormCreate", y luego en un editor hexadecimal he noopeado los offsets, pero me tira error la aplicación :-/

Gracias

Saludos!








MCKSys Argentina

Hola!

IDR es lo recomendado a la hora de analizar ejecutables hechos en Delphi.

Saludos!
MCKSys Argentina

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


Eleкtro

#2
@MCKSys Argentina
Gracias, ¿podrías indicarme más o menos que es lo que debo buscar o en que debo fijarme en el IDR?

Supongo que lo que he marcado en rojo es la llamada al método "principal":


Dentro, no se si voy bien encaminado, pero veo que se instancian 3 forms, y en un principio creo que el primero debería ser el TfmSplash, el segundo TfmAbout, y el tercero TfmMain (o al menos ese es el orden al ejecutar la app de forma normal), quiero ocultar los dos primeros.. que son spam.

Pero ahora, creo que en el IDR no puedo modificar directamente los ops, así que copio esos 3 offsets y abro el ollyDbg, bien, ¿pero que hago?, ¿cómo debo cambiarlo?,
¿debo noopear los 2 primeros call, o debo "intercambiar" la primera instrucción por la última para que salte directamente al Form principal?, ¿y como hago entonces para intercambiar las posiciones?:



Saludos!








MCKSys Argentina

Cita de: Eleкtro en 11 Enero 2015, 07:48 AM
Pero ahora, creo que en el IDR no puedo modificar directamente los ops, así que copio esos 3 offsets y abro el ollyDbg, bien, ¿pero que hago?, ¿cómo debo cambiarlo?,
¿debo noopear los 2 primeros call, o debo "intercambiar" la primera instrucción por la última para que salte directamente al Form principal?, ¿y como hago entonces para intercambiar las posiciones?:

IDR sólo desemsambla. Los cambios los debes hacer con Olly o un editor hexa o con lo que más gustes.

Con respecto a "qué debes hacer": No recuerdo bien, pero creo que en delphi primero hay que crear un form para luego usarlo. Si NOPeas el CreateForm, quizás luego salte un error pues la aplicación intentará mostrar un form que no se ha creado.

Deberías buscar la parte del código donde haga un "Show" o "Activate" (la verdad, no recuerdo cómo hace delphi para mostrar un formulario).
Revisa los metodos de los forms que quieres quitar.

Saludos!

PD: Por lo que veo el programa se llama iconedit, pero hay muchos con ese nombre...  :P
MCKSys Argentina

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


Eleкtro

#4
Cita de: MCKSys Argentina en 11 Enero 2015, 08:55 AMDeberías buscar la parte del código donde haga un "Show" o "Activate" (la verdad, no recuerdo cómo hace delphi para mostrar un formulario).
En Delphi se utiliza el método Show para mostrar un Form, pero no encontré nada de eso en el DEDE/IDR (debido a la inexperiencia).

CitarIDR sólo desemsambla. Los cambios los debes hacer con Olly o un editor hexa o con lo que más gustes.
El ollydbg lo odio, me cuesta manejarme incluso para encontrar el entrypoint de la aplicación (de verdad, no se encontrarlo en ollydbg), y todo sale con una fuente de letra texto muy pequeña.

Con el IDA me llevo mejor, pero todo son complicaciones de diseño y de soporte con este programa ...a pesar de ser el nº1, no puede ni generar un .exe y hay que buscarse la vida para para modificar un op (primero hay que editar un archivo de configuración para añadir/activar la opción de edición) y/o para parchear el archivo de diferencia de bytes (.dif) que genera IDA, en resumen... se invierte mucho más tiempo para acabar cometiendo siempre el mismo error.

Todo lo que noopeo me tira errores de memoria, pero bueno, ¡seguiré intentándolo!

saludos








MCKSys Argentina

Cita de: Eleкtro en 11 Enero 2015, 11:49 AM
El ollydbg lo odio, me cuesta manejarme incluso para encontrar el entrypoint de la aplicación (de verdad, no se encontrarlo en ollydbg), y todo sale con una fuente de letra texto muy pequeña.

Toda la interface de Olly se puede configurar. Incluso dispones de varios tipos de fuente para las ventanas...  ;)

Saludos!
MCKSys Argentina

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


Flamer

Hola Elektro lo que dise fly con lo poco que lei por que no lei todo es que encuentres la funcion que manda crear la ventana y luego que la encuentres es solo cuestion de redirigir el flujo del programa o sea que no se ejecute dicha funcion.
Para en pesar yo uso Olly y una de las apis que crea ventanas es CreateWindowEx si no me equivoco ya que estoy con el celular e.
Puedes empezar poniendo un BreakPoint en dicha api, nomas que no la nopees por que pienso que te marcara error, mejor dirijete unas lineas atras y modifica algunos valores para que no se ejecute y cambees el curso del programa.

Saludos Flamer y con el Resource Hacker no puedes quitar las ventanas


Flamer

Me puedes manda una muestra para analisarla

Salu2 Flamer

suicidexcode

Estimado hágale caso a lo que dice Flamer, con Olly deberías volver un par de lineas atrás o buscar desde donde se hace la llamada a esa instancia que muestra la ventana, quizás encuentres algún Jump y si es así es mucho mas fácil redirigir el flujo.

Consejo: utiliza Olly es mas sencillo de lo que crees.

hay una configuración del Olly que te muestra con una linea al costado donde te redirige algún Jump y también para que resalte dichas instrucciones.

si mal no recuerdo también puedes marcar una instrucción y con el clic derecho si buscas hay una opción que te dice buscar desde donde es llamada la instrucción seleccionada.

Aunque creo que lo que mas te puede ayudar en tu problema es depurar el programa paso a paso creo que con el Olly era con F7 o F8 + Alt no estoy seguro pero si era una combinación con esas teclas y te comienza  a correr el programa y a mostrar cada linea de código que se ejecuta y te detienes en el momento que abre la ventana que te molesta y comienzas a seguir hacia atras.

Sorry si lo que dije te enreda.

Saludos,
Alejandro Burgos