Evitar mensajes de error

Iniciado por nhaalclkiemr, 27 Julio 2007, 17:12 PM

0 Miembros y 2 Visitantes están viendo este tema.

nhaalclkiemr

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 ;)
StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%

ActiveSheet

Por que no simplemente Bineas la libreria que utiliza

karmany

#2
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

nhaalclkiemr

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 ;)
StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%

karmany

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

karmany

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..

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

wACtOr

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.

d(-_-)b

esacto gustamente eso, es mejor utilizar el csocketmaster, para no tener que depender del winsock

Saludos...
Max 400; caracteres restantes: 366

nhaalclkiemr

Nunca usé eso del csocketmaster. El funcionamiento es similar al control winsock???
StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%

karmany

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