WhatsApp - OnlineStatus auslesen

Wie man für beliebige Handynummern automatisiert den Zeitpunkt und die Dauer des Online-Status auf WhatsApp mitschreibt

Ich habe in wenigen Minuten ein einfaches Skript für WhatsApp geschrieben. Es basiert auf dem Artikel von Robert Heaton.

Mein Skript ließ ich auf der Webseite https://web.whatsapp.com/ von WhatsApp laufen und konnte daher automatisiert die folgenden Informationen von Personen, die eingewilligt hatten, tracken:

WhatsApp - OnlineStatus auslesen
WhatsApp – OnlineStatus auslesen
  • »zuletzt online«, basierend auf den WhatsApp Einstellungen
  • »schreibt…«, wenn die Person einem direkt schreibt
  • »online«, für JEDE Person, die man als Kontakt speichert – unabhängig davon, was für Datenschutzeinstellungen gesetzt sind oder ob der Kontakt einen bestätigt hat!
  • Dauer, wird basierend auf den protokollierten Informationen zum Status »online« ermittelt

Mit dem Punkt »online« kann jeder den Online-Status für JEDE Handynummer mitlesen und protokollieren.

In diesem Artikel beschreibe ich meine Ergebnisse und wie ich die Informationen ermittelt habe.

[Letztes Update des Skripts am 07.04.20 08:28]
[Nachtrag 29.07.20 09:42: Ich werde keine Anfragen zu diesem Artikel mehr beantworten.]

Vorgeschichte

Vor zwei Wochen schrieb ich etwas über die Meta-Ebene auf WhatsApp. Die Meta-Ebene beinhaltet Informationen zur gesendeten Nachricht, wie z.B. ob die Nachricht empfangen und gelesen wurde oder den Online Status »online« und »zuletzt online«.

Der Online Status arbeitete in meinem geistigen Untergrund weiter, bis sie gestern Abend einen Kanaldeckel nach oben in mein Bewusstsein öffnete. Ich erinnerte mich an die Sicherheitslücke bei WhatsApp und das Skript von Robert Heaton. Also setzte ich mich an mein Notebook und begann, zu programmieren.

Wie bin ich vorgegangen?

Bevor ich beschreibe, wie ich vorging, kommt ein wichtiger rechtlicher Hinweis.

Rechtlicher Hinweis und Haftungsausschluss

Ich habe meine Tests in Absprache mit meinen Freunden gemacht. Ich übernehme keine Haftung, weder für das folgende Coding noch die Anwendung der hier beschriebenen Techniken! Falls du also das Aufzeichnen des Online-Status auf WhatsApp selbst austesten möchtest, hole dir die Einwilligung der betreffenden Personen ein.

Was ist die Idee hinter der Umsetzung, die ich beschreiben werde?

Die Idee ist eigentlich sehr einfach: WhatsApp hat die Webseite https://web.whatsapp.com/, wo jeder sein WhatsApp auf dem Desktop bzw. Notebook benutzen kann. Man muss also nicht immer die App verwenden.

Wie in der App werden auf der Webseite unter dem Namen der Kontaktperson verschiedene Status angezeigt:

  • »zuletzt online«
  • »schreibt«
  • »online«

Genau diese Informationen kann man mit einem Skript, das im Hintergrund auf dem Browser jede Sekunde läuft, auslesen und anzeigen.

Was habe ich im Einzelnen gemacht? Eine Schritt-für-Schritt Anweisung

Ich habe von Null gestartet und bin wie folgt vorgegangen (das ist meine erste Extension):

  1. Artikel von Robert Heaton lesen
  2. Download von Google Chrome Portable und Installation
  3. Download der aktuellen komprimierten jQuery Version
  4. Erstellen einer Extension in Google Chrome
  5. Status »zuletzt online« in der Einstellung von WhatsApp einschalten
  6. Kontakt in WhatsApp erstellen, falls nicht vorhanden
  7. WhatsApp Webseite aufrufen und per QR Code registrieren – die Extension startet jetzt automatisch
  8. Den Kontakt aufrufen
  9. In Chrome mit F12 das Developertool einschalten und dort die Console öffnen

Nur, um mal einen Eindruck zu vermitteln: Das Ganze hat keine halbe Stunde gedauert.

Hier ein paar Details

Zu Punkt 3.

jQuery ist nicht dringend erforderlich, vereinfacht aber die Programmierung beim Zugriff auf die Inhalte der Webseite. Die jQuery Datei wird im »manifest.json« verlinkt.

Zu Punkt 4.

Für die Erstellung dieser Chrome Extension habe ich zwei Dateien erstellt:

  1. Datei »manifest.json«
  2. Datei »whatsapp.js«

Zur 1sten Datei:
Die Datei »manifest.json« liefert Informationen über die Erweiterung (bspw. Version, Beschreibung etc.) und bindet die eigentliche Funktion ein, die sich bei mir in »whatsapp.js« befindet. Auszug aus meiner Beispieldatei (ohne Gewähr):

