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!

proxy_1Ein 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.

Weiterlesen

Be the first to like.

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

Weiterlesen

Be the first to like.

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

Be the first to like.

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 . Weiterlesen

Be the first to like.

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:

Weiterlesen

Be the first to like.

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 ;)

Be the first to like.

Age of Empires 2 – External Entity Hack

Ich glaube annährend jeder Besucher dieses Blogs hat früher, oder sogar in letzter Zeit als HD Remake, Age of Empires 2 gespielt. Dieses Kultspiel wird hier exemplarisch herrangezogen, um die Schritte beim Programmieren eines Hacks nachvollziehbarer zu machen. Genaue Offsets und Klassen gibt es nicht, wohl aber die Möglichkeit die Schritte nachzumachen. Damit stösst man unweigerlich auch auf die Offsets und lernt den Umgang mit IDA Pro und dem Debugger. Es ist definitiv nicht meine Intention, die Grundlage für einen Hack zu schaffen. Vielmehr hab ich gemerkt, wie schön man das Finden der Entites als Beispiel nutzen und abstrahieren kann.

Am Ende des Blogposts werden wir die Positionen aller Entites und aller Spieler auf eine Grafik plotten können. Natürlich wären weitere Features möglich, aber es geht nur um den Weg bis zu diesem Punkt ;)

Fangen wir mit etwas allgemeinen Informationen an. AoE2 ist wie eigentlich jedes ältere Spiel in C++ geschrieben. Konkret heißt das für uns, dass wir eine Entity-Basisklasse haben, von denen alle Einheiten und Gebäude erben. Im Speicher befindet sich also immer die Basisklasse, gefolgt von den speziellen Attributen je nach Klassentyp. Damit wissen wir auch, dass der erste Eintrag in diesen Entity-Klassen die VTable ist. Das Konzept dahinter wurde schon bei Siedler3 und Interfaces erklärt: Um bei einem Aufruf von “Building->Update()” und “Unit->Update()” bei unterschiedlichen Funktionen zu landen, wird der Update()-Funktionszeiger überschrieben, der sich an einer fixen Stelle innerhalb der VTable befindet. Das hat den Vorteil, das wenn wir ein riesiges Array von Entites haben, einfach alle durchlaufen und die Update()-Funktion aufrufen können. Die VTable sorgt dann schon dafür, dass die richtige spezielle Methode aufgerufen wird und wir müssen uns nicht darum kümmern.

Soviel zur gleich gebrauchten Theorie, los gehts in der Praxis mit Memory Scanning. Wie brauchen nämlich eine Variable, die sicher in der Entity-Klasse steht. Optional sollte sie noch leicht zu verändern und eindeutig sein. Was gibt es da passenderes wie das Leben der Entity? Starten wir Cheat Engine und stellen den Typ auf Float. Wir markieren eine Einheit, lesen das Leben ab und verändern es, indemaok1 wir die Einheit einen Gegner angreifen lassen. Zum Glück können wir über F3 das Spiel pausieren, so ist entspanntes Suchen nach der richtigen Variable möglich ohne in die Trickkiste greifen zu müssen. Übrig bleiben sollten zwei Variablen die jeweils das aktuelle Leben anzeigen. Mit der Adresse der Variable selbst fangen wir nichts an, denn spätenstens beim nächsten Spielstart sieht diese ganz anders ist. Spannender ist aber die Funktion von Cheat Engine, über den Debugger herraus zu finden welche Instruktionen auf die Variable zugreifen. Das ist natürlich auch im normalen Debugger über einen Memory-Breakpoint möglich, allerdings bekommen wir bei den doch vielen Zugriffen eine schöne Liste von CheatEngine.

Weiterlesen

Be the first to like.

Anonymität – Traceless VPN, PGP und Grundregeln

Das Thema Anonymität im Netz wird immer aktueller. Inzwischen weiß man nicht mehr, welcher Internetverkehr aufgezeichnet wird oder wer hinter dem praktischen Hotspot “Free WiFi” im Lieblingscafe sitzt. In diesem Post möchte ich daher auf mein Setup eingehen, mit dem ich mich im Netz sicher bewegen kann. Natürlich gibt es immer noch mehr Maßnahmen die man ergreifen kann, aber die wichtigsten Gebiete werden abgedeckt.

Ich gehe hierbei von zwei Szenarien aus, gegen die wir uns absichern wollen: Der Datenverkehr des WLANs wird aufgezeichnet und manipuliert und eine im Internet aufgerufene Website sollte nicht wissen woher und von wem die Anfrage kommt. Im ersten Szenario hilft ein VPN und Verschlüsselung von Daten und Emails, im zweiten Fall tut es ebenfalls ein VPN in Kombination mit dem Wissen über Tracking-Cookies und DNS Leaks. Aber alles ganz langsam, die komischen Begriffe werden alle im weiteren Verlauf erklärt.

