Multicraft – Lizenz und Python Internals

Multicraft ist ein All-In-One Minecraft Hosting und Server Verwaltung. Dabei können mehrere Server über einen sogenannten Deamon gesteuert werden, mehrere Deamons werden in einem großen Control-Panel mit Webinterface zusammengefasst. In der Free-Version kann man exakt einen Server auf einem Deamon hosten und ist auf 10 Spieler für diesen einen Server beschränkt. Es gibt weitere, skalierbare Lizenzen die mehrere Server, mehrere Deamons und unbegrenzte Spielerzahlen erlauben. Das höchste aller Gefühle ist dabei die „Dynamic“ Lizenz die unbeschränkt ist und mit steigender Anzahl der Server/Deamons immer teurer wird.

Multicraft wird für Windows und Linux angeboten. Die meisten Server laufen unter Linux, für mich persönlich ist aber das Reverse Engineering auf Windows leichter. Die auf Windows gewonnenen Erkenntnisse lassen sich zum Glück einfach auf Linux übertragen. Warum? Das hat mit dem etwas wilden Aufbau von Multicraft zu tun:

Schaut man sich diese vielen in Multicraft verwendeten Technologien an wird klar dass hier viel zusammengemixed wurde. Python, PHP und NodeJS sind komplett unterschiedliche Programmiersprachen. Vorallem fällt Python ins Auge was (nach diesem Artikelname wenig überraschend) die Haupttechnologie für Multicraft ist. In dem bin-Ordner findet sich neben einer python27.dll einige vorkompilierte *.pyd Module. Die eigentliche Multicraft Binary ist aber eine normale (und riesige) Excutable. Die Entwickler haben das ganze Python-Framework direkt mitgeschickt, damit der User es nicht noch installieren muss. Natürlich auf die Kosten von einer riesigen Installation. Vielleicht kann uns IDA mehr dazu verraten:

Diese Grafik stellt IDA zur Verfügung um den Aufbau der Binary zu beschreiben. Die blauen und orangefarbenen Regionen sind Programmcode, Grau sind Daten wie Strings und statische Adressbereiche. Schwarz wiederrum findet man in kaum einer Anwendung, es handelt sich dabei um nirgends referenzierte Adressbereiche und Daten die für IDA keinen Sinn ergeben. Solche finden sich oftmals bei gecrypteter Malware die wiederrum diesen Code erst entschlüsseln.

Continue Reading

4+

ConfuserEx – Follow the x86 Predicate

In diesem Artikel geht es darum Wege zu erkunden. Zwar keine Wege im eigentlichen oder fantasievollen Sinne, sondern der Weg von Instruktionen und Code. Denn genau das macht die sogenannte „Control-Flow-Obfuscation“ von ConfuserEx . Dabei wird der sonst so linear ablaufende Code durch Codefragmente und scheinbar unvorhersehbare Sprünge ersetzt. Jedes Codefragment liefert nach der Ausführung eine Zahl, die genutzt wird um den Sprung zum nächsten Codefragment zu berechnen.

Die Idee dahinter ist nicht neu und wird bereits in vielen Obfuscatoren eingesetzt. Auch kann Code-Flow-Obfuscation bereits hinreichend gut von dem Universaldeobfuscator de4dot entfernt werden. Doch was verleitet mich dennoch dazu diesem Schutzmechanismus einen eigenen Artikel zu widmen ? Es geht um die spezielle Art wie diese Code-Flow-Obfuscation aufgebaut ist und wie man sie im rückgängig machen kann.

An dieser Stelle muss ich direkt anmerken dass es in diesem Artikel nicht darum geht die Code-Flow-Obfuscation zu entfernen mit dem Ziel wieder einen linearen Code zu erhalten. Das können andere Tools inzwischen sehr gut. Es geht vielmehr darum Obfuscation in eine abgewandelte, ja sogar hübschere Form zu überführen die von weiteren Tools bearbeitet werden kann. Wessen Interesse trotzdem geweckt ist darf gerne weiter lesen und sich in die Welt der x86 Predicates begeben.

Continue Reading

3+

Blog im neuen Gewand

Die Schließung von Cinipac steht direkt bevor, daher wurde der Blog inklusive Domain auf einen neuen Hoster umgezogen.  Im Zuge des Umzugs wurde auch das längst überfällige Update auf WordPress 4 durchgeführt und dem Blog ein neues Theme verpasst. Einige Downloads wurden noch nicht richtig migriert, was aber in den nächsten Tagen noch passieren wird. Auch an dem CSS des aktuellen Themes gibt es noch einige Schönheitskorrekturen vorzunehmen.

Das alte Theme „monochrome“ hat diesen Blog nun durch sechs Jahre und 120 Artikel begleitet. Ich werde es schon ein wenig vermissen. Aber es tut dem Blog auch gut mal wieder in einem neuen Gewand aufzutreten.

Die Likes der Beiträge konnten leider nicht übernommen werden. Ich nutze diese Likes primär als Indikator wie sehr ihr Leser euch für das Thema interessiert. Daher nicht zögern sondern mir gerne darüber Feedback geben.

Abschließend gibt es noch einen Artikel über die ConfuserEx x86 Predicates anzukündigen. Die englische Fassung des Artikels steht bereits, für die Übersetzung brauche ich noch ein paar ruhige Minuten.

Grüße Easy

5+

Dirt Rally – Joystick zum Schalten

Dirt Rally ist eine bekannte Autorennsimulation. Die teils sehr anspruchsvollen Kurse zu meistern ist ohne Lenkrad quasi unmöglich. Praktischerweise hatte ich ein altes Lenkrad herumstehen um ein wenig Dirt Rally zu spielen. Mein altes Lenkrad besteht nur aus dem Steuerrad und zwei Fußpedalen, es kommt daher ohne einen zusätzlichen Schalthebel aus. Praktischer und realistischer wäre es doch wenn man sich irgendwie einen Schalthebel aus einem alten Joystick bauen kann! Und genau dieses Projekt mit all seinen auftretenden Problemen soll in diesem Blogpost beschrieben werden.

Die Grundidee besteht aus einem externen Programm welches im Hintergrund mit dem Joystick kommuniziert. Sobald eine Schaltbewegung (= Joystick nach vorne/hinten und wieder in die Ruhelage) detektiert wird soll das Programm den Tastendruck zum Hoch- bzw. Runter schalten an Dirt Rally senden. Zum Auslesen des Joysticks gibt es ein nettes Tutorial mit dem Managed DirectX Framework mit dem das gewünschte Verhalten schnell implementiert werden konnte. Dabei wird die Y-Achse des Joysticks abgerufen ob sich der Wert auf 0 (= Vorne) oder 65535 ( = Hinten) befindet. Falls dieser Zustand erreicht wurde und wieder verlassen wird findet das „Schalten“ statt.

Joystick1

Nun ging es nur noch darum die Taste zum Hoch- bzw. Runterschalten an Dirt zu senden. Dazu gibt es verschiedene Wege wie z.B. SendKeys unter .NET oder die nativen Methoden wie SendMessage/SendInput . Problematisch war dass selbst nach mehreren Stunden des Experimentierens keine Tasteneingabe von diesem externen Programm an Dirt Rally gelangte. Ich weiß bis heute nicht warum das Programm nicht auf die Signale reagierte. Die Vermutung ist dass direkt mit dem Tastaturtreiber kommuniziert wird. Aber dieses Verhalten für den Blogpost ist es eigentlich sehr positiv denn sonst wäre er nie entstanden. Man musste sich also einen anderen Weg überlegen Tastatureingaben an Dirt Rally zu schicken.

Continue Reading

0

SQLiDumper 8.2 – Proxys!

Elektrotechnik wird zunächst einmal Beiseite gelegt, ich habe die Lust zum Reversen wiedergefunden. Ein Bekannter spielte mir ein Sample des SQLiDumpers 8.2 zu. Dieses universelle SQL Injection Tool nimmt faulen Leuten (und damit leider auch Leuten die keine Ahnung haben) die ganze Arbeit ab. Über das Suchen der SQL Injections per Google Dorks kann das Tool die gefunden Lücken direkt exploiten und auch Datensätze dumpen. Deswegen sei direkt gesagt: Das Tool wird hier definitiv nicht veröffentlicht, wer nur darauf aus ist kann sofort aufhören weiterzulesen.

Ich hatte bereits mit einigen alten Versionen dieses Tools zu tun, die immer unzureichend geschützt waren. Mal war es ein nativer Packer, der direkt die schön lesbare .NET Assembly lieferte, mal war der Code zum Generieren von gültigen Keys direkt mitgeliefert. Umso erstaunter war ich also, als ich ein Proxysystem entdeckte. Es ist lange nicht so komplex wie das Proxysystem von Confuser, was bereits behandelt wurde, aber dennoch komplex genug um spannende Erkentnisse mitzunehmen. Öffnen wir doch einfach die Assembly und schauen rein!

Ein paar Sachen fallen dem geübten Reverser direkt ins Auge: Wir haben eine Ressourcen Datei (Knappe 10 MB! ) und einen statischen <Module>.cctor-Konstruktor. In diesem Konstruktor stecken die Funktionen, die statische Variablen initialisert. Es wird daher von Obfuscatoren gerne genutzt um Anti-Debug funktionen zu starten oder Ressourcen zu entschlüsseln, denn diese Methode wird vor allen anderen aufgerufen. Des weiteren haben wir keine Namespaces und nur komisch benannte Klassen. Wer im .NET Bereich unterwegs ist erkennt sofort die Namen: Es sind Namen des .NET Frameworks die es so gibt! Allerdings enthalten sie nicht den Inhalt der originalen Framework-Klassen. Auch sieht man schon an dem Icon, dass es sich zum Teil um unterschiedliche Typen handelt. Wir behandeln erstmal den einfachsten Typ: Ein Delegate Proxy.

Continue Reading

0

Elektrotechnik Serie – Was wird es?

Wie aus dem ersten Post dieser Serie zu entnehmen ist, erscheint nun eine Serie über Elektrotechnik und Mikrocontrollerprogrammierung. Welchem Umfang diese Serie annimmt kann ich noch nicht sagen, da das Projekt selbst noch nicht abgeschlossen ist und mir immer weitere Ideen zum Erweitern kommen. Aber da der Basis-Aufbau bereits (prototypisch) steht, gibt es hier nun den ersten Post!

Es geht primär um die Automatisierung und Steuerung von RGB LED Strips und Lichterketten. Ein Thema, was in Tutorials zugegebener Maßen oftmals behandelt wird. Mir geht es allerdings nicht nur nur darum, Lichterketten per Mikrocontroller zum leuchten zu bringen! Viel spannender sind alle Features, die man zur Ansteurung nutzen und selbst Programmieren kann. Hier ist der Kretivität keine Grenze gesetzt!

Der Grundaufbau ist ein Adafruit Bluefruit LE Micro mit einem ATmega32u4 Prozessor. Dieser relativ kleine Arduino besitzt ein Bluetooth 4.0 Low Energy Modul, um mit seiner Umwelt zu kommunizieren. Weiter habe ich handelsübliche  RGB LED Lichterketten (3 und 5 Meter) rumliegen, die es zunächst zum Leuchten zu bringen gilt.

out_rgb_strip

Continue Reading

0

Easy goes Elektro

Elektrotechnik war im Studium wirklich nicht mein Fall. Komische Netze aufstellen, Einschwingvorgänge berechnen und Spannungsteiler aufbauen… Die Klausur wurde knapp bestanden und Elektrotechnik war damit für mich abgehakt. Ich fühle mich bei Software einfach wohler. Man kann keine Stromschläge bekommen und auch nichts durchbrennen wenn man es falsch anschließt. Und man hat einen linaren Programmfluss! Doch über ein Projekt an der Universität habe ich mich nun mit Mikrocontrollern angefreudet. Und überraschenderweise hab ich bisher keinen einzigen Stromschlag bekommen, nichts kaputt gemacht und musste auch keinen Einschwingvorgang berechnen! So habe ich Spass an der Mikroelektronik gefunden und verfolge das Thema nun auch in meiner Freizeit.

