Die Arbeit an Gnash, einer freien Implementation des Adobe-Flash-Players, ist für Rob Savoye eine harte Nuss: Es gilt, die Protokolldetails von RTMP zu entschlüsseln. Auf der Fosdem offenbarte der Entwickler sein Vorgehen.
Der bei dem Projekt-Unternehmen Open Media Now von Red-Hat-Gründer Bob Young angestellte Entwickler hat in seiner Vergangenheit schon an Compilern und Debuggern mitgewirkt, bei Gnash kümmert er sich darum, den Support von Actionscript 9 noch weiter zu verbessern. Die Version 8 der Sprache beherrscht das Programm schon jetzt, das es als Plugin für Firefox und Konqueror gibt, erklärte der Amerikaner.
Das Reverse-Engineering sei nicht zuletzt auch eine mentale Frage, erklärt der Entwickler. Er starre manchmal einfach nur lange genug auf Hexcode, bis er eine Eingebung habe, meint Savoye mit einem Augenzwinkern. An einem Beispiel demonstrierte er sein Vorgehen: Zunächst sucht er in einer Sammlung von möglichst vielen und großen Beispielartefakten nach Bytefolgen, die im Bereich der Ascii-Codierung liegen und zeigt sie an. Damit würden auch die Grenzen der anderen Datenfelder offenkundiger. Anschließend versucht er einen Protokollheader zu lokalisieren. Er enthalte oft Längenangaben und Checksummen und ließe sich mit etwas Erfahrung gut erkennen.
Zahlen seien in Netzwerkprotokollen fast immer in Big-Endian-Reihenfolge codiert und als Checksumme kommt nur selten etwas anderes als eine einfache Summe oder der CRC-Algorthmus vor, enthüllt Savoye. Um seine Angaben zu überprüfen, schreibt er eine Menge Testcode, warnt aber auch angehende Reverse-Ingenieure, dass sie viel davon wieder wegwerfen müssten, wenn sich Annahmen als falsch herausstellen.
Zuletzt warnte er noch mögliche Nachahmer vor möglichen juristischen Folgen: Reines Disassemblieren von proprietärer Software könne zu Rechtsansprüchen der jeweiligen Hersteller führen. Daher empfahl er, möglichst frühzeitig einen Anwalt in den Prozess zu involvieren. Außerdem sei es nützlich, wenn bei Re-Implementationen ein Entwickler die Spezifikation aus Netzpaketen extrahiere und ein anderer unabhängig davon nur auf Grundlage dieser Protokollbeschreibung neue Anwendungen implementiere. Für das Anzeigen von Youtube-Videos hat das Vorgehen offenbar schon gereicht: Sie lassen sich mit der aktuellen Gnash-Version bereits ansehen.





