Enlazar dos ejecutables.

Iniciado por Usuario887, 31 Octubre 2021, 13:28 PM

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

Usuario887

Hola,

Hay muchos sitios en Internet, especialmente en los foros de la MSDN y Stack Overflow, en donce se dice que esto "No es posible".

Esto es parcialmente cierto, porque yo lo hice, con dos Hello World haciendo merge a las secciones de codigo y datos y modificando las referencias a funciones y datos. Ahora, se que es muy poco practico hacer esto con un PE grande, estarias meses calculando referencias... Pero recuerdo que hace años en la biblioteca de underc0de habia un programa binder que lograba hacer esto. Recuerdo que lo hice con dos EXEs complejos y efectivamente se abrieron dos programas al ejecutar el programa resultante. Para ser honesto, no tengo idea de como este programa logro empaquetarlos a los dos de esa manera...

Ya no tengo el programa.

Vengo a preguntar si alguien tiene idea de como lo hizo.

Gracias.

**Aincrad**

#1
Que yo sepa, basicamente, funciona como un Packer. empaqueta los dos .exe, y los ejecuta a ambos. los extraeria en el disco y ejecutaria, o usar algun tipo de RunPE.






Usuario887

#2
Como Iexpress.

Sin embargo, al pasarle argumentos al ejecutable no se puede decidir a que ejecutable de los dos empaquetados es el que los recibe ¿Verdad?




Bueno, creo que eso se puede arreglar modificando el codigo fuente.

Gracias.

**Aincrad**

Cita de: marax en 31 Octubre 2021, 14:17 PM
Como Iexpress.

Sin embargo, al pasarle argumentos al ejecutable no se puede decidir a que ejecutable de los dos empaquetados es el que los recibe ¿Verdad?




Bueno, creo que eso se puede arreglar modificando el codigo fuente.

Gracias.

Yeah, Puedes modificar la source , para que soporte argumentos.




Usuario887

La verdad es que le eche un vistazo y como no se C# no tengo idea de como hacerlo a priori pero me imagino que echandole un vistazo a alguna referencia sobre la sintaxis me las arreglare...

Parece una combinacion entre C++ y Java

Usuario887

#5
¿Tienes idea de alguno similar que este escrito en C...?




Encontre uno en https://github.com/93aef0ce4dd141ece6f5/File-Binder

Gracias por tu ayuda.

Danielㅤ

Hola buenas tardes marax, mirá yo como programador lo que haría en cuanto a lo que estás necesitando es lo siguiente:

1. Crear un script en Python que cumpla la función de guardar en dos variables el contenido binario de los dos ejecutables:

Código (python) [Seleccionar]

exe1 = open("programa1.exe", "rb").read()
exe2 = open("programa2.exe", "rb").read()


2. Luego se va a convertir las variables exe1 y exe2 a codificación base64:

Código (python) [Seleccionar]

exeBase64_1 = base64.b64encode(bytes(exe1, 'utf-8'))
exeBase64_2 = base64.b64encode(bytes(exe2, 'utf-8'))


luego esa codificación se va a volcar/guardar en dos archivos de texto:

exeB64_1.txt
exeB64_2.txt

3. Ahora teniendo los dos ejecutables codificados en base64 y guardados en dos archivos de texto, se debe crear un código en Python, luego pasar ese código a ejecutable y el mismo será el exe único, es decir el que el usuario ejecutará para que éste ejecute los otros dos ejecutables.

4. En este exe principal lo que se haría obviamente cuando sea un código antes de pasarlo a exe, es guardar en dos variables los contenidos codificados en base64 de los dos exe:

Código (python) [Seleccionar]

exeBase64_1 = open("exeB64_1.txt", "r").read()
exeBase64_2 = open("exeB64_2.txt", "r").read()


5. El proceso que tendría que hacer el ejecutable principal cuando sea ejecutado sería el siguiente:

A) Crear en el directorio de archivos temporales del sistema los dos ejecutables, simplemente habría que crear por ejemplo programa1.exe y programa2.exe y el contenido de éstos programas sería el valor de las variables exeBase64_1 y exeBase64_2 pero decodificadas a binario, sería el proceso inverso del que se realizó al comienzo.

B) Como ya están creados los dos ejecutable solamente hay que hacer que el exe principal los ejecute luego de crearlos, aquí varias formas:

Código (Python) [Seleccionar]
os.system()
os.popen()
subprocess.Popen()


Eso es todo!


Saludos
¡Regresando como cual Fenix! ~
Bomber Code © 2021 https://www.bombercode.net/foro/

Ayudas - Aportes - Tutoriales - Y mucho mas!!!

Usuario887

Buenas noches Daniel

Gracias por tomarte el tiempo para tu respuesta.

Es una buena idea el cifrado  ;D

Sin embargo no queria tener que depender de un interprete... Mi intencion en realidad era unir las secciones de los ejecutables a nivel de encabezado y contenido PE. Igual ya me di cuenta de que esto no es tan practico.

Igual me sigo imaginando la forma  :xD :xD

Saludos.