Fangen wir mit dem VPN an, da es meiner Ansicht nach den größten Teil der Anonymität ausmacht. VPN steht für “Virtual Private Network” und wird Hauptsächlich dazu verwendet, über das Internet sicher in ein interes Firmen oder Uni-Netzwerk zuzugreifen. Quasi eine gesicherte Tür über das Internet in ein lokales Netzwerk. Dabei gibt es verschiedene VPN Protokolle, auf die ich garnicht weiter eingehen möchte. WicTL_Networkhtig ist nur, dass alle (PPTP mal rausgelassen) eine sichere Verschlüsselung für die Kommunikation über den VPN bieten. Und genau das kann man auch ausnutzen, indem man den VPN nicht in ein internes Netzwerk leitet, sondern vielmehr alle Daten über diesen VPN in das Internet schickt. Verschlüsselung und Verschleierung der IP Adresse sind dadurch möglich. Ich wähle als Beispiel den Traceless VPN Anbieter. Warum ich für diesen unbekannten VPN Provider Werbung mache? Ich hab die beiden Betreiber auf einer Konfernz selbst kennen lernen dürfen und konnte mir so persönlich ein Bild von ihrem Service machen. Die Philosophie dahinter, die Freiheit im Internet zurück zu erlangen, gefällt mir und der Umfang des Angebots kann sich wirklich mit andren etablierten VPN Providern messen. Durch die Vielfalt der 7 angebotenen VPN Protokolle kann man den VPN auf so ziemlich jedem internetfähigen Gerät nutzen, sogar Windows selbst bringt von Haus aus eine solche Möglichkeit mit. Zum Einrichten empfehle ich euch, die OpenVPN Konfigurationsdateien zu verwenden, da hier bereits alle nötigen Zertifikate und Signaturen drin sind. Weiterlesen

Be the first to like.

RRT – Eine Simulationsumgebung

Warum nicht auch Themen in einem Blogpost verarbeiten, die in der Uni Beachtung fanden und das Interesse auf eine eigene Implementierung wecken? In diesem ersten von zwei Teilen geht es darum, eine Simulationsumgebung für ein Auto zu schaffen, das später diverse Wege und Einparkroutinen findet. Das ganze Funktioniert über Rapidly-Exploring Random Trees, indem man einfach losfährt und dadurch einen Suchbaum aufspannt. Keine Wegfindung, keine Heuristik oder Gradientenfelder, aber vieeele Knoten und Versuche.

Langweilig denkt Ihr? Wenn ihr kein Interesse an dem eigenlichen Thema habt, so lernt ihr doch einiges über C# und objektorientierte Programmierung, welche uns das Leben wieder mal einfacher macht. Den aktuellen Sourcecode findet ihr unten im Anhang, da doch einige “unnötige” Sachen wie Properties und Hilfsklassen nicht gepostet werden. Hier schonmal eine kleine Vorschau, was die Simulation am Ende vom Post mit wenigen Codezeilen kann:

rotation_colilision

Los ans Coden, beginnen wir mit der abstrakten Enviroment-Klasse. Von einer abstrakten Klasse kann keine Instanz (= kein Objekt) erstellt werden, und das ist auch gut so. Denn die Environment-Klasse dient nur als grobes Schema für alle weiteren Szenarien, daher halten wir sie sehr allgemein. Zunächst reicht es zu überlegen, was eine Simulationsumgebung braucht: Eine Höhe und Breite (ohne Einheit, aber rechnen wir in Metern) , natürlich ein sich bewegendes Objekt (Auto, Lastwagen mit Anhänger, Flugzeug) und eine Liste von Hindernissen, die es zu vermeiden gilt. In Code ausgedrückt sieht es sehr ähnlich aus:

Weiterlesen

Be the first to like.

Malware Analysis – SteamStealer, SharpBot RAT und Chrome Stealer

Malware in the Wild! Eines Abends wurde auf einem Twitch Channel ein Link im Chat gepostet. “https://bitly.com/Screenshot093 :D :P “. (ACHTUNG MALWARE!) . Dahinter steckt ein Dropbox-Direktdownload und mit einer Screenshot093.scr Datei. Eine SCR Datei, schon lange nicht mehr gesehn :) Eigentlich sind das sog. “Screensaver”-Installer, die allerdings einen normalen PE Header haben und damit einfach als exe umbenannt werden können.

Dahinter steckt ein .NET File, obfuscated mit der neusten .NET Reactor Version. Damit kann de4dot leider noch nicht umgehen, die AES verschlüsselten Ressourcendateien haben eine ungültige Größe. Doch ich vermutete dass die Malware nur ein Loader für weitere Schadsoftware war. Wir nutzen also den ultimativen Ansatz gegen gepackte .NET Files: Dumping. Jeder .NET Assembly wird, wenn nicht speziell dagegen vorgegangen wird, von der .NET Runtime im Speicher gehalten und kann von dort aus wieder extrahiert werden. Wenn der Packer nun die Assembly entschlüsselt und reinläd, können wir uns also einfach das entschlüsselte Image auf die Festplatte schreiben. Der Dump enthält neben der eigentlichen obfuscateten Assembly eine zusätzliche, gedroppte Assembly mit dem eindeutigen Namen “SteamStealer 5.0″. Diese Assembly enthält alles was wir gesucht haben: Ein Steam-Stealer und zwei Loader. Unobfuscated! o/

Dumping

SteamStealer:
Dieses offensichtlich selbstgeschriebene Tool kopiert die beiden “ssfn*” Files sowie die loginusers.vdf, config.vdf und SteamAppData.vdf in ein Zip-Archiv. Diese sind nötig um den SteamGuard zu umgehen und Items verkaufen zu können. Dieses Archiv wird an folgende URL hochgeladen: http://prtscnhost.com/gate_new.php . Wenn das File keinen PK-Header hat, so werden wir mit der Meldung “Не могу открыть архив” belohnt. Auf Deutsch heißt das “Kann das Archiv nicht öffnen”, daher können wir annehmen dass das Archiv direkt verarbeitet, ausgelesen und in eine Datenbank eingetragen wird.

Weiterlesen

Be the first to like.