Ex.FM Downloader – Release

Zur Preview gibts hiermit nun die Release. Vor dem Download und einer Auflistung der Features möchte ich wie versprochen noch ein paar Worte zu WPF in diesem Projekt verlieren.

Das Projekt trennt strikt zwischen Programmlogik und UI. Alle Interaktionen von oder nach der UI werden über sog. Bindings realisiert. Diese werden (im Optimalfall) aktualisiert, sobald sich die gebundene Property ändert. Damit wird die Änderung auch in der UI sofort angezeigt. In meinem Fall erstellte ich ein sog. DataGrid, dass an eine DataTable bindet. Wird diese DataTable aktualisert, spiegeln sich die Änderungen sofort in der UI wieder. Mit diesem Prinzip kann man nette Sachen machen, und das trennen von Logik und UI macht letzteres leicht austauschbar.

Hier nochmal alle (neuen) Features des Downloaders:

  • Suchfunktion, welche Duplikate entfernt
  • Automatisches ID3 Taggen der Dateien mit den Daten aus Ex.fm
  • Multithread Download
  • Auswahl der Ordnerstruktur / Formatierung
  • Playlisten Download
  • Direkter Download über URL

Im ersten Post war ich auf der Suche nach dem Billy Talent II Album. So sieht eine Suche nach diesem Album in der Suchfunktion aus:

Known Bugs:

  • Programm hat kein Icon (Hab leider kein Grafikprogramm drauf)
  • Manche Songs laden nicht runter (0 Byte wird geschrieben). Dies ist wenn der Song auch auf Ex.fm nicht abspielbar ist (Link Tot etc)
  • Total Running Threads bezieht sich nur auf die Grabber Threads beim Downloaden, für den asynchronen Download wäre das etwas kompliziert gewesen.

Download:

Release:

ExFm Downloader Release (42)

Source:

ExFM Downloader Source (45)

Greez

 

7 people like this post.

MW2 Take Damage Hook - Source Download

Da der Code zum MW2 Take Damage Hook wohl großen Anklang gefunden hat, aber noch einige Fragen offen ließ, ist hier der Sourcecode mit kompilierter DLL zum Download.

Der Source ist echt minimalistisch gehalten, dennoch sollten ein paar Sachen erklärt werden. Das #define in Zeile 2 (MY_PLAYER_ENTITY) definiert einfach die Startadresse des Entity-Arrays. Der Array-Eintrag 0 ist immer der Spieler, daher wird beim Take-Damage Hook geprüft, ob das “Target” dieser Spieleradresse entspricht. In dem EntryPoint der DLL wird geprüft, ob Attached (injected) oder Detached wird. Je nachdem wird der Detour gesetzt oder wieder entfernt.

Der Hook selbst fügt einfach nur den Godmode ein, für alle anderen Spielereien könnt ihr den Source ja selbst kompilen. Zum injecten einfach einen DLL Injector verwenden, meine Wahl ist zur Zeit Winject. Was gibt es sonst noch zu sagen? Die Detour-Lib (detours.h und detours.lib) wird eingebunden bzw mitgelinkt. Kann also so auch in anderen Projekten verwendet werden.

In diesem Sinne: Happy Hacking/Reversing!

Download: MW2 Take Damage Hook - Source (56)

Greez Easy

Be the first to like.

Ex.FM Downloader - Preview

Ex.fm ist eine Site, die Musik von diversen Streamingdiensten wie Soundcloud und Tumblerblogs sammelt, kategorisiert und in einem Musikplayer abspielen lässt. Klingt nach einem netten Projekt für ein Downloader, oder? Ähnliche Projekte gab es bereits für Grooveshark (Groovedown Downloader) und erst neulich hat mein Blogpartner TheVamp einen ähnlichen Downloader für die Seite BandCamp geschrieben.

Ex.fm bietet freundlicherweise eine API an, die Songdaten in JSon bereitstellt. Alles was es also zu tun gibt ist das JSon zu Parsen und eine nette GUI mit Multithreaddownload zusammenstellen. Also das perfekte Übungsprojekt für WPF! Bisher war ich ja von WPF nicht so begeistert, aber inzwischen bin ich Feuer und Flamme für dieses flexible und dennoch so einfache Presentation Framework. Was man tolles mit WPF anstellen kann, wird an dieser Stelle auf den bald folgenden Blogpost verschoben, denn das würde den Rahmen dieser “Preview” sprengen.

Zum Downloader selbst: Ex.fm bietet sog. Playlists an, die nach Kategorien geordnet sind. Neben den Standartkategorien wie Overall (= Charts), Rock und Hip-Hop gibt es auch für Hörer von klassischer Musik, Dubstep und Indie was auf die Ohren. Die Lieder einer Playlist kann man sich komplett oder in einzelnen Songs herunterladen.

