Siguiendo el tutorial de E0N para Visual Basic decidí hacerlo para Python, y conseguí esto:
Funcionamiento:
python Joiner.py archivo_principal lugar_destino
El "archivo.txt" debe contener los nombres de los ejecutables.
Ejemplo:
gui.exe
cepillo.exe
juego.exe
Joiner.py:
import string
import os
import sys
archivo = sys.argv[1] # Metemos el archivo principal
extraccion = sys.argv[2] # Donde queremos que se guarde
archivos_leidos = [] # Va a contener todas las direcciones
f = open('archivos.txt', 'r') # Abrimos para lectura de archivos
i = 0 # Lo usamos para asignar dinamicamente strings a archivos_leidos
ruta = os.getcwd()
ruta = ruta.split('\\')
ruta = os.getcwd()
j = len(f.readlines())
f.seek(0)
while i < j:
c = f.readline()
d = c.split('\n')
d = d[0]
archivos_leidos.append(i)
archivos_leidos[i] = d
i+=1
f.close()
def Juntar():
Firma = "[**-_-**]"
SubFirma = "^^_~~_^^"
os.system('copy stub.dll stub.exe')
print archivos_leidos
n = 0
p = ''
while n < i:
p = archivos_leidos[n]
o = open(p, 'rb')
archivo = o.read()
o.close()
f = open('stub.exe', 'ab')
f.write(Firma)
f.write(archivo+SubFirma)
f.write(archivos_leidos[n]+SubFirma)
f.write(extraccion+SubFirma)
f.write('Si')
f.close()
n +=1
Juntar()
Utiliza un .txt para obtener las direcciones de los archivos.
Stub.py:
import string
import os
import sys
def Ruta():
print os.path.dirname + '\\'+ os.path.basename
Archivo = ''
Nombre = ''
RutaExt = ''
Ejecutar = ''
Firma = '[**-_-**]'
SubFirma = '^^_~~_^^'
f = open(ruta(), 'rb')
Todo = f.read()
f.close()
Partes = Todo.split(Firma)
n=1
while n < len(Partes):
SubPartes = Partes.split(SubFirma)
i=0
for i in len(SubPartes):
if i == 0:
Archivo = SubPartes(i)
elif i == 1:
Nombre = SubPartes(i)
elif i == 2:
RutaExt = SubPartes(i)
elif i == 3:
Ejecutar = Subpartes(i)
f = open(RutaExt + '\\' + Nombre, 'wb')
f.write(Archivo)
f.close()
#i += 1
Todavía estoy portandolo, me queda mirar, deducir y escribir algunas cosillas :rolleyes: .
Definitivamente Python es potente
Funciona con el
Stub.dll de E0N programado en Visual Basic, para pasar de .py a .exe utilizar el cx_freeze.
Definitivamente Python es potente
Hombre, solo se necesita poder tratar archivos xD Ahora ha hacerte también el stub, muy buen trabajo ;)
Tras varias de estudio, dedicación y cambios veo que es imposible hacer el stub en python, porque al pasar de .py a .exe el código se queda estático cualquier cambio por pequeño que sea da error de un archivo necesario al crear el .exe. Os dejo el código fuente de lo que hice:
Joiner.py
import string
import os
import sys
archivo = sys.argv[1] # Metemos el archivo principal
extraccion = sys.argv[2] # Donde queremos que se guarde
archivos_leidos = [] # Va a contener todas las direcciones
f = open('archivos.txt', 'r') # Abrimos para lectura de archivos
i = 0 # Lo usamos para asignar dinamicamente strings a archivos_leidos
ruta = os.getcwd()
ruta = ruta.split('\\')
ruta = os.getcwd()
j = len(f.readlines())
f.seek(0)
while i < j:
c = f.readline()
d = c.split('\n')
d = d[0]
archivos_leidos.append(i)
archivos_leidos[i] = d
i+=1
f.close()
def Juntar():
Firma = "[**-_-**]"
SubFirma = "^^_~~_^^"
os.system('copy Stub.dll Stub.exe')
n = 0
p = ''
while n < i:
p = archivos_leidos[n]
o = open(p, 'rb')
archivo = o.read()
o.close()
f = open('stub.exe', 'ab')
f.write(Firma)
f.write(archivo+SubFirma)
a = archivos_leidos[n].split('\\')
archivos_leidos[n] = a[(len(a)-1)]
f.write(archivos_leidos[n]+SubFirma)
f.write(extraccion+SubFirma)
f.write('Si')
f.close()
n +=1
Juntar()
Stub.py:
import string
import os
import sys
Ruta = os.getcwd() + '\\' + os.path.basename(sys.argv[0])
Archivo = ''
Nombre = ''
RutaExt = ''
Ejecutar = ''
Firma = '[**-_-**]'
SubFirma = '^^_~~_^^'
f = open(Ruta, 'rb')
Todo = f.read()
f.close()
Partes = Todo.split(Firma)
n=1
i=0
while n < len(Partes):
SubPartes = Partes[n].split(SubFirma)
while i < len(SubPartes):
if i == 0:
Archivo = SubPartes[i]
elif i == 1:
Nombre = SubPartes[i]
elif i == 2:
RutaExt = SubPartes[i]
elif i == 3:
Ejecutar = Subpartes[i]
i += 1
f = open(RutaExt + '\\' + Nombre, 'wb')
f.write(Archivo)
f.close()
n += 1
if Ejecutar == 'Si':
os.system(RutaExt + '\\' + Nombre)