Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: nhaalclkiemr en 27 Julio 2007, 17:12 pm



Título: Evitar mensajes de error
Publicado por: nhaalclkiemr en 27 Julio 2007, 17:12 pm
Me gustaría saber si es posible evitar los mensajes de error por falta de archivos en VB6.0

No me refiero a evitar internamente los errores del programa usando por ejemplo "On error ...", me refiero a evitar el mensaje de error k salta si faltan controles ocx que usa nuestro programa, o la librería indispensable en VB6.0 que no me acuerdo como se llamaba.

Lo k me gustaría es k en caso de error se saliera y punto sin mostrar nada...es por un troyano k estoy haciendo, si a la victima le falta algun componente mejor k no salga un error (aunke no funcione el troyano) k k le aparezca un mensaje :-\

saludos ;)


Título: Re: Evitar mensajes de error
Publicado por: ActiveSheet en 27 Julio 2007, 18:42 pm
Por que no simplemente Bineas la libreria que utiliza


Título: Re: Evitar mensajes de error
Publicado por: karmany en 27 Julio 2007, 23:56 pm
El problema es que las librerías las carga el programa antes de llegar al OEP, para entenderlo: antes de ejecutar tu código fuente.
Esa información, no me quiero meter mucho en el tema, está guardada en el PE header y el programa carga las librerías que necesite y además tiene puestas ahí las que necesita..
Por ej. en el caso de VB necesita la MSVBVM60.dll y la carga lógicamente antes de llegar al OEP.

Me parece un tema interesante...

Una cosa que se me ocurre que puedes hacer y te funcionará es modificar la IMAGE IMPORT DESCRIPTOR (para que entiendas esta zona a grandes rasgos: dice qué librerías se van a cargar al comienzo del programa), y dejar lo indispensable para que funcione y después a partir del OEP, pues cargar las otras librerías con LoadLibrary y ya sabes si están o no.
Con esto tienes un problema si quieres hacerlo en VB: que VB para funcionar necesita obligatoriamente su librería: MSVBM60.dll y por este motivo no te dejará hacer nada sin ella. Modificando un programa en VB con ensamblador yo creo (sería cuestión de intentarlo) que sí sabría hacer lo que dices. De todos modos me surge la duda de si por ejemplo quito la librería de VB, si luego al hacer LoadLibrary se cargarán correctamente todas sus funciones con las direcciones correctas... no sé tal vez tenga su complicación.
Si sabes ensamblador te puedo orientar...

PD. Esto q acabo de explicar es mi idea, tal vez he pasado por alto algo elemental... quién sabe...

Un saludo


Título: Re: Evitar mensajes de error
Publicado por: nhaalclkiemr en 28 Julio 2007, 15:58 pm
Weno, en el caso de la librería MSVBVM60.dll puede que sea más dificil, pero la verdad a mi me importaría más k faltaran componentes OCX, es bastante común...

Ya me imaginaba que para MSVBVM60.dll se necesitaría añadir algo en ensamblador, pork sin esa librería el programa no se carga. Lo k dices parece buena idea pero la verdad no se como hacerlo...sería lo mismo para evitar errorespor falta de componentes OCX??? No me importa k el programa no funcione, solo k en caso de faltar alguna librería no de un mensaje de error.

Yo a veces lo k hago es crear un archivo SFX que descomprime el ejecutable y en caso de no existir alguna librería, la copia, lo malo es k se añade el peso de las librerías al programa...

Saludos ;)


Título: Re: Evitar mensajes de error
Publicado por: karmany en 29 Julio 2007, 19:19 pm
Estoy echando un vistazo...

Acabo de comprobar que carga los OCX (o por lo menos en mi caso) después de llegar al OEP.
El mensaje que sale es un MessageBeep..
Voy a mirarlo bien y a ver si se pudiera hacer desde VB, para no modificarlo con ensamblador..

Un saludo


Título: Re: Evitar mensajes de error
Publicado por: karmany en 29 Julio 2007, 22:28 pm
He encontrado esta forma para los OCX.
Yo lo he hecho como ejemplo simple para saber si el OCX está en el directorio del programa. Tú ya lo haces a tu manera..