{

	"manifest_version": 2,
	"version": "1.0",
	"name": "fxhakanExt", //Angabe erforderlich
	"description": "Track online status on WhatsApp by fxhakan.info",

	"permissions": 
	[
	"tabs", "activeTab" //Ereignis bei aktiven Tab ausführen
	],

	"content_scripts": [
		{
		"matches": ["https://web.whatsapp.com/*"], //nur Erweiterung nur bei WhatsApp starten
		"js": ["jquery-3.3.1.min.js", "whatsapp.js"], //hier sind die Skripte inkl. des heruntergeladenen jQueries (s.Punkt 3)
		"all_frames": true //wichtig, um alle Frames der Seite zu durchlaufen
		} 
	] 

}

Zur 2ten Datei:
Die Datei »whatsapp.js« ist das eigentliche Programm, das sich jede Sekunde die WhatsApp Webseite anschaut und prüft, ob sich der Status geändert hat (damit reduzieren sich die protokollierten Daten um ein Vielfaches). Hier ein Auszug aus meinem simplen Javascript – wieder ohne Gewähr:

//Stand: 07.04.20
//Source: https://fxhakan.info/2018/10/wie-man-fuer-beliebige-handynummern-automatisiert-den-zeitpunkt-und-die-dauer-des-online-status-auf-whatsapp-mitschreibt/


//Hinweis: Wenn du keinen Online Status zum Testen hast, 
//         dann Wechsel in eine Gruppe,
//         weil dort immer ein Text in Statuszeile steht

// Zeige Hinweis, wenn Erweiterung gestartet wurde
alert("FX extension wurde gestarted!");

var lastOnlineText = ''; //merke den letzten Status, um nur auf Änderungen zu reagieren
var wa_status = '';

//registriere dich auf das Event, wenn die WhatsApp Seite zu Ende geladen wurde
window.addEventListener("DOMFocusIn", function (event) {

//laufe jede Sekunde 1x
setInterval(function() {

	  //wird der Name des Kontakts angezeigt?
	  var wa_len = $("div._3XrHh").length;
	  if (wa_len>0) {

	  	//lese den Namen des Kontakts
	  	var wa_name = $("div._3XrHh")[0].innerText;

	  	//lese Status mittels CSS-Klasse
	  	var lastOnline = $("xxxxx");//<<< verrate ich nicht, das musst du selbst herausfinden!!!

		if (lastOnline.length>0){

	  		//male einen roten Rahmen, um zu zeigen, dass der Status gefunden wurde
	  		lastOnline.css( "border", "5px solid red" );

			wa_status = lastOnline[0].innerText;
		}else{
			wa_status = '';
		}
	  	if (lastOnlineText != wa_status){
			lastOnlineText = wa_status;
			console.log((new Date().toLocaleString()) + ": " + wa_name + " = " + wa_status);
	  	}
	  }

	}, 1000);//1000 = 1sec.

});

Zu Punkt 5.

Es gibt zwei Bedingungen, um den Status »zuletzt online« sehen zu können:

  1. Man muss selbst diese Ansicht unter den Einstellungen einschalten.
  2. Weiterhin muss der Kontakt eben diesen Status auch freigeben.

Wenn eines der Bedingungen nicht zutrifft, dann sehe ich diesen Status nicht.

Aber es gibt ja noch den Status »online«, den jeder, der nicht blockiert ist, sehen kann und den man nicht ausschalten kann!

Meine Ergebnisse

Ich habe zwei Testvarianten durchgeführt:

  • Test zu Status »zuletzt online« bei meinem Kontakt
  • Test zu Status »online«

Test zu Status »zuletzt online« bei meinem Kontakt

Nach Absprache mit meinem Kontakt, der den Status »zuletzt online« anzeigt, rief ich die Webseite für WhatsApp auf und mein Skript startete.

Das Skript protokollierte sofort den Status.

So sieht mein Ergebnis in der Konsole des Entwicklerwerkzeugs in Chrome aus:

WhatsApp - OnlineStatus auslesen
WhatsApp – OnlineStatus auslesen

Die Daten aus der Konsole (XXXXXXXX steht für den Namen des Kontakts):

  • 10.2018, 08:40:22: XXXXXXXX = Klicke hier für Kontaktinfo
  • 10.2018, 08:40:24: XXXXXXXX = zuletzt online heute 00:23
  • 10.2018, 09:13:17: XXXXXXXX = online
  • 10.2018, 09:14:35: XXXXXXXX = zuletzt online heute 09:14
  • 10.2018, 10:39:03: XXXXXXXX = online
  • 10.2018, 10:40:22: XXXXXXXX = zuletzt online heute 10:40
  • 10.2018, 10:46:31: XXXXXXXX = online
  • 10.2018, 10:46:36: XXXXXXXX = schreibt …
  • 10.2018, 10:46:37: XXXXXXXX = online
  • 10.2018, 10:46:37: XXXXXXXX = schreibt …
  • 10.2018, 10:46:46: XXXXXXXX = online
  • 10.2018, 10:46:49: XXXXXXXX = schreibt …
  • 10.2018, 10:46:52: XXXXXXXX = online
  • 10.2018, 10:46:53: XXXXXXXX = schreibt …
  • 10.2018, 10:46:55: XXXXXXXX = online
  • 10.2018, 10:46:56: XXXXXXXX = schreibt …
  • 10.2018, 10:47:00: XXXXXXXX = online
  • 10.2018, 10:47:04: XXXXXXXX = schreibt …
  • 10.2018, 10:47:04: XXXXXXXX = online
  • 10.2018, 10:47:11: XXXXXXXX = schreibt …
  • 10.2018, 10:47:15: XXXXXXXX = online
  • 10.2018, 10:47:15: XXXXXXXX = schreibt …
  • 10.2018, 10:47:20: XXXXXXXX = online
  • 10.2018, 10:47:20: XXXXXXXX = schreibt …
  • 10.2018, 10:47:26: XXXXXXXX = online
  • 10.2018, 10:47:51: XXXXXXXX = zuletzt online heute 10:47

