incrustar un ejecutable dentro de otro VB6

minipelos

Pos eso, como lo hago?

idea 1: ejecutable "a piñon" en una variable:
es decir, como puedo meter un ejecutable en una variable directamente?

se me ocurre que tal vez codificando el binario en algo para que lo transforme a texto pero, me parece muy complejo... se os ocurre como hacerlo?

idea 2: usando un ole
meterlo en un ole pero no me va bien, necesito poder extraerlo a archivo y cuando lo hace me manda el package entero, no el ejecutable :( ideas?

gracias!

Khanser

WHAT?!

dagavi

Un ejecutable en una variable? O_o

minipelos

a ver, la idea es:
tengo un ejecutable (llamémoslo MV.exe)
y quiero hacer otro que se llame por ejemplo instalarmv.exe

pues instalarmv tiene que hacer lo siguiente:

  • crear el archivo y ejecutarlo (entre otras cosas)

y todo en un único ejecutable, es decir, tiene que estar incrustado

¿alguna idea?

#3 en php he hecho cosas parecidas ;) aunque no eran ejecutables pero si eran datos binarios, se codifica en algo que sea texto y luego se extrae (por ejemplo con base64) y los emails, al enviarlos tambien pasan los datos adjuntos binarios a texto (echa un ojo a algun codigo fuente)

edit: si esta tarde no me sugerís alguna cosa mejor, creo que tiraré por base64 que creo que ya se como lo hare de manera facil ;)

iKi

Y no es más fácil que te bajes un programa que crea un instalador tipo Setup Generator o alguna mierda así ?

Con eso creas la instalación que te de la gana ....

Sino, no entiendo qué coño estás preguntado, perdoname

Soleil

Existen varios métodos para hacer ésto.

1) Usar un binder.
Un binder es un programa que incrusta un ejecutable dentro de otro, de modo que al ejecutar el primero se ejecuta también el segundo. Algunos incluso permiten ejecución asincrónica, por ejemplo Yab. (Yab: Yet Another Binder)

La desventaja: Los ejecutables creados así son detectados como virus por muchos antivirus, puesto que a fin de cuentas es una forma de ocultar un ejecutable dentro de otro.

2) Incrustarlo a mano.
No es difícil. Todo lo hace el mismo fichero. Imaginemos que programamos algo en VB, el ejecutable final sería:
fichero.exe:
[inicio fichero] [datos del exe] [fin de fichero]

Lo modificamos añadiéndole una serie de datos que consideremos precisos al final.
fichero.exe:
[inicio fichero] [datos del exe] [otros datos] [fin de fichero]

En nuestro código fuente, leemos el propio exe, si tiene más datos al final de los necesarios, entonces es cuando descomprime. Estos datos podrían usar algún tipo de compresión, por ejemplo Huffman o Zlib.

3) Explotar un bug de windows (no recomendado):
echo "Hola" > fichero.txt
type C:\Windows\notepad.exe > fichero.txt:prueba.exe
start C:\ruta\fichero.txt:prueba.exe

4) Un zip o rar autoextraíble. O un instalador, tipo Inno Setup, pero no tienes la flexibilidad que te da hacerte tu propio fichero y decidir tú cuando extraer, añadir etc.

En mi opinión la mejor opción es embeber a mano el ejecutable dentro de otro y usar delimitadores que definan cuales son sus dimensiones para extraerlo después a voluntad.

minipelos

vale, ya lo tengo ;)

primero, hacemos un string con el ejecutable codificado en base64 (para codificar de manera facil y rapida lo podemos hacer en http://www.motobit.com/util/base64-decoder-encoder.asp)

nos creamos una funcion para decodificar con:

Function DecodeBase64(ByVal strData As String) As Byte()

Dim objXML As MSXML2.DOMDocument
Dim objNode As MSXML2.IXMLDOMElement
Set objXML = New MSXML2.DOMDocument
Set objNode = objXML.createElement("b64")
objNode.dataType = "bin.base64"
objNode.Text = strData
DecodeBase64 = objNode.nodeTypedValue
Set objNode = Nothing
Set objXML = Nothing

End Function

Ojo! para que esa función funcione bien necesita la referencia de MS XML 2,6 o superior.

y creamos el ejecutable con esto:

Open "c:\mv.exe" For Binary Access Write As #1
Put #1, , DecodeBase64(ejecutableEnString)
Close #1

por ejemplo ;)

(el resultado final me ha ocupado una mierdecilla la verdad, 72kb :D)

Usuarios habituales

  • minipelos
  • Soleil
  • iKi
  • dagavi
  • Khanser