tiempo tenia pensado....
Se trata de un gathering fusionado con un viewbot que había hecho hace algún tiempo (también hice un tutorial de como programar uno, buscarlo en la sección delphi).
Obviamente este versión esta mejorada y se le han agregado mas características, por ejemplo los métodos http tales como options, head, get, post, etc... por si desean hacer algún
deface una información extra no viene mal...
también aumenta las vistas de un vídeo(todavía no le agregado los proxys, espero para la próxima entrega),
lectura de un archivo, y descarga de .txt
Lo programe en delphi 7 por si desean compilarlo por su cuenta(también dejare algunas
imagenes con ejemplos de los parámetros usados y demás).
Descarga : http://www.mediafire.com/download/zt5xha2hu7ac49d/Gathor.rar
El .rar no tiene contraseña.
Código
program Gathor; (*********************************************) (* Software : Gathor 0.5 *) (* Autor : WarZone *) (* Fecha : 23/8/13 *) (*********************************************) (* Explicacion: *) (* Un gathering de informacion web el cual *) (* tiene caracteristicas *) (* como leer el source de la pagina(index), *) (* ver el servidor en que se esta corriendo, *) (* fecha, version del protocolo, contenido, *) (* opciones de metodos usados <posiblemente *) (* permitiendo un Defacement>, leectura de un*) (* fichero y descarga, viewbot para aumentar *) (* visitas(por ejemplo a un video en youtube),*) (* etc... *) (*********************************************) (*********************************************) (* -Opciones de uso / Caracteristicas- *) (* *) (* Los siguientes comandos permiten hacer *) (* peticiones HTTP por distintas opciones, *) (* GET, POST, HEAD, ETC... y version del *) (* protocolo respectivamente 1.0 o 1.1 *) (* *) (* get_proto_0 -> metodo GET por HTTP/1.0 *) (* get_proto_1 -> GET por HTTP/1.1 *) (* post_proto_0 -> POST por HTTP/1.0 *) (* post_proto_1 -> POST por HTTP/1.1 *) (* options_proto_0 -> OPTIONS por HTTP/1.0 *) (* options_proto_1 -> OPTIONS por HTTP/1.1 *) (* head_proto_0 -> HEAD por HTTP/1.0 *) (* head_proto_1 -> HEAD por HTTP/1.1 *) (* Parametros + Ejemplo : *) (*********************************************) (* con parametro -g *) (* <sitio_web> <puerto> <opcion> *) (* -g www.google.com 80 get_proto_0 *) (*********************************************) (* con parametro -b *) (* <sitio/video_a_aumentar><intervalo_segs> *) (* -b www.youtube.com/video_a_aumentar 1 *) (*********************************************) (* con parametro -r *) (* <sitio><nombre_archivo_a_leer> *) (* -r www.sitio.com/robots.txt *) (*********************************************) (* con parametro -d *) (* <sitio><ruta+nombre_archivo_a_guardar> *) (* -d www.sitio.com/robots.txt C:/OUTPUT.TXT *) (*********************************************) (* con parametro -h y -m *) (* Desplega la ayuda *) (*********************************************) (* Puedes encontrarme en foro.elhacker.net e indetectables.net por cualquier duda. Todos los desensamblados como las funciones escritas en ASM fueron echas por WarZ0n3, si las incluyes en tu proyecto te pido que me des los creditos correspondientes... NO ME HAGO RESPONSABLE DEL MAL USO QUE LE PUEDAN DAR. Atte : Warz0n3 *) {$APPTYPE CONSOLE} uses SysUtils, Windows, WinInet, WinSock; type PTcpData = ^TcpData; TcpData = record SendDataBuffer : array[$00000000..GETEXTENDEDTEXTMETRICS] of Char; RecvDataBuffer : array[$00000000..(GETEXTENDEDTEXTMETRICS*2)] of AnsiChar; end; // configuracion del viewbot const INTERNET_OPEN_TYPE_PRECONFIG = $00000000; (* Usa la configuracion del registro(por defecto) *) INTERNET_OPEN_TYPE_DIRECT = $00000001; (* Acceso directo a la red *) INTERNET_OPEN_TYPE_PROXY = $00000003; (* Acceso via proxy *) INTERNET_SERVICE_HTTP = $00000003; {$DEFINE INTERNET_FLAG_RELOAD} {$DEFINE INTERNET_FLAG_NO_COOKIES} {$DEFINE INTERNET_FLAGS_MASK} INTERNET_FLAGS_MASK = INTERNET_FLAG_RELOAD or INTERNET_FLAG_NO_COOKIES; HASHKEY = 55; //$00000028; // 40d HTTP = 'http://'; // ****************************************** { Config } BL = #13#10; { HTTP Methods } POST = 'POST'; GET = 'GET'; OPTIONS = 'OPTIONS'; HEAD = 'HEAD'; { Version } HTTP0 = ' HTTP/1.0'; HTTP1 = ' HTTP/1.1'; STP = ' /'; { Octetos } ZERO = $00000000; BSIZE = $00001024; BUFFSIZE = $00000041; // 65d //$000000FF; BUFFDATA = $00001000; INADDRSIZE = $0000000A; var {$DEFINE Host} Host : string; {$DEFINE Port} Port : Uint; WSData : WsaData; TcpSocket : tSocket; sAddr : sockaddr_in; pIp : string; I : Integer; (* 00408450 /$ 55 PUSH EBP 00408451 |. 8BEC MOV EBP,ESP 00408453 |. 6A 00 PUSH 0 00408455 |. 53 PUSH EBX 00408456 |. 33C0 XOR EAX,EAX 00408458 |. 55 PUSH EBP 00408459 |. 68 BA844000 PUSH Project2.004084BA 0040845E |. 64:FF30 PUSH DWORD PTR FS:[EAX] 00408461 |. 64:8920 MOV DWORD PTR FS:[EAX],ESP 00408464 |. 68 9C374100 PUSH Project2.0041379C ; /pWSAData = Project2.0041379C 00408469 |. 6A 01 PUSH 1 ; |RequestedVersion = 1 (1.0.) 0040846B |. E8 98FFFFFF CALL <JMP.&wsock32.WSAStartup> ; \WSAStartup 00408470 |. 90 NOP 00408471 |. 90 NOP 00408472 |. 90 NOP 00408473 |. 8D55 FC LEA EDX,DWORD PTR SS:[EBP-4] 00408476 |. B8 01000000 MOV EAX,1 0040847B |. E8 88A3FFFF CALL Project2.00402808 00408480 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 00408483 |. E8 A4BBFFFF CALL Project2.0040402C 00408488 |. 50 PUSH EAX ; /Name 00408489 |. E8 72FFFFFF CALL <JMP.&wsock32.gethostbyname> ; \gethostbyname 0040848E |. 8B40 0C MOV EAX,DWORD PTR DS:[EAX+C] 00408491 |. 33D2 XOR EDX,EDX 00408493 |. 8B0490 MOV EAX,DWORD PTR DS:[EAX+EDX*4] 00408496 |. FF30 PUSH DWORD PTR DS:[EAX] 00408498 |. E8 3BFFFFFF CALL <JMP.&wsock32.inet_ntoa> 0040849D |. 8BD8 MOV EBX,EAX 0040849F |. E8 6CFFFFFF CALL <JMP.&wsock32.WSACleanup> ; [WSACleanup 004084A4 |. 33C0 XOR EAX,EAX 004084A6 |. 5A POP EDX 004084A7 |. 59 POP ECX 004084A8 |. 59 POP ECX 004084A9 |. 64:8910 MOV DWORD PTR FS:[EAX],EDX 004084AC |. 68 C1844000 PUSH Project2.004084C1 004084B1 |> 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4] 004084B4 |. E8 83B7FFFF CALL Project2.00403C3C 004084B9 \. C3 RETN *) function // Host contiene la IP __call_ix86_getIP(): PChar; assembler; asm PUSH EBX ADD ESP, 0FFFFFE70h PUSH ESP PUSH $1 CALL WSASTARTUP NOP PUSH Host // 04081B4h CALL GetHostByName MOV EAX, [EAX+0Ch] XOR EDX, EDX NOP MOV EAX, [EAX+EDX*4] PUSH DWORD PTR [EAX] CALL INET_NTOA MOV EBX, EAX CALL WSACleanup MOV EAX, EBX ADD ESP, 0190h POP EBX RETN end; procedure __call_ix86_configureHost; assembler; asm MOV EDX, OFFSET Host MOV EAX, $2 // nparam CALL PARAMSTR end; procedure __call_ix86_configurePort; assembler; asm LEA EDX, [EBP-04h] MOV EAX, $3 CALL PARAMSTR MOV EAX, [EBP-04h] CALL STRTOINT MOV DWORD PTR DS:[PORT], EAX (* configuracion del host y el puerto*) end; function (*00408818 /$ 53 PUSH EBX 00408819 |. 33DB XOR EBX,EBX 0040881B |. 6A 74 PUSH 74 ; /Key = VK_F5 0040881D |. E8 3AC7FFFF CALL <JMP.&user32.GetAsyncKeyState> ; \GetAsyncKeyState 00408822 |. 66:85C0 TEST AX,AX 00408825 |. 74 03 JE SHORT Project2.0040882A 00408827 |. 83CB FF OR EBX,FFFFFFFF 0040882A |> 8BC3 MOV EAX,EBX 0040882C |. 5B POP EBX 0040882D \. C3 RETN *) __call_ix86_interceptF5() : BOOL; assembler; asm PUSH EBX XOR EBX, EBX PUSH $74 // F5 CALL GETASYNCKEYSTATE TEST AX, AX JE @A0040882D // label relativo OR EBX, $FFFFFFFF @A0040882D: MOV EAX, EBX POP EBX RETN end; (* // Configuracion del host y puerto 004084B7 |. BA 9C374100 MOV EDX, .0041379C 004084BC |. B8 01000000 MOV EAX,1 004084C1 |. E8 42A3FFFF CALL .00402808 004084C3 |. 8D55 FC LEA EDX,DWORD PTR SS:[EBP-4] 004084C6 |. B8 02000000 MOV EAX,2 004084CB |. E8 38A3FFFF CALL .00402808 // configuracion de los sockets 004084C6 |. 68 A0374100 PUSH .004137A0 ; /pWSAData = Project2.004137A0 004084CB |. 6A 01 PUSH 1 ; |RequestedVersion = 1 (1.0.) 004084CD |. E8 36FFFFFF CALL <JMP.&wsock32.WSAStartup> ; \WSAStartup 004084D4 |. 6A 00 PUSH 0 ; /Protocol = IPPROTO_IP 004084D6 |. 6A 01 PUSH 1 ; |Type 004084D8 |. 6A 02 PUSH 2 ; |Family = AF_INET 004084DA |. E8 19FFFFFF CALL <JMP.&wsock32.socket> ; \socket 004084DF |. A3 A0374100 MOV DWORD PTR DS:[4137A0],EAX *) procedure InitGathering(); var TcpData : PTcpData; // puntero a tcpdata nOpc : integer; begin {$IFDEF Host} __call_ix86_configureHost; // inicio la configuracion de parametros {$ENDIF} {$IFDEF Port} __call_ix86_configurePort; {$ENDIF} ASM PUSH EBX ADD ESP, 0FFFFFE70h PUSH ESP PUSH $1 // version CALL WSAStartup //WSAStartUp($1, WSData); PUSH $0 PUSH $1 PUSH $2 CALL SOCKET MOV DWORD PTR DS:[TcpSocket], EAX // Puntero a tcpsocket //TcpSocket:= Socket (AF_INET, SOCK_STREAM, ZERO); END; New(TcpData); // reservamos memoria para la estructura sAddr.sin_family:= af_inet; sAddr.sin_addr.s_addr:= inet_addr(__call_ix86_getip()); //INET_ADDR('173.194.42.209'); sAddr.sin_port:= htons(Port); //htons( StrToInt(ParamStr(2)) ); nOpc:= 4; // Opcion por default if (ParamStr(nOpc)<' ') then TcpData^.SendDataBuffer:= 'OPTIONS /index.html HTTP/1.0'+BL+BL; // Gathering automatico if (ParamStr(nOpc)>' ') then begin if (ParamStr(nOpc)='get_proto_0') then TcpData^.SendDataBuffer:= GET+STP+HTTP0+BL+BL; if (ParamStr(nOpc)='get_proto_1') then TcpData^.SendDataBuffer:= GET+STP+HTTP1+BL+BL; if (ParamStr(nOpc)='post_proto_0') then TcpData^.SendDataBuffer:= POST+STP+HTTP0+BL+BL; if (ParamStr(nOpc)='post_proto_1') then TcpData^.SendDataBuffer:= POST+STP+HTTP1+BL+BL; if (ParamStr(nOpc)='options_proto_0') then TcpData^.SendDataBuffer:= OPTIONS+STP+HTTP0+BL+BL; if (ParamStr(nOpc)='options_proto_1') then TcpData^.SendDataBuffer:= OPTIONS+STP+HTTP1+BL+BL; if (ParamStr(nOpc)='head_proto_0') then TcpData^.SendDataBuffer:= HEAD+STP+HTTP0+BL+BL; if (ParamStr(nOpc)='head_proto_1') then TcpData^.SendDataBuffer:= HEAD+STP+HTTP1+BL+BL; end; try WriteLn('[Conectando al servidor]: ', __call_ix86_getip()); Winsock.Connect(TcpSocket, sAddr, sizeof(sAddr)); WriteLn('[Parametro]: ', TcpData^.SendDataBuffer ); Winsock.Send(TcpSocket, TcpData^.SendDataBuffer, StrLen(TcpData^.SendDataBuffer), MSG_DONTROUTE); Winsock.Recv(TcpSocket, TcpData^.RecvDataBuffer, BSIZE, SD_RECEIVE); WriteLn(TcpData^.RecvDataBuffer); finally Dispose(TcpData); Shutdown(TcpSocket, SD_BOTH); CloseSocket(TcpSocket); WSACleanUp(); end; end; function RandomHashes(LenDict:integer):string; const BuffHash : Array[0..BUFFSIZE] of Char= ( 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '=', '?', '-' ); var iHash : Integer; PBuffHash : Char; begin iHash:= Length(BuffHash)-LenDict; repeat Randomize; PBuffHash:= BuffHash[Random(Length(BuffHash))]; asm @@StartUp: DEC(iHash); end; Result:= Result+PBuffHash; until (iHash<ZERO); Result:= Result; ZeroMemory(Addr(iHash), SizeOf(iHash)); ZeroMemory(Addr(PBuffHash), SizeOf(PBuffHash)); end; function DownloadInetFile(urlhandle:HInternet; const nfile:string): string; var Buffer : array [0..1024] of char; bytesRead : DWORD; txtFile : TextFile; begin Result:= ''; {$I-} if nfile>'' then begin {$DEFINE CONFIGURE_INTERNET_FILE} assignfile(txtFile, nfile); rewrite(txtfile); end; {$I+} {$IFDEF CONFIGURE_INTERNET_FILE} fillchar(buffer, sizeof(buffer), ZERO); // inicializamos el buffer repeat result:= result+buffer; internetreadFile(urlhandle, @buffer, sizeof(buffer), bytesread); {$I-}if nfile>'' then write(txtfile, buffer);{$I+} writeln(buffer); until bytesread=0; {$ENDIF} {$UNDEF CONFIGURE_INTERNET_FILE} {$I-}closefile(txtfile);{$I+} end; function OpenINet(url, nFile :string; HashLen, Secs, Opc: integer ) : BOOL; var hInet, hUrl : hInternet; NHash : PChar; Init : BOOL; begin NHash:= PChar( RandomHashes(HashLen) ); hInet:= InternetOpen(NHash, INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, ZERO); if assigned(hInet) then begin hUrl:= InternetOpenUrl(hInet, PChar(HTTP+url), nil, INTERNET_FLAG_NO_COOKIES, INTERNET_FLAG_RELOAD, INTERNET_SERVICE_HTTP); if assigned(hUrl) then begin if Opc=$02 then begin DownloadInetFile(hUrl, nFile); end else if Opc=$03 then begin DownloadInetFile(hUrl, ''); end else begin Result:= true; WriteLn('[Hash generado]: '+ NHash); end; end else begin WriteLn('Se ha producido un error en la conexion... '); Result:= false; end; end; // assigned Sleep(Secs*1000); InternetCloseHandle(hInet); InternetCloseHandle(hUrl); FreeMemory(NHash); end; procedure CALLBACK_DownloadInetFile(nFile:string; HashLen, Secs:integer); begin {$IFDEF Host} __call_ix86_configureHost; // configura el primer parametro como Host {$ENDIF} OpenInet(Host, nFile , HashLen, Secs, $02 ); end; procedure InitIrb; var Init : BOOL; cIrb : integer; begin Init:= true; {$IFDEF Host} __call_ix86_configureHost; {$ENDIF} WriteLn('Apreta (F5) para salir del bot.'); while Init do begin if OpenInet( Host, '' , HASHKEY, StrToInt( ParamStr(3) ), ZERO ) then begin inc(cirb); writeLn( '[Servidor visitado]: ', ParamStr(2), #13#10 +'[Ip]: ', __call_ix86_getip(), #13#10+'[Numero de veces]: ', cirb, #13#10 +'============================' ); end else begin writeLn(#13#10+'Ha surgido un problema en la conexion...'); end; if __call_ix86_interceptF5() then begin Init:= false; WriteLn(#13#10+'Opcion salida por el usuario.'); end; end; ZeroMemory(Addr(cirb), sizeof(cirb)); end; var Input : integer; Output : string; Opc : array[1..2] of Byte = ($01, $02); begin {$O+} writeln ( ' _____ _ _' , #13#10, '| __ \ | | | |' , #13#10, '| | \/ __ _| |_| |__ ___ _ __ ' , #13#10 , '| | __ / _` | __| _ \ / _ \| __|' , #13#10 , '| |_\ \ (_| | |_| | | | (_) | | ' , #13#10 , ' \____/\__,_|\__|_| |_|\___/|_| ' , #13#10 , #9#9,'-==0.5 by - WarZ0n3==-' , #13#10#9, 'Happy Hacking...', #13#10 ); try if pos('-h', ParamStr(1))<>0 then writeln(#13#10, #9, '-m = metodos http usados para gathering(-g)', #13#10#9, '-h = me estas viendo bebe.', #13#10#9, '-d = descarga archivo : <www.sitio><nombre_archivo_a_guardar>', #13#10#9, '-b = modo bot(spam-sitio) : <www.sitio><intervalo_en_segundos>', #13#10#9, '-g = modo gathering : <www.sitio><puerto><metodo_http>', #13#10#9, '-r = lee un archivo de un sitio web : <www.sitio/archivo.ext>' ); if pos('-m', ParamStr(1))<>0 then writeln( #13#10#9, 'Los siguientes comandos permiten hacer', #13#10#9, 'peticiones HTTP por distintas opciones,', #13#10#9, 'GET, POST, HEAD, ETC... y version del', #13#10#9, 'protocolo respectivamente 1.0 o 1.1', #13#10 , #13#10#9, 'get_proto_0 -> metodo GET por HTTP/1.0' , #13#10#9, 'get_proto_1 -> GET por HTTP/1.1', #13#10#9, 'post_proto_0 -> POST por HTTP/1.0', #13#10#9, 'post_proto_1 -> POST por HTTP/1.1', #13#10#9, 'options_proto_0 -> OPTIONS por HTTP/1.0' , #13#10#9, 'options_proto_1 -> OPTIONS por HTTP/1.1', #13#10#9, 'head_proto_0 -> HEAD por HTTP/1.0' , #13#10#9, 'head_proto_1 -> HEAD por HTTP/1.1', #13#10#9#13#10#9, 'Ejemplo del gathor : -g www.facebook.com 80 get_proto_1', #13#10 ); if pos('-d', ParamStr(1))<>0 then begin if ParamCount=3 then CALLBACK_DownloadInetFile(ParamStr(3), 55, 1) else Write(#13#10, 'Parametros: <opcion><www.sitio><ruta+nombre_archivo_a_guardar>'); end; if pos('-b', ParamStr(1))<>0 then begin if ParamCount=3 then InitIrb() else Write(#13#10, 'Parametros: <opcion><www.sitio/video_a_aumentar><intervalo_en_segundos>'); end; if pos('-g', ParamStr(1))<>0 then begin if ParamCount=4 then InitGathering() else Write(#13#10, 'Parametros: <www.sitio><puerto><metodo_http>'); end; if pos('-r', ParamStr(1))<>0 then begin if ParamCount=2 then begin {$IFDEF Host} __call_ix86_configureHost; {$ENDIF} OpenINet(Host, '', 55, 1, 3 ); end else begin Write(#13#10, 'Parametros: <www.sitio/archivo.ext>'); end; end; except end; {$O-} end.
gathor con parametro -r
gathor con parametro -d
gathor con parametro -h y -m
gathor con parametro -g por medio del metodo get
gathor con parametro -g por medio del metodo post
gathor con parametro -g por medio del metodo head
gathor con parametro -g por medio del metodo options