neunzehn83.de

Ein Mann, ein Blog, kein Plan.

Verschleierung von "SPIEGEL Plus" unter der Lupe

SPIEGEL Plus ist das neue Bezahlangebot von spiegel.de bei dem einzelne Artikel teilweise nur "verschwommen" angezeigt werden bis man diese eben durch einen kleinen Centbetrag freischaltet. So sieht das dann aus:

SPON1

Aus rein technischem Hintergrund habe ich mir diese Verschleierung der SPIEGEL Plus Texte einmal genauer angeschaut - und war überrascht wie einfach man an die unverschleierten Texte rankommt.

Über dem verschleiertem Text liegt ein Filter, der für diese verschwommene Optik verantwortlich ist. Mit einem Web-Debug-Tool wie Firebug lässt sich diese CSS-Regel aber einfach entfernen. Darunter kommt dann ein verschleierter aber lesbarer Text zum Vorschein:

SPON2

Dieser Text könnte natürlich tatsächlich ordentlich verschlüsselt sein und sich somit nicht ohne Weiteres in den Originaltext zurückwandeln lassen. Was hier aber bereits auffällt, ist die Tatsache, dass die Wortlängen wohl beim Verschleiern erhalten bleiben. Zudem fällt auf, wenn man annimmt bei dem Ausschnitt handelt es sich um ein Interview, dass der Name des Interviewers (fett dargestellt) mit einem Semikolon endet - üblich wäre hier wohl ein Doppelpunkt. Diese zwei Zeichen liegen in der Zeichentabelle ziemlich nah beinander.

ASCII-Tabelle:
DEC CHAR
57  9
58  :
59  ;

Der Verdacht liegt nahe, dass hier einfach jeder Charcode um eins erhöht wurde, und der Text somit verschleiert wurde. Wir testen das!

Dabei hilft die Tatsache, dass jeder verschleierter Absatz eine Klasse "obfuscated" hat. Es ist also ein Leichtes, mit Javascript sämtliche p-Elemente mit dieser Klasse durchzugehen, die Charcodes aller Buchstaben um eins zu verringern und das Ergebnis wieder in das p zu schreiben. Das Leerzeichen hat mit 20 übrigens den niedrigsten Charcode und ist deshalb als einzige Ausnahme von dieser Subtraktion ausgeschlossen, da davor in der Zeichentabelle die nicht-druckbaren Zeichen beginnen.

#!javascript@1
// Verschwommen-Filter entfernen
document.getElementsByClassName('obfuscated-content')[0].parentElement.className='';
// Hinweis-Box entfernen
document.getElementsByTagName('svg')[0].nextSibling.nextSibling.innerHTML='';
// Beim durchlaufen der Chars müssen wir Ersetzungen innerhalb von Tags auslassen
var inside_tag = 0; 
// alle verschlüsselten Elemente durchlaufen
var p=document.getElementsByClassName('obfuscated');
for (var i=0; i<p.length; i++) {
	var result =''; 
	var text = p[i].innerHTML;

	// Alle Buchstaben durchlaufen
	for (var j=0; j<text.length; j++){
		if (text[j]=='<') inside_tag = 1;
		var cc = text.charCodeAt(j);
            var diff = cc==32 ? 0 : 1;
		result += inside_tag ? 
                text[j] : 
                String.fromCharCode(cc+diff); // wir _addieren_ diff
		if (text[j]=='>') inside_tag = 0;
	}
	p[i].innerHTML = result;
}
alert(':)');

(Um keinen funktionsfähigen Code hier anzubieten, wird oben "diff" zum Charcode (cc) addiert statt subtrahiert!)

Für Testzwecke(!) kann dies auch komfortabel direkt auf der Seite in der URL-Leiste ausgeführt werden. Obiger Code als Einzeiler:

#!javascript@1
avascript:document.getElementsByClassName('obfuscated-content')[0].parentElement.className='';document.getElementsByTagName('svg')[0].nextSibling.nextSibling.innerHTML='';tg=0;p=document.getElementsByClassName('obfuscated');for(var i=0;i<p.length;i++){f='';t=p[i].innerHTML;l=t.length;for(var j=0;j<l;j++){if(t[j]=='<')tg=1;cc=t.charCodeAt(j);diff=cc==32?0:1;f+=tg?t[j]:String.fromCharCode(cc+diff);if(t[j]=='>')tg=0;}p[i].innerHTML=f;}alert(':)');

Google-Chrome unterschlägt aus Sicherheitsgründen das "javascript:" am Anfang des Strings, wenn man das direkt aus der Zwischenablage so einfügt. Deshalb muss das "j" selbst in die Adressleiste getippt werden und dann kann obiger Code gepastet werden.

Und damit hier keine Missverständnisse aufkommen: Dies ist keineswegs eine Anleitung, um das Bezahlangebot von spiegel.de zu umgehen! Hier geht es rein um die technischen Aspekte dieser Verschleierung. Wer sich tatsächlich für den Artikel-Inhalt interessiert sollte diesen natürlich einfach kaufen! Aus diesem Grund ist der Beispielcode auch an einer Stelle verändert, um keine copy-paste Lösung hier anzubieten!

Geschrieben am Freitag, 01. Juli 2016 und abgelegt unter Allgemein.