elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 00:42  


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  [C++] Downloader
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C++] Downloader  (Leído 1,647 veces)
kiriost

Desconectado Desconectado

Mensajes: 57


www.godsys.com.ar Hacking y Programación


Ver Perfil WWW
[C++] Downloader
« en: 7 Agosto 2011, 15:58 »

Hace unos días terminé un downloader que hice para un troyano que estabamos armando con un colega que quedó en la nada.

Rattack iba a contener un sistema de ocultación mediante hooks a las APIs de Windows, pero al final no quedó implementado porque esa parte d código lo hizo mi colega, yo me encargué de la parte del servidor y del cliente y de las funciones del downloader. La página del proyecto Rattack es http://godsys.com.ar/rattack/

Estaba programado usando el API WinSock, pero le cambié algunas cosas para poder compilarlo en Linux, ya que el sistema de sockets no es muy diferente entre ambos sistemas.

Al troyano le implementé 2 clases de downloader: uno que descarga archivos desde un servidor web (mediante HTTP) y otro que envía archivos desde un cliente a un servidor programados por mí.

Aquí les traigo el código del Downloader HTTP:

Código
/*
Autor: Kiriost
*/

 
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h>
 
int main(int argc, char *argv[]) {
if(argc != 4) {
printf("TO USE: ./downloader www.host.com /file.exe saveas.exen");
return 0;
}
 
char *shost;
char *sfile;
char *ssave;
 
shost = argv[1];
sfile = argv[2];
ssave = argv[3];
 
int sock;
struct sockaddr_in conn;
struct hostent *host;
char data[512];
sprintf(data, "GET %s HTTP/1.1\nHost: %s\nUser-Agent: Mozilla/4.0\n\n", sfile, shost);
 
char buffer[1024];
memset(buffer, 0, 1024);
int numbytes;
int bytes = 0;
int i = 0;
 
sock = socket(AF_INET, SOCK_STREAM, 0);
host = gethostbyname(shost);
 
conn.sin_family = AF_INET;
conn.sin_port = htons(80);
conn.sin_addr = *((struct in_addr *)host->h_addr);
memset(&conn.sin_zero, 0, 8);
 
connect(sock, (struct sockaddr *)&conn, sizeof(struct sockaddr));
 
FILE *fp = fopen(ssave, "wb");
 
send(sock, data, strlen(data), 0);
 
for(;;) {
recv(sock, buffer + i, 1, 0);
i++;
if(strncmp(buffer+i-4, "\r\n\r\n", 4) == 0) {
break;
}
}
 
for(;;) {
memset(buffer, 0, 1024);
numbytes = recv(sock, buffer, 1024, 0);
bytes += numbytes;
printf("%d KB\n", bytes/1024);
fwrite(buffer, sizeof(char), numbytes, fp);
if(numbytes <= 0) {
break;
}
}
 
printf("Bytes: %d\n", bytes);
fclose(fp);
close(sock);
}

Lo que hace especificamente es conectarse al servidor web, enviarle una serie de comandos HTTP (GET) para pedirle un archivo, el servidor recibe los comandos, los procesa y comienza a enviarle el contenido del archivo. La aplicación, entonces, comienza a recibir el contenido, entonces crea un archivo nuevo donde guarda el contenido que le va llegando.

Compilación

Código
gcc -o downloader_http downloader_http.c

Ejemplo de uso

Código
./downloader_http godsys.comxa.com /SDL.dll SDLdown.dll


« Última modificación: 8 Agosto 2011, 19:10 por kiriost » En línea

http://www.godsys.com.ar > Programación. Hacking y Cracking. Sistemas. Desarrollo Web.
Java, C/C++, PHP, Python, Perl, HTML, Game-Hacking, Defacing, Desarrollo Web, GNU/Linux, y más
escabe

Desconectado Desconectado

Mensajes: 34



Ver Perfil
Re: [C++] Downloader
« Respuesta #1 en: 7 Agosto 2011, 21:28 »

Ese código contiene algunos errores tipográficos, corrígelos.  :D