Die Suchfunktion von Ex.fm ist ebenfalls nett. Hier kann man nach Interpret, Titel oder Album suchen. Auf der Suche nach dem Billy Talent II Album bin ich hier auf alle gesuchten Songs gestossen. Eine Suchfunktion ist auch im Downloader integriert, im Optimalfall werden doppelte Suchresultate mit ähnlichen Daten raussortiert.

Natürlich kann man auch Songs direkt runterladen. Hier reicht es, ein Ex.fm Link einzufügen und der Download beginnt.

Weiterlesen

7 people like this post.

MW2 Bot Singleplayer - TakeDamage Hook

Scrollt man in IDA Pro durch die Strings von Modern Warefare 2, so findet man einige nette (und manchmal auch verwirrende) Sachen. So fiel folgender String ins Auge:

.rdata:006CD724 00000021 C ERROR: kill failed for entity %d

Daraus folgt, dass der Befehl zum Töten einer Einheit ein paar Befehle vorher folgte. Und genau da begegnen wir der Funktion, die ich sinniger Weise “TakeDamage” getauft habe. Der Aufbau setzt sich wie folgt zusammen:

char __cdecl TakeDamage(Entity* target, Entity* shooter1, Entity* shooter2, void* unknown1, void* unknown2, int Damage, int nullData, int Flag1, int Flag2, int Flag3, int Flag3)

Nunja, die ersten Versuche mit der Funktion irgendetwas zu erreichen waren ernüchternd. Scheinbar kann die Funktion nicht aus dem EndScene-Hook gecalled werden (falscher Thread?) und auch die Parameter scheinen ziemlich willkürlich zu sein. Die Funktion selbst ist riesig und daher ungeeignet zum Analysieren. Aber hey, wieso nicht mal Hooken? So bekommt man schön alle Parameter ohne diese sich aus dem Stack zu kramen und kann auch gescheites Logging betreiben. Gesagt getan, der Funktionsprototyp wurde geschrieben und gleich eine kleine Umleitung (Detour) eingebaut:

oTakeDamage = (char (__cdecl*)(int, int, int , int , int , int , int , int , int , int , __int64))DetourFunction((PBYTE)0x00492260,(PBYTE)hTakeDamage);

Der Detour funktionierte auf Anhieb! Doch was fängt man mit einem solchen Detour nun an? Das leichteste und naheliegenste ist natürlich folgender Code:

if (target == (int)EntityManager::GetPlayer()->entityOld)
	{
		return oTakeDamage(target, Normally_two, use_NULL, USE_NULL3, Use_NULL2, 0, a7, USE_ELEVEN, USE_NULL, NOT_19, a11);
	}
	return oTakeDamage(target, Normally_two, use_NULL, USE_NULL3, Use_NULL2, 13337, a7, USE_ELEVEN, USE_NULL, NOT_19, a11);

Hier wurde einfach geprüft ob die “TargetEntity” der eigene Spieler ist. Wenn ja, so wurde die Funktion mit allen originalen Argumenten aufgerufen, bis auf den Schaden. Dieser wird auf 0 gesetzt wenn ich getroffen werde, 13337 bekommen aber Gegner wenn sie Schaden von mir erhalten. So waren alle Schüsse ab jetzt “OneShotKills” und der Spieler befand sich im Godmode. Der Schaden dieser Funktion bestimmt wohl auch welche Sterbeanimation die Gegner abspielen. Bei diesem hohen Schaden denkt die Engine wohl, die Schüsse seien von einem Sniper abgegeben worden und die Gegner fliegen dementsprechend weg. Das betrifft übrigens nicht nur Gegner, sondern auch explodierende Autos und sogar Helikopter ;)

Lustig ist auch den Schaden einfach umzubiegen. Wir prüfen wieder ob der Spieler den Schaden erhält und setzen als neues Target den Schadensurheber. Sobald Gegner auf mich schießen fallen sie angeschossen zu Boden. Wenn Gegner auf den Spieler zustürmen um eine Nahkampfattack auszuführen und dann zu Boden fallen sieht das in der Tat lustig aus :D Und die so verhassten Hunde sterben selbst, nachdem sie dem Spieler eigentlich die Kehle durchgebissen haben. Was für ein Genuss!

Mit dieser Funktion ist es auch ein leichtes einfach alle Gegner auf einmal zu töten. Da hört der (Spiel)Spass aber spätestens auf.

Greez Easy

7 people like this post.

MW2 Bot Singleplayer - Waypoint ESP

