Para el desarrollo de “generadores de malware”, los programadores de este tipo de aplicaciones desarrollaron algo a lo que llamaron el método del stub. La Wikipedia define el Stub dentro del contexto del desarrollo de software como:

Un trozo de código usado como sustituto de alguna otra funcionalidad. Un stub puede simular el comportamiento de código existente o ser el sustituto temporal para un código aún no desarrollado.”

Lo clave en la anterior definición se encuentra en lo puesto en negrillas, es decir, un stub podemos definirlo como una pequeña parte de la aplicación real a la que podemos añadirle nuevas funcionalidades pues por ende el stub se encuentra incompleto.

En la práctica se usa el método para por ejemplo, configurar la dirección IP en el “cliente” de un troyano para que se conecte a la máquina servidor, o en un keylogger que tenga la opción de envío por FTP y podamos definir los datos de conexión para la subida de los logs.

Para su desarrollo, este método consta por lo general de un constructor o “builder” que es la aplicación en la que indicamos los parámetros y el stub, que es donde se escribirán dichos parámetros.

Creación del constructor o builder

Paso 1: Definimos la dirección actual de nuestro stub. Podemos pasarla como cadena o definirla desde un OpenFileDialog.

Dim elStub As String = CurDir() & "\stub.exe"

Paso 2: Generamos un condicional y comprobamos si existe o no el fichero.

If IO.File.Exists(elStub) = False Then
MessageBox.Show("El fichero no existe.", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Else
'si existe ejecuta esto
End If

Paso 3: Ahora, si el fichero existe, generamos una copia nueva. Esto lo hacemos a través de la función Copy del espacio de nombres System.IO.File. La sintaxis es fichero de origen y fichero de destino:

IO.File.Copy(elStub, CurDir() & "\server.exe")

Paso 4: Por último con el método AppendAllText de la clase IO.File añadimos nuevos datos a través de unos Textbox.

IO.File.AppendAllText(CurDir() & "\server.exe", "FileSplit" & TextBox1.Text & "FileSplit" & TextBox2.Text)

El código completo del Builder sería este, a manera de ejemplo claro:

Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim fc As String = CurDir() & "\stub.exe"
        If IO.File.Exists(fc) = False Then
            MessageBox.Show("El fichero no existe.", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Exit Sub
        End If
        IO.File.Copy(fc, CurDir() & "\server.exe")
        IO.File.AppendAllText(CurDir() & "\server.exe", "FileSplit" & TextBox1.Text)
    End Sub
End Class

Creación del stub

Ahora pasaremos a programar el “stub”. La función será contener toda la información que se escriba a través del constructor y mostrarla a través de variables específicas:

Paso 1: Con la “función” ReadAllText se abre el ejecutable y se lee todas las líneas del mismo. El único parámetro es la dirección del ejecutable que se va a leer. Como se va a leer asimismo

Dim BinText As String = IO.File.ReadAllText(Application.ExecutablePath)

Paso 2: Si recuerdan la última línea de código del constructor dejamos una variable indicadora llamada “FileSplit”, esta es la que se llera a continuación y vamos a comprobar si existe en el fichero actual:

If BinText.Contains("FileSplit") = False Then Exit Sub

Paso 3: Crearemos ahora un arreglo de caracteres y con la función Split vamos a “separar” todo el contenido de los distintos parámetros de “FileSplit” como dijimos, en un arreglo.

Dim arreglo() As String = Split(BinText, "FileSplit")

Paso 4: Por último recorremos todos los elementos del arreglo y los mostramos en forma de mensaje emergente.

For num As Integer = 1 To UBound(arreglo)
            MsgBox(arreglo(num))
        Next

Éste sería el código completo del Stub:

Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim BinText As String = IO.File.ReadAllText(Application.ExecutablePath)
        If BinText.Contains("FileSplit") = False Then Exit Sub
        Dim ArrContents() As String = Split(BinText, "FileSplit")
        For num As Integer = 1 To UBound(ArrContents)
            MessageBox.Show(ArrContents(num))
        Next
    End Sub
End Class

Resumen, problemas y conclusión

El método no es detectado como tal, lo importante aquí es evitar colocar cadenas dentro de la aplicación como “Stub”, “Keylogger”, “Troyano” y cosas así pues los antivirus por lo general leen estas cadenas en las aplicaciones.

Fuente: HackCommunity (basado en el código del usuario Coder-San)