Es lebt!
…sowohl Harmony, als auch mein Blog inkl. mir.

Es ist vollbracht: Harmony 3.0 ist praktisch fertig! Fertig ist bei einer komplett modularen Applikation zwar ein sehr dehnbarer Begriff, aber die Core ist soweit fertig, dass nun kundenspezifische Module aufgesetzt werden können. Rückblickend betrachtet ist es faszinierend zu sehen, wie viele Anläufe es gebraucht hat, um an diesem Punkt anzukommen. Doch lest selbst:
Pre-Harmony
Mein Interesse an RO Erweiterungen, insbesondere Anti-Bot Systemen, geht ursprünglich auf meine AniRO-Zeit 2006 zurück. Sirius_Black, dortiger Admin, hatte den Client um eine game.dll erweitert, welche den Loginprozess verschlüsselte, eine eindeutige Hardware ID an den Loginserver schickte und eine rudimentäre WPE Protection implementierte. Ich hatte damals keine Ahnung von der Funktionsweise dieser DLL, gab jedoch mein Bestes um dies zu ändern. Ohne viel Erfolg.
Januar – August 2007 – Als ich aufgrund persönlicher Differenzen mit anderen GMs AniRO verließ und mich dazu entschied SoulRO zu eröffnen, entstand die erste Idee einer eigenen “game.dll”. Da mein Kontakt zu Sirius_Black durch das AniRO Drama kaum gelitten hatte, war er bereit mir mit Hilfestellungen und Codebeispielen bei der ersten DLL zu helfen. Nach einigen Startschwierigkeiten entstand also die erste SoulRO DLL. Die ersten sechs Wochen war ich praktisch täglich bemüht Bugs im Packet Parser zu entfernen, bis ich dann letztendlich jegliche Packet Parser von Winsock abstrahierte, den Code dadurch geschätzte 50% langsamer machte und meine Ruhe hatte. Der damalige Code ist in vielerlei Hinsicht … faszinierend, aber dazu vielleicht ein andermal mehr.
Harmony v1
Dezember 2007 – Es entstand die erste komplette Bot Protection mit vollständiger Paketverschlüsselung. Im Grunde genommen wurde vor jeder Verbindung ein Handshaking durchgeführt, welches den Standard Encryption Key mit einigen Seeds modifizierte. Anschließend wurde der gesamte Netzwerkstream mit Blowfish enkodiert. Jeder Datenblock wurde in ein Frame kopiert, welches erweiterte Informationen (Länge, Paketnummer, CRC, Keymodifier) enthielt. Mithilfe der Keymodifier wurde eine Kopie des Encryption Keys permanent modifiziert und nach dynamischen Intervallen wurden die beiden Keys ausgetauscht. Wem die technischen Details von Harmony v1 vertraut sind, sollte dies sehr bekannt vorkommen: Im Grunde handelte es sich hierbei um die erste Testversion von Harmony – allerdings noch nicht unter diesem Namen.
Februar 2008 – Einige Monate später wurde ich von einem großen brasilianischen Server angesprochen, der Harmony erwerben wollte. Die erwähnte Testversion wurde daher überarbeitet und ausgebaut – leider hat sich der brasilianische Server nie wieder gemeldet und die Entwicklung wurde somit auf Eis gelegt.
April 2008 – Nach der Neueröffnung von LegacyRO entwickelte sich der Server mit 2600 Spielern schnell zum größten englischsprachigen pServer. Über Yommy wurde Itakou, Legacy Admin, auf mich aufmerksam und ich bekam den Auftrag, eine Bot Protection für LegacyRO zu entwickeln. Am 02.05.2008 wurde dann Harmony v1 auf LegacyRO eingebaut. Itakou wollte seinem Sicherheitssystem außerdem einen “catchy name” geben – der Name “Harmony” entstand.
Harmony v2
Mai 2008 – Bedingt durch die Popularität LegacyROs gelang auch Harmony schnell in den Fokus der Botting Community: Nach anfänglichen Verwirrungen und interessanten, wenn auch vollkommen falschen Spekulationen über die Namensgebung kristallisierte sich bald heraus, dass Harmony auf Dauer der OpenKore Community nicht standhalten würde. Nach Rücksprache mit Itakou begann ich folglich mit der Entwicklung von Harmony v2: Einem kompletten Rewrite, in dem ich versuchte, alle mir bekannten Technologien erfolgreich zu vereinen. Das Ergebnis war ein System, welches recht tief in die EXE “hineingehackt” war und über fixe Code Offsets mit DLL interagierte. Der Verschlüsselungscode wurde zlib komprimiert vom Server geschickt und dann lokal ausgeführt. Alles in allem war das Projekt ein absolutes Chaos an C und ASM Dateien, was mir einen Monat später wie bereits ein Buch mit sieben Siegeln erschien. Am 29.05.2008 wurde Harmony geknackt, vier Tage später war die Implementation von Harmony v2 geplant. Diese Pläne wurden jedoch vorzeitig durchkreuzt:
Juni 2008 – Am 03.06.2008 wurde bekannt, dass LegacyRO über mehrere Wochen infiltriert worden war und wohl nach nicht einmal zwei Monaten erneut wipen würde. Da es sich bei den Hackern größtenteils um “4chan-Kiddies” (not420chan um genau zu sein) handelte, wurden alle eroberten Zugangsdaten in einem Forum mit Genitalverstümmelungshintergrundbildern gepostet. Zur Schadensbegrenzung sicherte ich Itakous Gmail Account sowie seine eAthena Zugangsdaten. Über eine dort gespeicherte PM erfuhr ich, dass Itakou Harmony 1 und 2 an zephyrus_cr weitergegeben hatte. Nach einigen klärenden Gesprächen mit Itakou und Zephyrus einigten wir uns auf eine künftige Zusammenarbeit und ich erklärte mich bereit, einige abschließende Fixes an Harmony vorzunehmen. Währenddessen versuchte sich OpenKore vergeblich an der neuen Version und letztendlich gab man es schlichtweg auf.
Harmony v3
Mitte Juni kam mir dann erstmals die Idee, Harmony v3 zu entwickeln. Durch GlobeRO und andere Projekte fehlte mir dazu zu dem Zeitpunkt jedoch sowohl die Zeit, als auch die Motivation für ernsthafte Entwicklungen. Meine Fortschritte beschränkten sich daher auf theoretische Nachforschungen und Konzeption.
Dezember 2008 – Im Zuge der allwinterlichen Codingmotivation rückte Harmony 3 erneut in den Fokus meines Interesses. Zu dieser Zeit entstand eine Harmony 3 Core, welche sich aus knapp 3500 Zeilen C++ zusammensetzte. Einen Kernbestandteil des Codes machten einige Funktionen aus, welche die libC erst in Teilen und später komplett ersetzen sollten – insbesondere dieser Teil sollte später noch relevant für die finale Version von Harmony 3 werden. Die Idee eigener Kerneltreiber musste ich recht schnell wieder verwerfen, da mir einerseits die nötige Erfahrung fehlte und dies zu viele Spieler ohne Administratorrechte ausgrenzen würde.
Ende Dezember eröffnete Itakou PhaseRO. Ich weiß bis heute nicht welche Harmony-Version er dort im Einsatz hatte – es muss wohl irgendein Mix aus v1 und v2 gewesen sein, wobei eines das andere deaktiviert hat. Auf Itakous Bitte hin nahm ich einen Developer Posten auf PhaseRO an und kündigte eine “baldige Fertigstellung” von Harmony v3 an. Da sich OpenKore aber scheinbar schon damit abgefunden hatte, dass man auf PhaseRO nicht botten konnte, hatte Harmony erneut eine vergleichsweise niedrige Priorität.
Januar 2009 – In einem Anflug von Langeweile entwickelte ich ein kleines IDA Plugin, welche Funktionsoffsets suchte und MsgStringTable.txt Zugriffe mit Kommentaren versah. Für Harmony an sich irrelevant, das Plugin wurde jedoch später als Grundlage für einige Harmony-spezifische Plugins verwendet.
Februar 2009 – Mit harmonyLink wurde ein wichtiger Bestandteil des neuen Harmony Konzepts ermöglicht: Die Nachbearbeitung des Harmony Codes.
Mai 2009 – Meine Arbeiten an der kRO Ragexe ermöglichten mir eine praktische Auseinandersetzung mit ASProtect und ließen nebenbei einige praktische Ideen für die Entwicklung von Harmony entstehen – was mir große Probleme machte, würde ja wohl auch anderen Steine in den Weg legen…
Dazu entstanden während dieser Zeit einige interessante Skripte zur Identifizierung von Funktionen in einer Binary, welche später in die Entwicklung der Harmony Tools einfließen sollten.
Juli 2009 – Einer spontanen Idee nachgehend entwickelte ich ein Projekt, welche die bis dahin fortgeschrittenste Art der Verschlüsselung nutzte. Mithilfe eines Paket(per)mutationsalgorithmus und anderer Techniken gelang es mir die Pakete auf dem bisher tiefsten Layer zu verschlüsseln. Das Projekt ließ sich dafür jedoch nur mit einigen tausend Zeilen PHP compilen und war in seiner gesamten Struktur mehr ein Testprojekt. Da ich im August mit einigen Freunden anfing auf epicRO zu spielen blieb das Projekt mehr oder weniger liegen, vom gewonnen Know-how floss aber ein großer Teil in die Core meines dort entwickelten Bots.
… und es ward lange still um Harmony.
Dezember 2009 – Dezember scheint ein guter Monat für Harmony zu sein. In den vergangen Wochen ist das Harmony Projekt erneut aus den Ruinen seiner Vorgänger auferstanden. Allein vom Umfang hat es diese Vorgänger bereits lange hinter sich gelassen und die Struktur ist absichtlich so strukturiert und dokumentiert, dass man es ohne große Einarbeitung erweitern kann. Die Coremodule stehen, T0ols sind geschrieben und die benötigten Contentmodule sind in Arbeit. Harmony 3 wird einige Features des RO Clients komplett ersetzen, der bekannte Screenshot-Lag ist beispielsweise bereits gefixt. Die Sicherheit wird, wie schon in Teilen des Juli-Projektes, auf mehreren Layern und in abgekapselten Modulen erzielt. Selbst wenn die OpenKore Community also Harmony 3 knacken sollte – der Bypass wird bei weitem komplexer sein als der kürzlich veröffentlichte Vanguard Bypass.