Was sieht man?

Ich habe meine Erweiterung um 10:40 gestartet und kann sehen, dass mein Kontakt zuletzt heute Nacht um 00:23 online war.

Um 09:13 ging mein Kontakt wieder online. Danach bat ich meinen Kontakt, mir etwas länger zu schreiben.

Um 10:46:31 kam mein Kontakt meiner Bitte nach. Man erkennt, wie der Kontakt mehrfach schreibt und damit um 10:47:51 aufhört. Anhand dieser beiden Zeitstempel kann ich errechnen, dass mein Kontakt 44 Sekunden online war.

Test zu Status »online«

Bei meiner vorherigen Auswertung fällt etwas jedoch auf… –  der Status »online« wird auch angezeigt! Und dieser Status ist unabhängig von der Einstellung für den Status »zuletzt online«.

Daher bat ich einen Freund, der die Einstellungen so gesetzt hat, dass sie niemandem bzw. nur den Kontakten angezeigt werden, mich als Kontakt zu löschen. Dann startete ich einen weiteren Test mit meiner Erweiterung.

Die Daten aus der Konsole (XXXXXXXX steht für den Namen des Kontakts):

  • 10.2018, 12:22:18: XXXXXXXX = Klicke hier für Kontaktinfo
  • 10.2018, 12:22:20: XXXXXXXX =
  • 10.2018, 13:04:17: XXXXXXXX = online
  • 10.2018, 13:09:49: XXXXXXXX =

Hier wird kein Status angezeigt. Die zweite Zeile wirft daher nach dem „=“ keinen Text aus.

Interessant wird es, als mein Kontakt um 13:04:17 online geht. Dann ändert sich der Status auf »online«.

Als der Kontakt WhatsApp wieder verlässt, verschwindet der Status wieder. Das passiert hier um 13:09:49. Auch hier kann ich errechnen, dass der Kontakt mehr als 5 Minuten online war.

Ich kann also auch hier sehen, wann ein Kontakt online war und wie lange. Dazu brauche ich lediglich die Handynummer der Person. Diese Person wird niemals erfahren, dass er oder sie beobachtet und getrackt wurde.

Was kann jemand mit dem Online-Status anfangen?

Ist das denn so schlimm? Ich finde das schon. Mit diesen einfachen Mitteln kann man mit einem Browser das Online-Verhalten jeder Person über einen beliebig langen Zeitraum notieren.

Anhand dieser Daten könnte man die Aktivitäten ermitteln, z.B. ist die Person online gewesen ohne mir zu antworten. Oder wann geht die Person ungefähr ins Bett und wacht sie vermutlich auf. So kann ein Interessierter herausfinden, ob jemand am Wochenende feiern ist oder in der Woche wirklich am Arbeiten. Für eifersüchtige Partner oder Partner, die glauben, betrogen oder belogen zu werden, dürfte das äußerst interessant sein.

Apropos »betrogener« Partner. Dieser Partner könnte jemanden im Verdacht haben. Um herauszufinden, ob der eigene Partner mit der Verdachtsperson Kontakt hat, könnte der vermeintlich Betrogene ein zweites Handy besorgen und dort die verdächtige Person tracken. Und dann schauen, ob beide verdächtig gleichzeitig bzw. nacheinander online gehen.

Wie kann ich das Tracking meines Online Status verhindern?

Den Status »zuletzt online« kann man über die Einstellungen beim Datenschutz ausschalten. Würde ich jedem empfehlen.

Den Status »online« kann man jedoch gar nicht ausschalten.

Damit bleibt nur, das zu akzeptieren oder WhatsApp nicht nutzen bzw. eine Alternative zu verwenden.

Oder niemand Raum für Interpretationen lassen, so dass diese Spielchen mit der Meta-Ebene an Relevanz verlieren.


Eine Antwort zu “Wie man für beliebige Handynummern automatisiert den Zeitpunkt und die Dauer des Online-Status auf WhatsApp mitschreibt”

  1. Hallo Gerhard,
    danke für den Hinweis!

    Die CSS in der Webseite für WhatsApp haben sich geändert.
    Ich habe mein Skript aktualisiert.