Saludos.


En línea
kiriost

Desconectado Desconectado

Mensajes: 57


www.godsys.com.ar Hacking y Programación


Ver Perfil WWW
Re: [C++] Downloader
« Respuesta #2 en: 8 Agosto 2011, 19:07 »

Tienes razon. Es que lo saque de mi blog y wordpress me convierte algunos carácteres como > < " :)
En línea

http://www.godsys.com.ar > Programación. Hacking y Cracking. Sistemas. Desarrollo Web.
Java, C/C++, PHP, Python, Perl, HTML, Game-Hacking, Defacing, Desarrollo Web, GNU/Linux, y más
oPen syLar


Desconectado Desconectado

Mensajes: 689


The Best of You..


Ver Perfil WWW
Re: [C++] Downloader
« Respuesta #3 en: 9 Agosto 2011, 01:31 »

=D ... Interesante.. Pero.. Porque currar directamente con los headers HTTP.? Digo si piensas ampliar tu troyano con el pasar el tiempo va hacer mas tedioso a la hora de incluir funciones que tengan que ver con el HTTP

Se me ocurre que podrías implementar curl en tu prj... Es portable y de fácil manejo..
En línea

framework C++ http://bit.ly/AB0Qz1
worm C++ http://bit.ly/AdWRtl
POP3 cracker http://bit.ly/x2SZxW
Mail dumper (HTTP) http://bit.ly/xMN6pF
El_Java

Desconectado Desconectado

Mensajes: 132



Ver Perfil WWW
Re: [C++] Downloader
« Respuesta #4 en: 9 Agosto 2011, 10:59 »

A mi personalmente me parece mas interesante la otra parte del downloader, la de pasar archivos de un ordenador a otro, pero bueno...

Por cierto, dime que se te ha olvidado poner el return 0; en el main porque has hecho un copy-paste, porque como tampoco lo tengas en el original mereces que te hundamos el pecho xD
En línea
kiriost

Desconectado Desconectado

Mensajes: 57


www.godsys.com.ar Hacking y Programación


Ver Perfil WWW
Re: [C++] Downloader
« Respuesta #5 en: 9 Agosto 2011, 18:57 »

Húndeme lo que quieras jejeje...
Primero el código del downloader HTTP y el código para pasar de un ordenador a otro está en mi blog, en la sección proyectos Rattack.. Ahí puedes descargar al código fuente del "troyano" o downloader y puedes ver en command.c que se encuentran las funciones DownloaderHTTP y Download y Upload

Upload crea el servidor para enviar el archivo y lo deja a la escucha.
Downloader se conecta al servidor y espera que le envíe el archivo.

Segundo, el return lo he olvidado porque como dije antes DownloadHTTP es una función, y lo que hice aquí fue pasarla directamente al main agregándole algunas cosas, entre las que el return 0 no se encuentra :].

oPen syLar
: la idea era no recurrir directamente a ninguna librerías que me facilitara el trabajo como curl o la de wget, sino utilizar la librería de sockets nativa del sistema.
« Última modificación: 9 Agosto 2011, 18:59 por kiriost » En línea

http://www.godsys.com.ar > Programación. Hacking y Cracking. Sistemas. Desarrollo Web.
Java, C/C++, PHP, Python, Perl, HTML, Game-Hacking, Defacing, Desarrollo Web, GNU/Linux, y más
๖ۣۜPą||ムđ1ůɱ

Desconectado Desconectado

Mensajes: 95


La Verdad Os Ara Realmente Libres


Ver Perfil
Re: [C++] Downloader
« Respuesta #6 en: 12 Agosto 2011, 04:08 »

y el troyano tambien esta en c++?
En línea

kiriost

Desconectado Desconectado

Mensajes: 57


www.godsys.com.ar Hacking y Programación


Ver Perfil WWW
Re: [C++] Downloader
« Respuesta #7 en: 12 Agosto 2011, 22:11 »

Todo está en C. C++ no porque no utilizamos clases ni las librerías de C++.

Además en C el ejecutable queda más liviano.