Wie bereits angekündigt habe ich mich (wiedermal) an Call of Duty - Modern Warfare 2 gesetzt. Dabei ging es nicht darum, das Spiel kaputt zu hacken, sondern meine Kenntnisse im Bereich C++ und selbstständiges Reversen zu verbessern. Der frühere Bot war meist auf Basis von C&P Snippets diverser Foren entstanden und solange sich der Offset nicht geändert hatte oder der Bot abgestürzt ist, musste man auch kein Debugging/Reversing betreiben.

Doch kommen wir zu dem spaßigen Teil: Waypoint ESP! Es gibt bei MW2 eine Spec Ops Mission, bei der man mit dem Snowmobil durch Tore fahren muss, um Zeit zu gewinnen. Schafft man es die Zeit bis zum Ende des “Rennens” immer im positiven Bereich zu halten, so ist die Mission gewonnen. Auf Stufe “Veteran” gibt das Durchfahren eines Tors nur 3 Sekunden zusätzliche Zeit und damit war die Frustgrenze ziemlich schnell erreicht. Doch bevor wir zu dem eigentlichen Waypoint ESP kommen, sollte ich etwas über “Entites” erzählen.

Jedes Objekt in MW2 ist eine sog. Entity. Diese hat eine ID, einen Namen und sogar meist eine Position. Anhand eines Screenshots sieht man diese Daten ganz gut:

Weiterlesen

1 person likes this post.

Der Blog ist nicht tot!

Hallo zusammen,

lang ist es her seid hier der letzte Blogpost geschrieben wurde. Doch das ändert sich jetzt, denn inzwischen durfte ich viele neue Erfahrungen sammeln und habe auch die ein oder andere Sache entdeckt, über die es sich zu bloggen lohnt. So bin ich inzwischen mit der Schule fertig und bereits in die Uni eingeschrieben. Das sollte aber (hoffentlich) kein Grund kein, den Blog weiterhin schleifen zu lassen!

Freut euch also auf neue Artikel bezüglich Gamehacking (MW2 wurde mal wieder unter die Lupe genommen), Programmieren und natürlich RE-Stuff!

In diesem Sinne bis bald!

Easysurfer

 

3 people like this post.

Android RE - Pool Master Pro

In diesem Post wird es um ein die Basics von Android Reverse Engineering gehen. Das Ziel ist eine Billiard-App namens “Pool Master Pro”. Dazu zunächst einmal ein Vorher/Nachher Bild:

Billiard1

Billiard2

Das Ziel ist es also, die relativ kurze “Aim Linie” zu verlängern, dass wir präzise über den ganzen Tisch zielen können.

Android basiert einer Java VM, und dies ist mehr oder wenig gut zu decompilieren. Dabei entpacken wir erst ein mal die APK (im Zip umbenennen) und sehen u.a. eine “.dex” Datei. Dort ist der komprimierte Source drin. Mit Hilfe des Tools Dex2Jar erzeugen wir uns eine einigermaßen lesbare .jar-Datei.

Allerdings gibt es auch ein weiteres Tool für Android De-und Recompiling names apktool. Dieses nette Tool entpackt alle Ressourcen, Decodiert das XML-Manifest und wandelt auch die .dex-Datei in eine Art Java-VM-Assembler (smali) um (wie bei .NET MSIL). Dieses werden wir nachher patchen. Aber zunächst zu der “Java-Analyse” dank JD-gui.

Die “Aim Line” ist im Optionsmenu an oder ausstellbar. Daher hat dort meine Analyse begonnen. Wir durchsuchen also den ganzen smali-Code nach dem String “Aim” und werden in der Main.smali fündig:

Weiterlesen

2 people like this post.

Reversing ist kein Ponyhof - Intercafe 2013 (die letze)

Hallo meine treuen Blogleser ;-)

Auf bitten einer Person hab ich mir Intercafe 2011 bzw 2013 nochmal angeschaut. Über Intercafe habe mir bereits vor 2 Jahren den Kopf zerbrochen, die damals entstanden Artikel sind in der Serie unten verlinkt. Mit mehr Lebensweisheit und vorallem Erfahrung habe ich also einen weiteren Versuch gestartet, das tückische System zu überlisten.

Wie immer geht es zunächst um die Registrierung des Programms. Dabei ist der Mechanismus bei 2013 genau der selbe wie der bei 2011. Wie in den vorherigen Posts nach zu lesen ist, wird ein Name, ein Softwarecode und ein Softwarekey verlangt. Diese Daten werden nach durchlaufen eines Offline-Checks über eine verschlüsselte Verbindung zum Server übertragen. Wenn diese Daten passen, so ist man registriert. Wenn nicht, so sendet der Server die Anzahl der Tage, die die Testversion schon abgelaufen ist. Da ich auf dem selben PC vor 2 Jahren gearbeitet hab, ist auch das Testdatum das vor 2 Jahren. Somit ist meine Software bereits seid 684 Tagen abgelaufen.