Nun werde ich also auch diesen Blog mit meinem aktuellen Projekt füllen. Ich werde weniger auf die technischen Aspekte eingehen, da ich selbst keine Lust hätte so etwas zu lesen.Und viele Informationen gibt Internet viel besser aufbereitet. Stattdessen wird berichtet was ich erreicht habe, was ich noch erreichen möchte und welche Probleme mir dabei über den Weg gelaufen sind. Ich freue mich besonders über Rückmeldungen und Verbesserungsvorschläge von Seiten des Lesers. Ich bin sicher dass einiges was ich auf dem Breadboard aufbaue falsch erklärt ist und schlechte Praktik darstellt. In dem Fall bin ich der Laie und freue mich über jede Rückmeldung!

Gespannt was das Projekt wird? Noch ein wenig Geduld, dazu kommt bald ein detailierter Post 🙂 Das da oben hat auf jeden Fall damit zu tun .

So far, Easysurfer

0

RRT – Ein Auto Parken

Besser spät als nie! Hier der abschließende Post zu RRT – Eine Simulationsumgebung. Ich habe mich an einer typischen RRT Aufgabe Versucht: Parke das Auto in eine enge Parklücke und stelle es am Ende möglichst paralell zum Bordstein hin. Dabei nutzen wir genau das Automodell wie es im ersten Post eingeführt und verwendet wurde. Für anspruchsvollere Simulationen kann man z.B ein Auto mit Anhänger nehmen. Hier ist das Fahrverhalten nochmal komplett anders, RRT findet aber meist auch schöne Lösungen.

Das Interface der simplen Parksimulation hat ein paar Einstellmöglichkeiten spendiert bekommen. So können auch User die nicht im Sourcecode Werte manipulieren wollen mit der Simulation rumspielen. Ich freue mich übrigens auf Screenshots von euren schönsten Einparkmanövern in den Kommentaren 😉

rrt_new_interface

Bevor ihr allerdings mit Simulieren loslegen könnt, braucht ihr noch ein paar Informationen zur Simulationsumgebung: Die Umgebung ist 200 x 100 Pixel groß, das Auto startet bei (100,20) und will nach (102, 78). Dabei kann es Lenkwinkel von -50° bis +50° annehmen und dabei eine Stecke von -20 bis 20px pro „Schritt“ zurücklegen. Der Lenkwinkel und die Geschwindigkeit kann jeweils mit einem Multiplikator versehen werden, die voreingestellten Werte liefern ganz gute Resultate.

Spannend wird es, wenn man das Verhalten des Autos einschränkt: Wie parkt es, wenn es plötzlich nur noch nach Rechts lenken darf? Oder der Rückwärsgang kaputt ist und nur vorwährtsfahrend einparken muss? Ein paar dieser Fälle sind weiter unten mit Gif und Erklärung zu sehen . Continue Reading

0

EarthCore – Injecting, Sicherheit und Spieldaten

Earthcore: Shattered Elements ist ein Online Kartenspiel für Android und iOS, programmiert mit dem Unity Framework. Von den vier Handkarten spielt man drei auf das Spielfeld aus, wobei jede Karte eines von 3 Elementen hat: Feuer, Wasser oder Erde. Am Ende der Runde wird das eigene Kartenelement mit dem Element der gegnerischen, gegenüberliegenden Karte verglichen. Nun schlägt Wasser Feuer, Feuer Erde und Erde Wasser. Der Verlierer auf dem jeweiligen Feld bekommt Lebenspunkte abgezogen, die sich aus dem ausgespielten Kartenwert berechnen. Sollten sich gleiche Elemente gegenüberliegen, wird der Angriffswert jeweils für die nächste Runde gespeichert. Im Grunde also ein „Schere-Stein-Papier“ auf drei Feldern gleichzeitig. Spannend wird das Spiel, wenn man die Skills der Karten dazunimmt. Man kann Karten auf Feldern tauschen, die Elemente von Karten ändern oder auch Direktschaden am Gegener verursachen. Mehr möchte ich an dieser Stelle garnicht über das Spiel erzählen, hier geht es um die Internals, das Injecten und natürlich das Daten auslesen.