El servidor y el cliente están en C. Había pensado hacer el cliente en Java, pero al final quedo abandonado el proyecto  :rolleyes:
En línea

http://www.godsys.com.ar > Programación. Hacking y Cracking. Sistemas. Desarrollo Web.
Java, C/C++, PHP, Python, Perl, HTML, Game-Hacking, Defacing, Desarrollo Web, GNU/Linux, y más
Belial & Grimoire


Desconectado Desconectado

Mensajes: 361


Tea_Madhatter


Ver Perfil
Re: [C++] Downloader
« Respuesta #8 en: 2 Noviembre 2011, 08:23 »

hola

Muy buen codigo para hacer descargas sencillas, pero hay algo que no entendi, espero me puedan ayudar con una explicacion porfavor

esta parte no la entiendo, se que recv, sus parametros son socket, *buffer, size, flags, pero porque en buffer le ponen + i? y porque en la longitud le ponen 1?

Código
recv(sock, buffer + i, 1, 0);
i++;

Acaso es para iniciar varios punteros a buffer?, y en longitud porque 1? que no deberia ser un tamaño mas grande?

y se que strncmp hace una comparativa, y usando "n", es una comparativa mas exacta, pero porque asi?

Código
	if(strncmp(buffer+i-4, "\r\n\r\n", 4) == 0) 

como lo mencione al principio porque buffer le ponen +i y porque restarle 4, lo demas si entiendo que hace una comparativa y si es "\r\n\r\n", termina el loop, pero lo demas?

espero me puedan ayudar con una explicacion de eso porfavor

salu2
En línea

.                                 
El_Java

Desconectado Desconectado

Mensajes: 132



Ver Perfil WWW
Re: [C++] Downloader
« Respuesta #9 en: 2 Noviembre 2011, 16:05 »

Lo de recv es porque recibe los datos de 1 en 1, de ahi que el tamaño sea 1, y no le pasa el buffer, le pasa un puntero a la posicion del buffer (buffer[0+i]).
Y strncmp, es así porque lo que el hace es comparar el buffer con "\r\n\r\n" recorriendo el buffer uno a uno, y le quita 4 para no producir un overflow al pasarse del tamaño del buffer, entiendes?

Un saludo! :D
En línea
Belial & Grimoire


Desconectado Desconectado

Mensajes: 361


Tea_Madhatter


Ver Perfil
Re: [C++] Downloader
« Respuesta #10 en: 2 Noviembre 2011, 20:59 »

hola

gracias por la respuesta, dejame ver si entendi

quieres decir que le puedes decir a recv cuantos datos va ir recibiendo?, por ejemplo puedes decirle que reciba de 1 en 1, de 10 en 10 o de 512 en 512?

y entonces los datos se enviaran a la posicion de buffer llenandose en este caso de 1 en 1? y strncmp hara una comprarativa y para no provocar un overflow hace que no llegue a 1024, y si en 1020, la comparativa es "\r\n\r\n", se rompe el loop pasando a la siguiente instruccion?

espero haber etendido o a haberme acercado en algo?  :xD
En línea

.                                 
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[AYUDA] Eliminar Troyano TR/Downloader [trojan-downloader.win32]
Seguridad
jorge_sr 2 2,462 Último mensaje 28 Noviembre 2009, 08:14
por xkiz ™
C Downloader
Análisis y Diseño de Malware
shark0 7 1,853 Último mensaje 13 Marzo 2010, 02:50
por dArKo2
[SRC][VB6] Downloader - FUD :D
Análisis y Diseño de Malware
Karcrack 3 2,089 Último mensaje 10 Abril 2010, 04:04
por [L]ord [R]NA
[SRC] Nod 32 Downloader 1.6.1
Programación Visual Basic
Elemental Code 1 738 Último mensaje 12 Julio 2010, 08:08
por BlackZeroX (Astaroth)
PDF exe downloader
Hacking Avanzado
rusianhack 2 1,173 Último mensaje 19 Noviembre 2010, 04:39
por D_pit_88
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines