{Facebook} – Devenir un fantôme dans Messenger

Coucou à toute la petite Dyrkienne !

 

Entrez donc dans l'arène et profitez du spectacle, ici il n'y a que du vrai !
De la théorie, mais aussi de la pratique ...
Aujourd'hui j'aimerais faire suite à un article que j'avais écrit il y a quelques années et qui expliquait comment il était possible de cacher l'accusé de lecture (le fait que quelqu'un voit que vous avez lu son message), mais aussi le fait que vous soyez entrain d'écrire !

Pour les petits curieux l'article est ici : https://dyrk.org/2016/08/26/chat-facebook-empecher-votre-interlocuteur-de-savoir-si-vous-avez-lu-ou-que-vous-etes-entrain-decrire/

Ayez pitié de cet article, il date de 2016 ... et généralement, dépoussiérer des sujets ... ça pique un peu (mise en forme, orthographe, ...)

Bref, cette année, qu'est-ce qui change ?

En dehors du 8 qui devient un  9 ... (2018 > 2019) ? Ok je sors
Non cette année, j'aimerais vous présenter un petit "hack", qui vous permet sans avoir à installer d'extensions farfelues dont vous ne connaissez pas le code à l'avance ... de bloquer des requêtes Ajax !

Requêtes Ajax ?

Pour toi qui est néophyte mais qui est aussi curieux, l'Ajax n'est pas un produit d'entretien pour le sol  !
Enfin si .... mais pas que !
Une requête Ajax c'est lorsqu'une page internet sur laquelle tu es, échange des données avec un serveur sans que tu n'aies à recharger / rafraîchir ta page.
Cela permet entre autres :

  • Une économie de bande passante sur ta connexion internet car tu n'as pas besoin de recharger entièrement tous les éléments de ta page (vidéo, images, scripts, ...)
  • Au développeur de créer une API (sur le serveur), et du coup de réutiliser des fonctions dans divers contextes (Application Web, Application Mobile, Plugin Navigateurs, ...)
  • Une conservation des données dans d'éventuels formulaires que tu aurais remplis, pour t'éviter d'avoir à re-remplir tous les champs lorsque tu t'inscris sur un site et que le nom d'utilisateur que tu as choisi est déjà utilisé par quelqu'un d'autre (par exemple) ;)

Voilà c'est tout pour le point culturel !

 

Bloquer des requêtes Ajax ?

La majorité des plateformes Web s'appuient sur des librairies  qui utilise l'objet Javascript "XMLHttpRequest".
Beaucoup de développeurs Web ne maîtrisent pas (ou ne savent pas qu'il existe) cet objet,...
Il faut dire qu'il est devenu chose courante de passer par des frameworks ou des librairies qui ajoutent un niveau d'abstraction  (une couche par dessus) aux fonctions natives Javascript.
En tout cas, c'est important pour la suite de l'article de connaitre son existence.

Cet objet, comme je l'indique ci-dessus, est donc utilisé par nativement ou au travers des librairies de la manière suivante :

requete = new XMLHttpRequest();
requete.open('GET', '/dyrk-is-the-best');
requete.addEventListener('load', function(result){

	console.log( result.target.response );

});
requete.send("toto=1234&titi=3456);

Ci-dessus une requête "GET" vers la page "dyrk-is-the-best" avec les paramètres "toto=1234" et "titi=3456"

La méthode "open" de l'objet "XMLHttpRequest" est utilisée pour indiquer le type de requête "GET", "POST", "PUT", "DELETE", .... et pour spécifier l'url sur laquelle nous souhaitons réaliser notre requête.

C'est ici que commence mon petit "Hack" (ma bidouille) !
En utilisant ce que l'on appelle des "prototype", je peux modifier directement n'importe quelle méthode de n'importe quel objet.
Ainsi, si je veux m'attaquer à la fonction "open", je devrais la modifier de la manière suivante :

XMLHttpRequest.prototype.open = function(request_type, request_url){
		// ici j'écris le code qui va remplacer le fonctionnement standard de la méthode "open"
		console.log(arguments);
		// En ne retournant rien, j'annule la requête
		return null;
};

Le code ci-dessus, bloquera toutes les requêtes.
Si nous souhaitons en laisser passer quelques-unes, il nous faudra pouvoir conserver la méthode "open" d'origine (non modifiée)  :

// Ici je sauvegarde la vrai methode "open" en tant que "open2"
XMLHttpRequest.prototype.open2 = XMLHttpRequest.prototype.open2 ? XMLHttpRequest.prototype.open2 : XMLHttpRequest.prototype.open;

// Là je modifie la "open", cela me permet d'annuler ou pas des requêtes
XMLHttpRequest.prototype.open = function(request_type, request_url){
		// ici j'écris le code qui va remplacer le fonctionnement standard de la méthode "open"
		console.log(arguments);
		// Ici, je laisse passer toutes les requêtes car je les renvoie vers la méthode "open2"
		return this.open2(request_type, request_url);
};

 

Le code magique pour devenir invisible dans Messenger

Après cette partie un peu théorique, passons à quelque chose de plus "concret".
Je vous ai concocté un code que vous pouvez directement injecter dans la page Facebook (depuis la console développeur que vous pouvez faire apparaître avec la touche F12 de votre clavier)
Ce code va avoir pour effet de bloquer certaines requêtes qui matchent avec des Regex, en l’occurrence, les requêtes qui renvoie à Facebook le fait que vous ayez lu un message, ou que vous soyez entrain d'en écrire un.

Petite précision, si vous répondez au message, Facebook considérera que vous avez lu les messages.

/*
*	(c) 2019-2020 Dyrk.org
*	Ajax's Request Destroyer
*/

// Ici je sauvegarde la vrai methode "open" en tant que "open2"
XMLHttpRequest.prototype.open2 = XMLHttpRequest.prototype.open2 ? XMLHttpRequest.prototype.open2 : XMLHttpRequest.prototype.open;

//Là je modifie la "open", cela me permet d'annuler (ou pas) des requêtes
XMLHttpRequest.prototype.open  = function(a,b){
	var url = JSON.stringify(b),
		//Liste de Regex qui permet de contrôler les url que l'on souhaite bloquer
		regexUrlToDestroy = [
			/ajax\/messaging\/typ\.php/,
			/ajax\/mercury\/change\_read\_status\.php/
		];
		//On applique chacunes des regex à l'url, si l'url match avec l'une d'entre elle on bloque la requête
		for (var i in regexUrlToDestroy)
			if (regexUrlToDestroy[i].exec(url)){
					console.log("%c BLOCKED ".concat(url, "(",a,")"), "color:red");
					return null;
			}
		//J'affiche ici les requêtes qui passe correctement
		console.log("(".concat(a, ") ", url));
		return this.open2(a,b);	
};

 

La vidéo de démonstration

Comme promis cette année, je fais une démonstration vidéo pour la majorité de mes articles !
N’hésitez pas à "liker" ma vidéo ou à vous "abonner" à ma chaîne , c'est une forme d'encouragement passive ^^
D'autant que si j'atteins les 1000 abonnées (Oui Oui je suis carrément optimiste ;) ) je vous ferais une petite vidéo spéciale, peut-être un live, bref une vidéo où vous aurez le plaisir de me voir :D

 

 

Conclusion

J'espère que cet article vous aura plus, il vous permet d'être indépendant d'une extension, et de pouvoir quand le besoin se fait sentir de profiter de quelques lignes de script pour lire des messages sans pour autant montrer que vous les avez lu (utile lorsque vous êtes fâché avec quelqu'un), ou bien de montrer que vous êtes hésitant lorsque vous écrivez un message d'amour en tremblant (j'écris ... non je ne dois pas écrire ça .... mais si ... mais non ...)
N'hésitez pas à commenter cet article s'il vous a plu, et si vous avez des idées de sujet envoyez-moi tout ça !

Partagez ce contenu

Laisser une réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *