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

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

Confuser String Decrypter über mDbg

Der Confuser ist nach wie vor ein aktuelles Thema. Und dabei ist die String-Decryption soweit ich weiß nicht geknackt! Confuser stellt für fast alle Strings eine eigene Decrypterfunktion mit eigener Ressource sowie eigenen Verschlüsselungsparametern bereit. Der reine Horror für jeden, der einen statischen Unpacker schreiben will.

Dieses mal ging es um einen anderen, dynamischen Ansatz: Warum nicht die Strings auslesen, nachdem sie sich entschlüsselt im Speicher befinden? Und da ich bei dem Proxy System von Confuser Erfolg mit WinDbg hatte, ist auch hier zum Debugger gegriffen worden. Microsoft stellt uns eine .NET Debugging API bereit, auch wenn sich kaum etwas darüber im Internet finden lässt. Und genau mit dieser API in Kombination mit ein wenig Confuserwissen, Speicherlayout und .NET ist es möglich, einen Debugger und Unpacker für die Strings zu schreiben. Dabei laufen folgende Schritte ab:

  1. Debugger Instanz erstellen + die Executable laden
  2. Nach dem Laden vom “mscorlib.dll”-Modul ein Breakpoint auf System.Reflection.Module.ResolveMethod setzen (wird von .cctor gecalled, siehe Proxy-System)
  3. Sobald dieser Breakpoint erreicht ist, werden Breakpoints auf alle String-Decrypter Funktionen gesetzt. Der ResolveMethod BP wird entfernt.
  4. Wenn ein Decrypt-BP erreicht ist, so wird aus der Funktion raus gesprungen und der Wert in EAX ausgelesen. Dabei wird der Parameter (Token) von dem Decrypt-Call zusammen mit dem entschlüsselten String abgespeichert.
  5. Alle Decrypt-Funkionen, die ein Token (+ entschlüsselten String) haben, werden mit dem echten String ersetzt.

Kingt nach viel Arbeit und Source? Nicht wirklich. Fangen wir bei Punkt 1 an:

Engine = new MDbgEngine();
Proc = Engine.CreateProcess(@"C:\Users\AL\Downloads\li0nsar3c00l enhanceviews.net bot_patched.exe", "", DebugModeFlag.Debug, null);
 
Proc.PostDebugEvent += Proc_PostDebugEvent; // Jedes Event wird hierhin weitergereicht
Engine.Processes.Active.CorProcess.OnBreakpoint += CorProcess_OnBreakpoint; // ein BP wird als Event gecalled
Proc.Go().WaitOne(); // Wir lassen laufen, bis ein BP erreicht ist.
 
Console.ReadLine();

Weiterlesen

2 people like this post.

Cooles Secunet Hackit

Auf Secunet.to gibt es z.Z. ein Hackit, bei dem es ein anonymen OpenVPN zu gewinnen gibt. Mir persönlich ging es zwar nicht um den Gewinn, aber vielleicht spornt das den einen oder anderen etwas an.

Das Hackit dreht sich rund um SQL Injections. Toll fand ich bei diesem Hackit, dass man nicht nur Querys manipulieren musste, sondern vielmehr auch erstellen. So findet gerade für Anfänger ein Lernprozess statt. Aber keine Sorge, denn Langeweile kommt keine auf: ab Level6 darf man aus Querys ausbrechen, sich an IDS vorbei schleichen und auch blind injecten.

Das Hackit findet ihr unter dieser IP!

Viel Spass!

Easy

10 people like this post.

WarBot NEXON v6 – Cracked

Über CoderZ erhielt ich die Anfrage zum Cracken dieses Bots für das Spiel WarRock. Dabei gibt es sowohl einen “Free”-Mode, als auch den sog. “Premium”-Mode. Für letzteres bedarf es eines Codes, den man zuvor gegen Geld erworben hat.