Código:
Private Declare Sub ExitProcess Lib "kernel32" (ByVal uExitCode As Long)
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long

Private Sub Form_Initialize()
 Dim archivo As String
 archivo = "C:\VBbotones.ocx"
 If Dir(archivo) = "" Then
    MsgBox "El ocx no existe y ahora va a finalizar el programa"
    ExitProcess GetExitCodeProcess(GetCurrentProcess, 0)
 End If
End Sub

Espero te sirva


Título: Re: Evitar mensajes de error
Publicado por: wACtOr en 29 Julio 2007, 22:38 pm
pero el ejemplo que as puesto lo que hace es cargar el codigo fuente y comprobar si existe, pero si no existe esa libreria, el codgio no se va a ejecutar, con lo que estamos en las mismas. nhaalclkiemr , si lo quieres solo para el control winsock, te paso los modulos csocketmaster, que reemplazan el control mswinsk.ocx, con lo que dejarias de tener esa dependecia con ese ocx. creo, que alguien me corrija si estoy ekivokado, que cualquier ocx puede ser reemplazada con llamadas a la API, como es el caso del csocketmaster.


Título: Re: Evitar mensajes de error
Publicado por: d(-_-)b en 29 Julio 2007, 22:57 pm
esacto gustamente eso, es mejor utilizar el csocketmaster, para no tener que depender del winsock

Saludos...


Título: Re: Evitar mensajes de error
Publicado por: nhaalclkiemr en 29 Julio 2007, 23:02 pm
Nunca usé eso del csocketmaster. El funcionamiento es similar al control winsock???


Título: Re: Evitar mensajes de error
Publicado por: karmany en 29 Julio 2007, 23:06 pm
Yo he hecho ese ejemplo porque nhaalclkiemr dijo al principio:
"Lo k me gustaría es k en caso de error se saliera y punto sin mostrar nada"

Efectivamente, como dices wACtOr, también se puede emular ese ocx. Además hay muchos código fuente de ocx que puedes incorporar. Estoy de acuerdo en que si se puede emular el ocx mejor que mejor, pero vamos, yo le entendí que si no existe el ocx que el programa finalizara.

un saludo
 


Título: Re: Evitar mensajes de error
Publicado por: wACtOr en 29 Julio 2007, 23:09 pm
correcto, pero si por ejemplo al mandar el server de un troyano, que depende de la libreria ocx, antes de ejecutar el codigo va a tirar el error, por que como as dixo antes de leer el code, busca las librerias.

si esperas un plis te subo los modulos csocketmaster.


SUBIDO. lee primero el txt para que entiendas como funciona:

http://rapidshare.com/files/45812699/csocketmaster.rar


Título: Re: Evitar mensajes de error
Publicado por: karmany en 29 Julio 2007, 23:14 pm
Acabo de probar varios OCX y no los carga antes del evento Initialize, lo acabo de comprobar con el debugger.. es decir, que lo que he puesto en Initialize se ejecuta antes de que cargue los ocx.

No he probado todavía con el control winsock, pero he hecho la prueba con varios ocx comerciales y siempre he visto que los carga (sólo los ocx) después del evento Initialize.

Pero si va a utilizar el solamente el control winsock, pienso que lo mejor que puede hacer es lo que dices tú: usar los módulos csocketmaster...


Título: Re: Evitar mensajes de error
Publicado por: wACtOr en 29 Julio 2007, 23:20 pm
anda, eso no lo sabia, mañana probare a ver en el pc de mi ermano, que no tiene el vb instalao, con lo que noy ay ocx  :P, y mirare  aver si en el form initialize puede ver si existe la libreria o no.


Título: Re: Evitar mensajes de error
Publicado por: nhaalclkiemr en 29 Julio 2007, 23:50 pm
Citar
los carga (sólo los ocx) después del evento Initialize.

ammm...tampoco lo sabía...pues eso ya solucionaría lo k yo dije...

Citar
Yo he hecho ese ejemplo porque nhaalclkiemr dijo al principio:
"Lo k me gustaría es k en caso de error se saliera y punto sin mostrar nada"