earthcoreNicht ohne Grund habe ich direkt im ersten Satz erwähnt, dass das Spiel mit Unity entwickelt wurde. Für den Programmierer ist das praktisch, da er Plattformunabhängig und sogar mit .NET Programmieren kann. Für uns hat das den Vorteil, dass wir den kompletten Sourcecode unobfuscated vor uns liegen haben! Dabei befinden sich alle interessanten Klassen in der Assembly-CSharp.dll, die wiederrum in den Ressourcen der APK liegt. Zwar hat man alle Daten unverschlüsselt vor sich liegen, nur ohne die Möglichkeit des Auslesens oder Veränderns bringen uns die schönsten Klassenstrukturen nichts. Wir müssen also eigenen Code in die Android Applikation bekommen. Während schon bei dem Hearthstone-Artikel das CLRHosting mit Mono fehlschlägt, haben hier hier nichtmal die Möglichkeit den Mono Kontext zu kapern. Nach einigem hin und herüberlegen fiel mir eine passable Lösung ein: Benötigt ist ein Loader, der wiederrum weitere DLLs zur Laufzeit nachladen kann. Dieser Loader wird mit in die APK gepackt und muss nun irgendwo im Spiel aufgerufen werden um den eigenen Thread zu starten. Was ist da passender, als die Init-Funktion des Hauptmenüs? In Unity erbt jede Klasse die Renderlogik enthält von „MonoBehaviour“. Davon wird die Start()-Methode aufgerufen sobald die Klasse initialisiert wird, und genau hier packen wir einen call auf unsere statische Loader-Klasse rein. Die will ich nun etwas genauer Besprechen:

Continue Reading

0

Quizduell – Es geht noch immer?!

quizduellZweieinhalb Jahre ist es her, dass auf diesem Blog ein Beitrag über Quizduell verfasst wurde. Damals, wie auch heute, ging es um das farbliche hervorheben der richtigen Antwort bevor man auf eine Antwort drückte. Der Beitrag ist auch der mit den meisten Kommentaren auf dem Blog! Es wurde über die SSL Zertifikate, das Signieren der App und sogar über fertige Bot-Implementationen und APIs diskutiert.  Mehr über Zufall fand die aktuelle Quizduell-App wieder ihren Weg auf mein Handy. Während dem Spielen packte mich wieder die Lust, der App unter die Haube zu schauen. Nach ein paar Probleme beim Unpacken mit dem apktool stand ich wieder vor vielen Klassen. Das erste was auffiel: die Obfuscation war geändert worden, es waren garkeine Klassennamen mehr auszumachen. Und auch der Fragen-Klasse fehlte die Methode zum setzen der richtigen Antwort-Attribute, die wiederrum direkt in der UI angezeigt werden. Stattdessen gab es zwei Funktionen „setWrong()“ und „setCorrect()“, die im Prinzip das gleiche machten. Nur wie und wo aufrufen? Die Lösung: Über einen Smali-Patch wird nach erstellen der Darstellung per Iterator alle Fragen durchlaufen und die intere Flag vergleichen. Je nachdem wie der Wert dieses Enums war, wurden dann die setWrong/setCorrect Methoden aufgerufen, die praktischerweise direkt die Farbe in der UI ändert. Zwar ein bisschen anderer Ansatz, aber dennoch das selbe Prinzip. Und auch nur 10 Zeilen zusammenkopierter Code.

Weitere technische Infos gibt es in diesem Beitrag auch garnicht. Er er ist mehr Nachruf an den alten Beitrag gemeint. Und vielleicht als Erinnerung an FEO Media dass man die richtige Antwort der Frage besser auf einem Server hinterlegen sollte 😉

0

Seiten:1234567...13