Im letzten Post habe ich von einem Base64-String erzählt, der wohl die Lizenzdaten bereitstellt. Mit dieser Erkenntnis bewaffnet, schaute ich mir diese Lizenzklasse weiter an. Da diese inzwischen in eine ziemlich lesbare, exterene Lib ausgelagert wurde, konnte man sie auch dementsprechend gut analysieren. Aber zunächst etwas Code, der die Server-Response auf eine Login/Registrationsmessage darstellt.

public static void A(string DKSStateString, string st, string string_0, string DKSStateString, string st, string st, string st, string st, string DKSStateString, string st)
{
	try
	{
		e9.C = Convert.ToBoolean(st);
	}
	catch
	{
		e9.C = false;
	}
	e9.E = CLConvertFunctions.ConvertObjectToBool(st);
	e9.A = (E.A(DKSStateString) as CLRegistrationEntry);
	if (string.IsNullOrEmpty(e9.A.RegistrationCode))
	{
		e9.f = "DEMOVERSION";
	}
	e9.G = string_0;

Ziemlich unleserlicher Salat, nicht? Diese Funktion schaltet das Programm frei, oder auch nicht. Denn in dem ersten Parameter wird eine Base64-Serilisierte Klasse übergeben, die im Anschluss als “CLRegistrationEntry” (9te Zeile) gelesen/deserialisiert wird. Wenn nun der Registrations-Code in dieser Struktur “NullOrEmpty” ist, so handelt es sich um eine Demoversion. Weiterlesen

10 people like this post.

Unpacken ist out, Memory patchen ist in!

Heutzutage ist der einzig weiterhin effektive Obfuscator Confuser. Er bietet die Verschlüsselung von Methoden an, das schon öfter angesprochene Proxy-System und vieles weitere, kurzerhand alles um einem Cracker das Leben zur Hölle zu machen. Nennt man die Methoden um, funktioniert das Proxy-System nichtmehr. Schreibt man die Assembly neu, so sind die Ressourcen unbrauchbar. Confuser zu entpacken heißt alles oder nichts, denn alles ist miteinander verknüft. Wenn man nicht alles entschlüsselt, bekommt man kein lauffähiges Programm.

Doch es gibt eine Lösung: Debugger! Bereits vor einigen Monaten habe ich ein String-Decrypter System vorgestellt, dass auf Basis des mDbg Debuggers dynamisch Strings entschlüsselt. Die Vorteile von Debuggern liegen klar auf der Hand: Wenn man einmal die Anti-Debug-Funktionen entfernt hat, kann man das Programm analysieren und auch zur Laufzeit verändern. Kein neues erstellen der Exe ist von Nöten, die Methoden und Strings sind entschlüsselt im Speicher und da das Programm immernoch vom .NET Framework gelesen werden muss, macht uns die Metadata-Zerstörung auch nichts aus.

Mich haben in letzter Zeit gefühlte tausend Emails und Nachrichten erreicht, mit der Frage ob man den FUT Autobuyer cracken kann. Meine Antwort bestand stehts aus Links zu Threads die erklären, wie man Confuser zumindest halbwegs entpackt. Alles andere ist dann kein großes Problem mehr, so war es zumindest in der Vorgängerversionen.

Weiterlesen

12 people like this post.

TubeDigger - Anti-Debug & TrialPeriod

Es gilt mal wieder etwas neues, natives zu Revesen! TubeDigger ist ein ultimatives Programm zum Downloaden von Streams (z.B. von Youtube und Co). Es ist nicht gepackt, daher kann man es schön Analysieren und vielleicht auch irgendwann Patchen.

In diesem Post geht es nicht darum, ein Programm zu cracken, sondern vielmehr aufzuzeigen, wie schön native Analysen sein können. Wenn sich plötzlich mehrere Fäden zu einem Strang verknüpfen, ist das echtes reverse Engineering! Vielleicht wird es einen zweiten Blogeintrag zu diesem Programm geben, denn dieser erste Post beschränkt sich nur auf Anti-Debug Methoden und auf die Verlängerung der Trial-Periode.

Sobald wir das Programm im Debugger laden bekommen wir es direkt mit einer schönen Fehlermeldung zu tun:

TubeDigger1

Einen schönen Humor haben die Programmierer schonmal. Dieser Blog ist zwar nicht Youtube, aber ich denke das zählt auch :D

Wenn wir uns zu diesem Zeitpunkt den Stack anschauen, so findet sich irgendwo ein Call zu NtQueryInformationProcess“:

0020BC38  |0049EA21  RETURN to TubeDigg.0049EA21 from TubeDigg.0049E920
0020BC3C  |76E60000  ntdll.76E60000
0020BC40  |76EA5130  ntdll.ZwQueryInformationProcess
 Weiterlesen

10 people like this post.