New project: kugeln.io

Published 29 November, 2016

The last 15 month I spent my spare time working on a HTML5 based online shooter. I call it kugeln.io.

It's not released yet, but I'm getting closer every day.

Read full article ►

Why are websites slow?

Published 19 October, 2014

This article is about some optimizations to improve website loading times. I'm not a javascript or HTML expert, so this article is more about the technical side of network communication and HTTP.

Motivation

Several big companys like Amazon and Yahoo made some test by improving their page loading time. Amazons revenue increased by 1% for every 100ms, Yahoo increased their traffic by 9% for every 400ms of improvment and Mozilla got around 60mio more Firefox downloads by reducing their page loading time by 2.2sec. I don't know how reliable those statistics are, but it is very logical that people close websites when the loading time is to high.

Read full article ►

How to manipulate a radio controlled clock via speaker

Published 7 May, 2014

Caution: By playing these audio files, you may cause electromagnetic disturbances. This might be illegal, so it is advisable not to do that besides you really know what you're doing. I discourage from misuse the described effect. This article and program is only made for research.

A few month ago I presented my project, where I received the radio signal of the time signal radio station DCF77 with just a notebook and an old piece of a headphone cable.

The transmitter is located near Frankfurt in Germany and sends the current time to radio controlled clocks within a radius of several 1000km.

Now I want to show you how a computer can also send and not just receive this signal.

Read full article ►

Funkuhren manipulieren via Lautsprecher

Published 7 May, 2014

Achtung: Durch das Abspielen von Audiodateien, die hier im Artikel erwähnt werden, können elektromagnetische Störungen auftreten. Diese zu verursachen ist möglicherweise nicht legal, weshalb es ratsam ist, vor dem Nachmachen Rat von erfahrenen Leuten einzuholen. Ich rate jedem ausdrücklich davon ab, den hier beschriebenen Effekt missbräuchlich zu verwenden. Der Artikel und das Programm sind lediglich für Forschungsarbeiten vorgesehen.

Vor einigen Monaten habe ich mein Projekt vorgestellt, bei dem ich mit nichts Anderem als einem Notebook und einem Stück alten Kopfhörerkabel die Funksignale von dem Zeitzeichensender DCF77 empfangen habe.

Dieser Sender, welcher bei Frankfurt steht, sendet das Zeitsignal für Funkuhren im Umkreis von mehreren 1000km.

Jetzt möchte ich einen ähnlichen Hack vorstellen: Ein Computer kann dieses Signal nicht nur empfangen, sondern auch senden. Das Signal wird hier über den Lautsprecherausgang "gesendet". Dafür ist diesmal nicht einmal ein Stück Kabel notwendig.

Read full article ►

Funkuhrsignalempfänger (DCF77) via Soundkarte

Published 10 October, 2013

Heute möchte ich mal ein kleines Projekt von mir vorstellen: Ein selbst gebastelter Empfänger für das Funkuhr-Signal, welches vom Längstwellensender DCF77 (bei Frankfurt) verbreitet wird. Das tolle daran ist, dass man ihn mit Haushaltsmitteln nachbasteln kann.

So habe ich für die finale Version nur einen Computer und einen alten Kopfhörer gebraucht. Das Projekt war für mich auch der Einstieg in die digitale Signalverarbeitung und das Software Defined Radio (SDR), da das unbearbeitete Signal direkt gesampelt und per Software verarbeitet wird.

Read full article ►

Der Unix Timestamp wächst nicht linear

Published 13 August, 2013

Was genau ist die Unixzeit? Meistens wird einfach gesagt: Die Anzahl der Sekunden seit 00:00 Uhr am 1. Januar 1970. Das ist jedoch falsch.

Ein kurzer Crashkurs über die Zeit

Bis 1967 wurde die Länge einer Sekunde astronomisch bestimmt. Das war soweit auch ganz gut, weil wir Menschen uns ebenfalls nach der astronomischen Zeit richten (wenn es dunkel wird, gehen wir schlafen). Das ist allerdings nicht sehr genau, da die Länge eines Tages/Jahres leicht schwankt, weil die Erdrotation nicht gleichförmig ist. Deshalb wurde die SI-Sekunde eingeführt. Seitdem ist die genaue Definition:

