The case of RCX

Harmony ist dafür da, Fremdsoftware zu blockieren. Das tut es auch recht gut. Problematisch wird es nur, wenn man ein Programm explizit unterstützen muss… Die Rede ist von RCX – einer japanische Erweiterung des RO Clients, die vielen “alten Hasen” unter RoCha bekannt sein dürfte. Ansonsten verschafft dieses Video einen recht guten Überblick über die Features:

Ein Kunde sprach mich vor kurzem darauf an, dass RCX nicht mit Harmony kompatibel sei. Nicht verwunderlich, schließlich lädt RCX nicht nur eine fremde DLL, sondern fängt auch Winsock Funktionen ab, um anhand der Netzwerkpakete beispielsweise Skilleffekte anzuzeigen. So begann also mein Odysee hin zu einem RCX Fix…

Nach kurzer Codeanalyse stellte sich heraus, warum andere Bot-Protections keine derartigen Probleme haben: Die Netzwerkfunktionen arbeiten nicht direkt auf WinAPI Ebene – RCX umgeht sie daher dezent. Da Harmony auf mehreren Layern arbeitet und alle davon unter RCX liegen gestaltet sich die Sache etwas schwieriger.
Mein finaler Plan:

  • Über Whitelisting wird der RCX DLL der Zugriff auf Harmony gestattet
  • Ein- und ausgehende Netzwerkpakete werden gesammelt und über emulierte Winsock Aufrufe an RCX übergeben
  • ????
  • Profit!

Punkt 1 war schnell erledigt. Die Emulation der Winsock Aufrufe wurde etwas ekelhafter: RCX fängt alle Winsock Aufrufe ab und muss daher selbstständig die originalen Funktionen aufrufen. Bei eingehenden Paketen würde RCX also selbstständig “nachfragen”, ob Pakete vorhanden sind, feststellen, dass dem nicht so ist und einfach mal nichts tun. Ich durfte daher die originalen Winsock Funktionsaufrufe ebenfalls abfangen und RCX mit meinen Daten füttern. Dazu kommt, dass einige Harmony Layer den RO Client derart modifizieren, dass eine Rekonstruktion der originalen Pakete nur mit erheblichem Aufwand möglich ist. Yay.

Im Endeffekt konnte ich den Code auf ~300 Zeilen (und 8 Stunden Arbeit…) kürzen, trotzdem denke ich lieber nicht so oft daran, was bei aktiviertem RCX Fix mit Netzwerkpaketen angestellt wird:

7 Responses to “The case of RCX”

  1. jimetsu sagt:

    Kann man die whitelist nicht exploiten mit einer andere dll oder wie hast du das genau gelöst? o.o

  2. Sirius_White sagt:

    ich überprüfe schon ein paar sachen bevor ich RCX rein lasse :) und selbst wenn – mehr als read-only zugriff auf non-harmony pakete kannst du damit eh nicht kriegen…

  3. Bahmut sagt:

    Ich hab zwar keine Ahnung wie die Programmierung von Harmony funktioniert, aber wäre es nicht einfacher gewsen ein eigenes RCX ähnliches Clienttool in Harmony einzubauen um so den Kunden ein weiteres Feature zu zeigen bzw. das man eine All-in-One Lösung hat ohne externe Programme. Außerdem könnte man doch (bin mir da nicht sicher) damit zeigen was der Window Manager so leisten kann. Ist nur ein konstruktiver Einwand von einem nicht Programmierer.

    – Bahmut

  4. Sirius_White sagt:

    Werde ich auch. Allerdings hatte ich in der Situation schlicht keine Zeit, etwas eigenes zu entwickeln, da auf dem Server für viele Spieler RCX überlebensnotwendig war und folglich unter allen Umständen bis zum WoE funktionieren musste.
    Aber wie gesagt – ein eigenes RCX Modul ist einer der 3.3 Milestones. Zusammen mit der Fertigstellung des Window Managers… :)

  5. DarkDevine sagt:

    Teile davon sind ja bereits im RE Client implementiert, wie z.B. der Skilltimer.

    All zu viel gibts ja da bei einem eigenen Tool nicht mehr zu tun denke ich.

    Vielleicht wäre es auch sinnvoller, erstmal abzuwarten, was Gravity noch alles in den RE Client in absehbarer Zeit implementiert, bevor mein ein eigenes Tool dafür auf die Beine stellt.

  6. Sirius_White sagt:

    Wobei der Delaytimer von RCX zum Beispiel echt prakisch ist (oder auch M2E)… Ich glaube nicht, dass noch allzu viel kommt von Grav.

  7. Veydron sagt:

    Wo müsst man sich melden wenn man Interesse an Harmony für seinen eigenen Ro Server hätte ?

    Bzw ich hab über ecken gehört das mit Haromny auch änderungen am UI vom RO clienten möglich seien ? Stimmt das und in wie weit bzw wie umfänglich können die sein ?

    Grüsse Veydron

    Bin per PM über eathena melden oder per MSN

Leave a Reply