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. Continue Reading

0

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.

Continue Reading

0

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 😀

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
 Continue Reading
0

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

Continue Reading

0

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

0

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

Continue Reading

0

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

0

Die Freude ĂŒber HRESULT = 0x00000000 – 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.

Continue Reading

0

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.

Continue Reading

0

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.

Continue Reading

0