Eine Sekunde ist das 9.192.631.770-fache der Periodendauer der dem Übergang zwischen den beiden Hyperfeinstrukturniveaus des Grundzustandes von Atomen des Nuklids 133Cs entsprechenden Strahlung.

Damit ist die Sekunde nicht mehr an die Erdrotation geknüpft. Dadurch kommt es zu leichten Abweichungen gegenüber der astronomischen Zeit (meistens mehrere Millisekunden pro Tag). Nun gibt es verschiedene Zeitsysteme. Das sind zum Beispiel:

  1. GMT: Ist hoffnungslos veraltet (bereits seit 1928). GMT wird immer noch oft angegeben, jedoch ist damit meistens UTC gemeint.
  2. Dann gibt es noch UT1 (oft auch einfach nur UT genannt). UT1 ist der Nachfolger der GMT. Es ist nicht an die SI-Sekunde gebunden. Wenn ein Tag etwas kürzer ist, als der vorherige, dann ist auch jede Sekunden dieses Tages etwas kürzer. Somit ist die Sekundenzahl immer konstant, die Länge jeder Sekunde aber unterschiedlich.
  3. TAI ist rein physikalisch. Jede Sekunde entspricht der SI-Sekunde und jeder Tag hat 86.400 Sekunden. Somit weicht TAI von der astronomischen Zeit ab. 1958 wurde TAI auf die aktuelle Zeit von UT1 gesetzt. Seitdem ist die Differenz zwischen TAI und UT1 schon bei 35 Sekunden (Stand: Juli 2012).
  4. UTC ist die am häufigsten gebrauchte Zeit. Eine Sekunde bei UTC entsprechen immer einer SI-Sekunde. Es ist also vergleichbar mit TAI. Jedoch ist garantiert, dass UTC maximal 0,9 Sekunden von UT1 abweicht. Das wird durch Schaltsekunden realisiert.

Schaltsekunden sind sehr ähnlich wie ein Schaltjahr, nur das nicht ein ganzer Tag eingefügt wird, sondern nur eine Sekunde. Außerdem lassen sich Schaltsekunden nicht auf längere Sicht bestimmen, da die Unregelmäßigkeiten der Erdrotation nur schwer vorhersehbar sind. Deshalb wird von einer Organisation (IERS) regelmäßig bestimmt, wann die nächste Schaltsekunde "auftreten" soll.

Okay, das hat jetzt erstmal nicht viel mit Informatik zutun. Aber es ist sicherlich nettes Background-Wissen.

Read full article ►

Protokollentwicklung: TCP vs. UDP

Published 11 November, 2012

Ein neues Netzwerkprotokoll muss her.

Vor dieser Aufgabe steht man öfters, wenn man eine Client/Server-Software schreibt und bestehende Lösungen nicht den Anforderungen entsprechen.

Die Auswahl, auf welchem Protokoll aus der Transportschicht (OSI-Modell) das neue Protokoll basiert, gehört zu einer der ersten Dinge bei der Entwicklung.

In den allermeisten (!) Fällen kommt hier TCP und UDP in Frage. In diesem Artikel beziehe ich mich ausschließlich auf POSIX-Sockets, da man fast ausschließlich diese benutzt (WinSock sind fast identisch zu den POSIX-Sockets).

Read full article ►

Inkonsistente Vergleiche in PHP

Published 6 September, 2012

Nach kurzem googlen findet man reichlich Gründe, warum die Sprache PHP einem schlechten Design unterliegt. Dies fängt bei inkonsistenten Funkionsnamen an und geht bis zur schlechen Dokumentation.

Mein persönlicher Favorit sind hierbei die inkonsistenten Vergleichsergebnisse von verschiedenen Variable. Klar, bei "1 = 1" verschluckt sich PHP noch nicht, aber was ich mit folgendem?

<?php
echo array() == 0 ? 1 : 0;
echo false == 0 ? 1 : 0;

Die Ausgabe ist "101". D.h. ein leeres Array ist gleich "false", aber nicht gleich "0". "false" ist jedoch gleich mit "0".

