Archive for Feb. 2014

Siedler 3 - Lobby Preview

Die letzen Tage habe ich wieder viel mit Siedler 3 verbracht. Allerdings nicht mit Spielen, sondern mit Reversing und Coding.

Durch einige Tricks habe ich es geschafft, einzelne UI Elemente zu “kontrollieren” und Aktionen mit ihnen durchzuführen, die eigentlich nur nach einem Mausklick auf das jeweilige Element erfolgen. Denn die “neue” Lobby wird über das LAN-Menu laufen, nur dass der Bildschrim komplett ersetzt wird. Um aber ein Spiel aus dem LAN-Modus zu starten, sind folgende Schritte notwendig:

  • Spieler klickt auf den Adapter in der ersten Listview (DirectPlay Adapter)
  • Spieler klickt in die Textbox und gibt die IP des Hosts ein
  • Spieler klickt auf “Suche Spiele” -> Spiele werden angezeigt
  • Spieler wählt ein Spiel aus der Lisview aus
  • Spieler klingt auf “Mitspielen”.

Diese 5 Schritte kann ich nun per Programmcode aufrufen, auch wenn es noch nicht immer klappt (Bei einem Fehlerdialog hängt sich das Programm auf, da dieser eigentlich nicht vom UIThread aufgerufen wird etc).

Das bedeutet, dass einer neuen Lobby nun nichts mehr im Wege steht. Oder doch? Die eigentliche UI für die Lobby muss ja noch geschrieben werden. Und dabei kann (wegen des alten GDI standarts, leider nicht mal GDI+) auch keine UI Library verwendet werden. Selber schreiben heißt die Devise! In den letzten Tagen habe ich daher einige Basis UI Klassen angefertigt (TextLabel, Button, ListView) um daraus eine Lobby zu konstruieren. Das Resultat:

Weiterlesen

9 people like this post.

Flappy Bird - Innereien und Kollisionserkennung

Ohai zusammen,

es geht zur Abwechselung mal wieder um Android RE! Die letzen Stunden habe ich damit verbracht mich durch diverse IDEs zu schlagen, ein Ubuntu System aufzusetzen, nur um dann schlussendlich doch alles von Hand zu machen. Aber auf diesem Wege lernt man so einiges, dass ich gerne mit euch Teilen möchte. ;)

Flappy2

Fangen wir mit dem Debugging von Android Applikationen/Spielen an: Wie aus den letzen Posts über Android bekannt ist, kann man per APKTool die App auseinander nehmen und sie im Anschluss wieder zusammensetzen. Ein Schalter, welcher dabei viel zu wenig Aufmerksamkeit bekommt ist der -d Switch. Dieser sorgt dafür, dass Debug Daten in die Smali-Dateien extrahiert und beim Builden (wieder mit dem -d Switch) so verlinkt werden, dass wir durch den Code steppen können (Im App Manifest debuggable=”true” setzen nicht vergessen!). Nun müssen wir “nur” noch ADB aktivieren, verbinden und DDMS (Dalvik Debug Montior) aufruften. Nun können wir mit einer IDE unserer Wahl den Debugger attachen und uns an Stacktraces, lokalen Variablen und Breakpoints erfreuen.

Flappy Bird, der neuste Hype auf Android und iOS Systemen, bringt einen nicht nur beim Reversen zur zur Verzweiflung. Durch Flügelschläge muss man in 8-Bit-Grafik einen Vogel durch einen Kurs fliegen und dabei jegliche Kollision vermeiden. Der Frustationsgrad, allerdings auch der Suchtfaktor, sind bei diesem Spiel enorm. Frustierend ist auch, dass APKTool Fehler beim Decoden mit Debugswitch auswirft, und wir somit auch wirkliches Debugging verzichten müssen. Und noch frustierender ist, dass mal wieder alle Typenbezeichner durch einzelne Buchstaben aus dem Alphabet ersetzt wurden. Aber einen “Vorteil” hat FlappyBird: Es setzt nicht auf nativen Grafik-Code, wie es andere Spiele tun (Code in Shared Libary = ELF Format auslagern). Das bedeutet: alles zeichnen und updaten geschieht von Java Code aus. Ausgelagerter Code wäre noch schwerer zu analysieren gewesen.

Weiterlesen

8 people like this post.