System.Reflection.Emit und ein altbewährtes Produkt

Hallo allerseits !

Bevor ich zu meinem ersten Beitrag hier komme, stelle ich mich mal kurz vor.
Mein Nickname aus der Szene ist WD40, ich war/bin Administrator von secunet.cc, welches aktuell nicht zu erreichen ist.
Meine bevorzugte Sprache in der Programmierung ist C#, da ich damit täglich arbeite und somit auch die größten Kentnisse in dieser Sprache vorweisen kann.
Grundlegend interessieren mich aber alle Sprachen ( mal abgesehen von den typischen Websprachen).

Kommen wir zum eigentlichen Thema: System.Reflection.Emit.
Emit ist ein Namensraum, welcher seit .Net 2.0 implementiert ist.
Hier eine kleine Definition aus der MSDN:

Der System.Reflection.Emit-Namespace enthält Klassen, die es einem Compiler oder Tool ermöglichen, Metadaten und MILS (Microsoft Intermediate Language) auszugeben sowie optional eine PE-Datei auf einem Datenträger zu generieren. Die wichtigsten Clients dieser Klassen sind Skriptmodule und Compiler. 

(Link: http://msdn.microsoft.com/de-de/library/system.reflection.emit.aspx ) Continue Reading

0

And the winner is …

Die Umfrage ist seid gestern Abend geschlossen und heute wurden die Ergbenisse in ein paar Grafiken zusammengefasst. Es wurden insgesammt 34 Umfragebögen komplett ausgefüllt, was ich doch beachtlich finde. Danke auf jeden Fall hierfür!

Sehr gefreut haben mich kleinen Nachrichten, die meinst gute Ideen und Themenvorschläge, aber auch Lob und Kritik enthielten. Ich weiß nicht, ob ich alles davon umsetzen kann, aber mein Gehirn sprudelt bereits wieder vor Ideen.

Erstaunlich fande ich auch, dass 9 der 34 Leute sich vorstellen können, am Blog etwas mitzugestalten/zu posten. Ich würde mich freuen, fremde Beiträge, in welcher Art auch immer, zu erhalten. Schreibt mir einfach eine Email (rechts verlinkt).

Die beliebsteste Kategorie ist .NET Reverse Engineering, gefolgt von Gamehacking, nativem RE und Programmierung in C#. Also quasi alles, was der Blog zu bieten hat 😀 Android RE und Programmierung sind exoten, sonst hat sich das Feld ziemlich verteilt. Überraschend fand ich das Interesse an Websecurity. Wenn mir da mal Themen über den Weg laufen, so bekommen diese auf jeden Fall einen Eintrag.

GraphKatgorien

Bei den weiteren Fragen, die man auf einer Skala von 1-10 bewerten sollte, ist ein ziemlich breites Spektrum zu sehen. Der Durchschnittswert ist jeweils unter dem Bild angegeben:

GraphFrage1

Durchschnitt: 6,00

Continue Reading

0

Online Umfrage zu Blogaktivitäten

Hallo zusammen,

um euch in Zukunft mit noch spannenderen, interessanteren Themen zu versorgen, habe ich eine online Umfrage erstellt. Die Beantwortung der 4 Fragen sollte keine Minute in Anspruch nehmen, es würde mich daher freuen wenn möglichst viele daran Teilnehmen. Zwar kann ich über die „Likes“ unter jedem Blogpost das Interesse mehr oder weniger abschätzen, aber eine solche Umfrage liefert mir natürlich einen besseren Überblick.

Die Umfrage läuft eine gute Woche, also bis zum Montag, den 02.12.2013. Die Ergebnisse der Fragen 1 und 2 werden im Anschluss veröffentlicht und ausgewertet.

Die Umfrage findet ihr hier!

Danke!
Easysurfer

0

Android RE – Quizduell

Die Android Applikation „Quizduell“ testet in abwechselnden Spielrunden das eigene und gegnerische Wissen diverser Themengebiete. Wer nach 6 Runden die meisten der Multiple Choice Fragen richtig beantworten konnte, gewinnt und steigt im Ranking auf.

Der eigentliche Fragebildschrim sieht dabei so aus:

Screenshot_2013-11-19-16-24-22

Ziel ist es, schon vor dem Auswählen einer Antwort zu wissen, ob diese richtig ist oder nicht. Nach der Auswahl wird die richtige Antwort Grün markiert, alle anderen Rot. Wir müssen also die Activity untersuchen, was nach dem Klicken auf eine Antwort passiert und den Code zum setzen der Button-Hintergrundfarbe schon beim Laden der Activity aufrufen.

Wie schon beim Billiard RE decompilen wir die App zunächst mit apktool, um das Manifest, Strings und Smali-Code zu erhalten. Dann entpacken wir die App und wandeln den .dex-Code in eine jar-Datei um, welche in JD-Gui geladen wird. Doch welch Überraschung, die Klassen sind obfuscated und nur ein paar Activites erkennbar:

Temp

Der eigentliche Quizbildschirm ist gut versteckt und nicht unter den benannten Activities zu finden. Also wählen wir einen anderen Weg: Wir suchen einen (statischen) String, der nur in dieser gesuchten Activity zu finden ist. Die Fragen und Antworten sind dafür ungeeignet (dynamisch geladen), aber was ist mit „Runde X gegen Y“? In der Strings.xml sind alle Strings mit internem Namen zu finden. Durch diesen internen Namen erhalten wir über die Public.xml die „Namen -> Token“ Verknüpfung. Die Suche nach „Runde“ liefert Erfolg!

<string name=“game_round_vs_xx“ formatted=“false“>Runde %d gegen %s</string>
<public type=“string“ name=“game_round_vs_xx“ id=“0x7f0b0053″ />

 

Continue Reading

0

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:exfm_downloader3

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:

Einen MMORPG-Bot bauen (0 Downloads)

Source:

[Download nicht gefunden.]

Greez

 

0

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: [Download nicht gefunden.]

Greez Easy

0

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.

exfm_downloader1

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.

Continue Reading

0

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()-&gt;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 😀 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

0

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:

MW2_Waypoint_Trigger1

Continue Reading

0

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:

Continue Reading

0