Das kann man jedoch verhinden, indem man noch den gleichen Typen vergleicht. Hierfür gibt es neben dem normalen Operator == noch den Operator ===, welcher genau dies tut. (Sauberer) Nebeneffekt ist hierbei, dass so Undinge wie der Vergleich von dem String "1" und der Zahl 1 ebenfalls false sind. In formalem PHP-speak überprüft man übrigens beim Operator "==", ob die Variablen gleich (equal) sind und beim Operator "===", ob sie identisch (identical) sind (siehe hier). Lustig, laut Duden ist "identisch" ein Synonym für "gleich". Aber was solls ;-)

Mein eingereichter PHP-Patch feiert übrigens bald sein dreimonatiges zweijähriges Bestehen, steht immernoch auf "Open" und wurde noch keinem Entwickler zugewiesen.

Ausführbare Dateien unter Windows tarnen

Published 26 July, 2012

Achtung: Dieser Eintrag soll keine Beschreibung/Aufforderung zur Sabotage sein, sondern lediglich ein Gefühl für Sicherheitslücken durch Unicode-Zeichen vermitteln und gleichzeitig davor warnen, selber Opfer einer solchen Lücke zu werden.

Lateinische Schrift (sowieso nahe Abkömmlinge) wird von links nacht rechts gelesen. Es gibt jedoch auch viele Schriften (z.B. arabische) welche von rechts nacht links gelesen werden. Um einen Computer zu signalisieren, in welche Richtung eine Bytefolge nun ausgegeben werden soll, gibt es im Unicode-Zeichensatz einige nicht-druckbare Zeichen, welche die Schreibrichtung des nachfolgenden Textes angeben. Interessant sind dabei die Zeichen "right-to-left override" (RTLO, 0x202E) und "left-to-right override" (LTRO, 0x202D).

Read full article ►

Eine Webseite in Assemblersprache schreiben

Published 4 July, 2012

Die meisten Webseiten werden in Hochsprachen geschrieben, welche weit von der Ebene des nativen Maschinencodes entfernt sind: PHP wird interpretiert, C# und Java wird von einer virtuellen Maschine aufgeführt, bestenfalls von einem JIT-Compiler zur Laufzeit zu nativen Code kompiliert und in C/C++ werden nur (noch) sehr selten Webseiten entwickelt (schade eigentlich...).

Theoretisch ist es aber auch möglich, eine Webseite direkt in Assembly Language zu schreiben. Wie das geht, möchte ich in diesem, nicht ganz ernst zu nehmenden, Artikel beschreiben. Das Beispiel ist für eine Linux Maschine unter IA-32 (x86, 32-Bit) entwickelt.

Read full article ►

Warum XSS böse ist

Published 27 June, 2012

Bei XSS handelt es sich um das Cross-Site-Scripting welches das “einschleusen” von HTML oder Javascript in eine Webseite beschreibt. Es handelt sich dabei um eine der einfachsten Möglichkeiten um Webseiten anzugreifen.

Diese Sicherheitslücke kann etwa so entstehen: echo 'Ihre Suchanfrage nach ' . $_GET['term'] . ' ergab leider keinen Treffer.';

Eine normale Suchanfrage könnte nun so aussehen:
http://webseite/suche?term=Foobar Ihre Suchanfrage nach Foobar ergab leider keinen Treffer.

Ein Request von einem Angreifer könnte jedoch folgendes Ergebnis erzielen:
http://webseite/suche?term=<iframe src="http://andereWebseite"> Ihre Suchanfrage nach <iframe src="http://andereWebseite"> ergab leider keinen Treffer.

Der Browser würde nun den iframe-Tag auswerten und den Inhalt einer externen Webseite anzeigen. Dies wäre nun eine non-persistente XSS-Lücke, da der “Schadcode” nicht auf dem Server gespeichert wird, sondern lediglicht reflektiert wird.

Die hier gezeigt Lücke ist (leider) auf sehr vielen Webseiten in genau dieser Form vorhanden. Dies liegt vermutlich daran, dass die meisten Administratoren/Webentwickler die Gefahren von solchen non-persistenten XSS-Lücken weit unterschätzen.

Read full article ►