Leider hat sich die Person, welche mich ursprünglich um den Crack bat, nicht mehr gemeldet, seid ich ihr eine gecrackte Version zum testen zugeschickt habe. Es ist also nicht garantiert, dass die hier gepostete Version funktioniert, ich freue mich allerdings über jedes Feedback ;-)

Des weiteren hat sich der Coder des Bots zurückgezogen und wird dementsprechend auch keine Updates mehr herrausbringen. So ist durch diesen Crack auch kein Schaden entstanden :)

Zurück zum Bot: Nach dem unpacken des Crypto-Obfuscators mit de4dot 2.0.3 gab 2 Features gab es zu patchen. Das erste Feature ist ein Anti-VM Mechanismus, welcher es nicht erlaubt dass der Bot unter einer virtuellen Maschine gestartet wird. Der Check dazu befindet sich gleich im Anfang nahe des EPs:

if (Class3.smethod_4())
{
MessageBox.Show("WarBot is running on a virtual computer. Please run WarBot on a real PC.""WarBot - Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}

Weiterlesen

3 people like this post.

Weltuntergang, Weihnachten & Co

Nachdem meine Hoffnung auf den Weltuntergang am 21.12.12 nicht erfüllt wurde, wünsche ich Euch allen ein frohes Weihnachtsfest und einen guten Rutsch ins Jahr 2013!

Wie unschwer zu erkennen ist, sind in letzter Zeit wenige Artikel erschienen. Der verhasste Grund dafür ist wahrscheinlich jedem bekannt: Die knappe Zeit! Sobald wieder etwas Luft ist, wird ein Artikel über die String Decryption des Confusers über einen managed Debugger (mDbg), sowie ein wenig neues über Gamehacking in .NET erscheinen. Und bis dahin wünsche ich Euch allen frohes Programmieren!

Easy

 

14 people like this post.

Confuser Unpacker – Videotutorial

Aufgrund einer Bitte folgt hier ein Video, was ein bisschen den Unpackvorgang des Confusers beleuchtet. Es ist auf Englisch geschrieben und ziemlich schnell zusammengeklickt, daher vergebt mir Schreibfehler wie “on” statt “one” oder “weather” statt “whether”.

Durch das Klicken auf die eingeblendeten Texte setzt das Video fort ;-)

Viel Spass beim lernen und anschauen!

Zum Video hier hart klicken!

Easy

5 people like this post.

Die Freude über HRESULT = 0×00000000 – CLRHosting Reloaded

Zunächst einmal muss ich etwas loswerden: COM-Objekte und ihre GUID/CLSID/IDDs sind BLÖD! Seid Stunden sitze ich an einem kleinen Problem, welches sich HRESULT REGDB_E_CLASSNOTREG  bzw E_NOINTERFACE nennt. Laut Google müssen CLSID und IID identisch sein, aber hier…:

CLSID_CLRRuntimeHost = 90F1A06E-7712-4762-86B5-7A5EBA6BDB02
IID_CLRRuntimeHost =        90F1A06C-7712-4762-86B5-7A5EBA6BDB02

Suche und finde den Fehler. Jap, ein Zeichen unterschied der GUIDs und alles für den A…..

So, nach diesem kleinen Ausraster direkt zur Einleitung. Es geht um CLRHosting durch Managed FASM, wie bereits in einem Post vor ziemlich genau einem Jahr erklärt. Dabei ist es möglich von .NET ASM-Code in eine native Assembly zu injecten, welche wiederrum eine CLR-Runtime läd um dort .NET Assemblys zu laden und auszuführen. Wozu braucht man das? Zum Beispiel um auf native Bootstrap DLLs verzichten zu können oder böse Malware in nativen Programmen zu verstecken.

In dem erwähnten Post wurde die CLRRuntime 2.X über die Funktion CorBindToRuntimeEx geladen, dies ist allerdings nicht zu höheren Versionen des .NET Frameworks kompatibel. Nun wurde eine andere Lösung gesucht, da viele Libraries inzwischen auf .NET 4 portiert sind.

Die hier vorgestellte Methode ist etwas komplizierter, dafür funktioniert sie für .NET v4.0.30319 und ist abwärtskompatibel. Bei dem früheren CLRHosting reichte es, eine statische Funktion aufzurufen um ein Interface-Handle zu bekommen. Von diesem Interface-Handle reichte es, wiederum eine Funktion aufzurufen, um die CLRRuntime zu starten.

Weiterlesen

7 people like this post.

When managed is not enough – Confuser broken

Nach einem Monat der mehr oder weniger intensivsten Arbeit erscheint hier der nächste große Artikel zum Confuser. Es wird (wiedermal) um das Auflösen des Proxy-Systems gehen. Wem das Proxy-System nicht geläufig ist, kann im vorherigen Artikel sein Wissen nochmal auffrischen.

Doch zunächst ein wenig Vorgeschichte: Ein deutschsprachiger Reverser “li0nsar3c00l” war so nett mir eine Binary zu builden, welche es zu cracken galt. Dieses “CrackMe” wurde mit Confuser 1.9 Aggressive erstellt. Aggressive enthält das Proxy-System (Methoden und Konstuktoren), String-Encryption, Code-Flow-Obfuscation, Anti-Debug und natürlich Type-Renaming. Man muss im Hinterkopf behalten dass es nicht möglich ist eine lauffähige Binary zu erstellen, wenn nicht alle dieser Systeme umgangen sind. Denn jedes System benutzt entweder Signaturen von Methoden, welche sich ändern sobald die Binary neu erstellt wird, oder aber Verrechnungen mit dem MethodToken aus dem Callstack. Das hört sich alles kompliziert an, bedeutet aber einfach dass wir keine neue Binary erstellen können ohne zuvor alles aufgelöst zu haben.

Bevor wir intensiv ans Reversing gehen können, gilt es das Anti-Debug-Modul auszuhebeln. Dazu noppen wir einfach die ganze Methode, unschön aber effektiv. Den Call zu noppen hätte auch gereicht, allerdings wusste ich nicht ob die Anti-Debug Funktion nochmal (dynamisch?) aufgerufen wird. Sicher ist sicher.

Weiterlesen

9 people like this post.

Monodroid – Erste Schritte und ein Sprung

Da ich seid neustem auch ein tolles Smartphone (Samsung Galaxy S Plus) besitze, musste ich doch mal schauen was man tolles damit anstellen kann. Da ich nicht mit Java als Sprache anfangen wollte gab es nur eine Alternative: Monodroid!

Monodroid ist Mono auf Android portiert. Die mitgelieferte IDE MonoDevelop macht einem das Entwickeln wirklich leicht. Durch Verknüpfung mit dem Android SDK lassen sich in MonoDroid Emulatoren und Geräte laden, zur Laufzeit debuggen und natürlich Applikationspakete (*.apk) erstellen.

Da ich weiterhin auf meinem Netbook entwickle hatte ich Probleme die Emulatoren zum laufen zu bringen. Da die Trial-Version von MonoDroid aber nur diese Emulatoren unterstützt habe ich schlichtweg die gecrackte Version verwendet. Das hat den Vorteil dass ich das APK-Dateien erstellen kann, wer also ebenfalls ein Android Phone besitzt kann dieses heute entwickelte Programm ebenfalls nutzen.

Nachdem das Hello-World-Programm lief wagte ich mich an die Erweiterung des Programms, bis schließlich ein 9Gag-Picture-Dumper entstanden war:

Das Programm ließt die Website 9Gag Mobile Website aus und holt sich so viele weitere Seiten des 9Gag-Portals wie angegeben (Im Bild die Zahl 3). Aus diesen Seiten werden die Bilder per Regex geparsed und schließlich nacheinander auf die Interne SD-Karte geladen. Zwar gibt es 9Gag Viewer, diese können aber nur die Bilder anzeigen und nicht herrunterladen. Da ich die Bilder aber gerne ohne Internetverbindung anschaue war so ein Dumper das perfekte Projekt.

Weiterlesen

9 people like this post.