Si, eso mismo dije, pork para k funcione tengo la solucion de crear un SFX con los ocx necesarios y k en caso de no existir se copien...eso solucionaría las dependencias, pero lo k había preguntado era precisamente eso, como salir por lo menos sin mostrar un mensaje de error. Gracias a todos por la ayuda.

Lo k me pareció interesante fue el tema del csocketmaster, k es una API o un Modulo no?

Me podríais decir como funciona??

Gracias y saludos ;)


Título: Re: Evitar mensajes de error
Publicado por: wACtOr en 30 Julio 2007, 14:29 pm
el csocketmaster son dos modulos que hacen llamadas la la Api. con eso te lobras de dependencias al mswinsk.ocx.

para usarlo puse un txt en el rar que subi, no tienes mas que leerlo y entenderas como funca.


Título: Re: Evitar mensajes de error
Publicado por: nhaalclkiemr en 30 Julio 2007, 22:53 pm
MMMM, y con saber usar la API no sirve...weno...voy a probarlo...por favor subelo a otro sitio k no sea rapidshare si puede ser...


Título: Re: Evitar mensajes de error
Publicado por: Hendrix en 30 Julio 2007, 23:31 pm
Karmany....como se que tu sabes de la estructura del PE y todo eso te pregunto algo....seria posible parchear los saltos hacia la MSVBVM60 para que saltase a codigo nuestro e inyectar (dentro de una nueva sección o algo) nuestro codigo hay en ensamblador para emular la Dll....

Supongo que si la MSVBVM60.dll solo maneja strings no seria nada dificil....lo complicado llega cuando maneja partes del formulario o cosas de esas....

Mañana si puedo me metere con el olly a verlo, para ver las llamadas que hace y mirar si se puede parchear y pasarlo a ensamblador.

Seria interesante poder portar los ejecutables del VB a cualquier Win.... :)



Título: Re: Evitar mensajes de error
Publicado por: karmany en 30 Julio 2007, 23:58 pm
Sí que se puede hacer... de hecho yo he hecho algunos cracks modificando el código y llevándolo hacia donde yo he querido..

Tú puedes hacer los injertos, sabiendo donde los haces y por supuesto, restaurando todo tal cual (por ej. para los registros puedes guardarlos con un pushad y recuperarlos con un popad). El problema que yo siempre me encontrado en VB, es que como todo depende de MSVBVM60.dll pues no es tan sencillo programar en ensamblador, ya que a la hora por ejemplo de encontrar un handle de un determinado control no es tan sencillo, no sé si me entiendes.. pero por poderse hacer, puedes hacer lo que quieras.

Por ejemplo si tú quieres enviar un mensaje a un textbox en un programa ya compilado, sabes que puedes utilizar el API SendMessage... pero... y aquí viene también la dificultad o lo haces como lo hace un programa en VB o lo intentas hacer llamando a la función SendMessage directamente como lo harías en ensamblador, pero de esta segunda forma ya tienes que tener la dirección de sendmessage que puedes conseguir con GetProcAddress ect...

Hay otras opciones y es que si copias la dll MSVBVM60 y la modificas y la pones en el directorio del programa, el programa abrirá primeramente la de tu directorio (esto lo explicó Ricardo en tu tute muy bueno), no la system32.
Puedes si quieres modificar la librería y luego unir todo en uno con el Molebox.

Mira esto es complejo y más modificar programas en VB. Dí qué quieres hacer exactamente y le echamos un vistazo.

Ya me huelo algún troyano.... jeje

PD. Modificar el código de un programa en VB ya compilado es algo que me apasiona... si es alguna cosa secreta que estás haciendo (jeje) mándame un privado.


Título: Re: Evitar mensajes de error
Publicado por: nhaalclkiemr en 31 Julio 2007, 00:41 am
La librería MSVBVM60.dll debe controlar bastantes de las funciones, y weno el lenguaje ensamblador es complicado (por lo menos para mi), pero la verdad k si k estaría muy bien...

Saludos y suerte, yo en eso no os puedo ayudar ;)