Archive for the ‘ Paper, Tutorials und Co. ’ Category

Managed FASM, CLRHosting durch C# und natives Detouring

Der Titel sagt eigentlich schon alles aus: Es wird um drei verschiedene Themen gehen, die trotzdem irgendwie zusammenhängen. Es wird die Managed FASM Implementation vorgestellt und gleich darauf in einem Programm verwendet. Dieses Programm wird von C# aus einen CLR-Host in einer nativen Exe starten. Zum Abschluss wird noch eine Libary zum detouring von nativen Funktionen von C# aus erklärt und analysiert.

Viellicht werden sich noch Leser an Teil 8 der MW2 Bot Serie erinnern. Hier wurde, mangels normaler Calling Conventions, eine Funktion in inline ASM in C++ erklärt und anschließend in C# über die Opcodes und ein Delegate aufgerufen. Dass das Welten einfacher geht war mir bis zur Downtime von B2H (und somit auch dieses Blogs) nicht klar. Doch durch Zufall stieß ich auf die Managed FASM Libary, welche es uns erlaubt Mnemonics zu nutzen und anschließend den Code über CreateRemoteThread zu Injecten. Alternativ dazu kann man sich die ASM-Befehle direkt als Byte-Code kompilieren zu lassen und anschließend ein Delegate drauf zu setzen. Die Libary an sich ist zwar ganz cool, aber was hat das mit CLR Hosting zu tun?

Zur Zeit wird für den MW2 Bot in C# eine unmanaged DLL als CLR-Host verwendet. Diese injectete C++ DLL macht den Detour der EndScene und ruft danach jedes mal die managed DLL-Funktion über den CLR-Host auf. Für nähere Infos verlinke ich gerne auf den passenden Post ;-) Doch wenn wir nun Code über C# injecten können, kann doch einfach ein CLR-Host ohne Bootstrap DLL erzeugt werden! Die Idee ist nicht von mir, aber trotzdem will ich schnell den doch interessanten Source anschauen. Die Orginalcredits gehen natürlich an JuJuBoSc aus OwnedCore.
Weiterlesen

4 people like this post.

.NET RE Tutorialserie – PatchMe 01 & 02

In diesem zweiten Teil der .NET RE Tutorialserie wird es um das sog. “patchen” (zu deutsch: flicken) gehen. Ich werde die grundlegenden Tools zum Patchen erklären, für die schon fortgeschritteneren User den Patch mit dem Hexeditor erklären und dann dürft ihr euch selbst an PatchMe #01, aus diesem Tutorial, und PatchMe #02, eine Herrausforderung, versuchen. Da dies der einzige Artikel zum direkten Patchen ist wird dieser auch entsprechend komplex und lang, habt dafür also bitte Verständnis ;-)

Patchen ist eine Datei in ihrem Ablauf so zu verändern, dass sich daraus für den Cracker ein Vorteil ergibt. So gibt es die bekannten 1-Byte-Patches, welche durch nur eine kleine Modifikation den ganzen Schutz aushebeln oder auch größere Patches wie das Entfernen von Funktionen, Strings und ganzen Routinen.

Da wir uns hier im .NET Bereich bewegen sollten zuvor nochmal ein paar Dinge geklärt werden: Der MSIL-Code, welcher aus C# und anderen .NET Sprachen übersetzt wird, wird erst zur Laufzeit in echten Maschinencode umgewandelt. Wir können also diesen MSIL-Code verändern und die .NET Assembly danach neu schreiben, sodass ein neues, ausführbares Programm entsteht. Allerdings wird hier nicht geprüft, ob der Patch einen Fehler enthält! In diesem Fall wird dann beim Ausführen dieser Funktion eine Fehlermeldung geworfen. Zum Patchen sollte man übrigens zumindest die Grundlagen der MSIL-Sprache beherrschen. Wie man sich diese am besten Aneignet ist einem selbst überlassen, ich persönlich kann Euch diesen Artikel auf Codeprojekt ans Herz legen und euch raten einfach mal selbstgeschrieben Programme in MSIL-Code anzuschauen.

Doch genug der Einführung, los gehts mit der Analyse von PatchMe 01! Wir öffnen das Programm und bekommen beim Klick auf den Button eine enttäuschende Fehlermeldung:

Weiterlesen

3 people like this post.

.NET RE Tutorialserie - AnalyseMe 01

Schon relativ lange hatte ich eine solche Serie geplant… Und hiermit ist der erste Artikel online! =)

In dieser Serie wird es, oh Wunder, um .NET Reversing gehen. Es sollte dadurch Einsteigern möglich gemacht werden, den Einstieg in dieses Themengebiet zu finden. Ich kann nicht behaupten dass es immer einfach sein wird und ich werde euch auch nicht alles vorkauen, aber das erwartet ja auch hoffentlich Niemand ;-)

Aber genug geredet! Teil 1 beschäftigt sich mit den grundlegenden .NET Reversing Tools und deren Benutzung. Mit ihnen wird ein kleines AnalyseMe analysiert und ausgewertet, dabei werden die Vor- und Nachteile des jeweiligen Programmes aufgezeigt. Natürlich gibt es auch hier kein Patentrezept, viele Wege führen nach Rom.

Das wohl bekannteste und grundlegendste Tool dürfte wohl der Redgate .NET Reflector sein. Mit ihm ist es möglich .NET Binaries zu öffnen und den Code in MSIL, aber auch in C#, VB.NET und anderen Sprachen anzuschauen. Die geladenen Projekte lassen sich sogar komplett exportieren, ein fertiges Projekt kann “zurückerstellt” werden. Die Vorteile liegen auf der Hand: Der Reflector ist benutzerfreundlich und selbsterklärend. Durch Plugins ist es möglich den Reflector zu erweitern, aber dazu zu einem späteren Zeitpunkt mehr. Des weiteren bringt der .NET Reflector ein VisualStudio AddIn mit sich, mit welchem es möglich ist durch Visual Studio das Programm zu debuggen. Eine ausgiebige Analyse-Funktion von Klassenmembern und Methoden kann dazu verwendet werden, um Methoden zu “tracen” um sich z.B. die Zuweisungen an Variable X anzuschauen. Nachteile sind, dass es leicht den Dienst verweigert sobald etwas nicht 100% regelkonform ist sowie dass es unter einer Shareware steht. Dennoch ein sehr gutes Tool um ungeschützte Programme zu öffnen und sich einen groben Überblick zu verschaffen. Z.B. die Analyse des aktuellen InterCafe-Projekts lief bisher nur über dieses Programm…

Weiterlesen

4 people like this post.

Reversing ist kein Ponyhof – InterCafe RE IV

Manchmal gräbt man alte Projekte wieder aus. Und dieses ist eines dieser, schon zu den Akten gelegter Projekte. Auf die Bitte eines Users hin widmete ich mich ein weiteres Mal diesem Projekt und natürlich gabs noch eine Menge zu entdecken.

Leider ist das Projekt immer noch nicht abgeschlossen, zum aktivieren fehlen mir wohl noch ein paar entscheidende Puzzelteile in dem Aktivierungsschutz von InterCafe 2011. Aber ok, wir knüpfen an wo wir aufgehört haben:

Natürlich war die in Teil 3 beschriebene Theorie mit Serveremulation und 150 Nachrichten zum Aktivieren der Funktionen totaler Mist. Ich Idiot hatte nicht auf die weiteren Nachrichten des Servers geschaut und mich nur auf die RESPONSECHECKREGISTRATION fokusiert. Da hier absolut nichts zur Programmaktivierung gefunden wurde gab ich auf. Doch der Server sendet neben dieser Nachricht weitere Nachrichten raus, u.a. auch eine von mir komplett ignorierte: OK. YOU ARE AUTHORIZED.
MESSAGE SENT: _SET_ENCRYPTION_:XxYJCdBFdE4INcCIJmz2ouMLnvbHoEs2oCZ273QnwcU=|
MESSAGE SENT: _SET_ENCRYPTION_:7rF0i5x7UZXYqxKRoN1X7lhB4RTeFkzij1S+PemnmLs=|
MESSAGE RECIVED: HELLO. PLEASURE TO MEET YOU!>--<2011.4.0.0
MESSAGE SENT: HELLO. PLEASURE TO MEET YOU, TOO!>--<I´M AN INTERCAFE MANAGEMENT SERVER.>--<fa7e7046f2b355_UNIQUEHASH>--<PCNAME>--<1>--<127.0.0.1:8960>--<|
MESSAGE RECIVED: OK. YOU ARE AUTHORIZED.>--<AAEAAAD/////AQAAAAAAAAAMAgAAAEdD...BASE64
>--<False>--<>--<30>--<30>--<30>--<False>--<-999>--<False>--<False

Weiterlesen

4 people like this post.

SheikhCrypter Cracked and Exposed

Hier ein “Szenetool”, welches verkauft wird/wurde. Genaue Infos über den Crack gibt es in dem verlinkten FH-Thread, besser gesagt in diesem und diesem Post.

Features:
- FUD
- Zwei Arten der Injections (Prozessname oder beiliegende Exe)
- Persistence und Autostart
- Assembly-Information & Icon Changer
- Fake-Message
- 1337-Antis für VMs und Debugger (lol)
- Melt, Hide und Delay Funktionen
- Prozesskiller (w00t, superefficient!)

Warnung: Überschreibt eure komplette /Windows/drivers/etc/hosts Datei, also vorher sichern.

Crack-Infos: HWID-Check entfernt, Serverkommunikation entfernt, Stubs Hardcoded.

Weiterlesen

6 people like this post.

MW2 Bot in C# – Teil 9

In Teil 9 geht es um einen Aimbot bzw. genauer gesagt eine Aimbot-Implementation. Die genaue Mathematik wird zwar nicht ausgelassen, aber nur angeschnitten.

Im Grunde genommen gibt es zwei Arten einen Aimbot zu schreiben:

  1. Man holt sich per GetTagPos() die Position des Kopfes, wandelt den Vector3 in Screenkoordinaten (Vector2) um und verwendet SetCursorPos() der WindowsAPI auf den Punkt an. Das entspricht einer “Mausbewegung” zum Gegner.
  2. Man verwendet etwas Vector-Mathematik und rechnet den Winkel von Pos1 (eigene Pos) zu Pos2 (Gegnerpos) aus. Nun addiert man diesen Differenzwinkel dem eigenen ViewAngle hinzu und schon aimed man auf das Ziel.

In diesem Artikel wird Methode 2 verwendet, da es einfach präziser und sauberer ist. Am Rand: Mein erster Versuch für einen MW2 Bot mit einem DirectX Overlay hat Methode 1 verwendet ;-)

Nachdem meine tollen Paint-Skillz versagt haben muss nun ein Bild herhalten. Eigentlich wollte ich das ganze über ein 3D-Koordinatensystem illustrieren… Wie immer sollte man sich das Bild nicht nur verkleinert anschauen ;-)

Oben links sind Debugausgaben zu sehen, u.a. auch meine aktuellen ViewAngles. Dabei befindet sich die Y-Achse exakt gerade aus (parallel zum Boden) und der X-Wert zeigt nach “Norden”.

Weiterlesen

2 people like this post.

Deobfuscation .NET

In diesem Post beschreibe ich meine Versuche zum .NET Metaformat mit dem Ziel einen kleinen Deobfuscator zu schreiben. Das ganze hört sich villeicht am Anfang relativ langweilig an, aber wer sich ein bisschen für .NET Reversing intressiert wird da sowieso nicht drumrum kommen :P

Ich werde in diesem Post NICHT irgendwelche Sachen bezüglich dem Metaformat erklären und wenn überhaupt nur anschneiden, denn das können andere viel besser, präziser und ausführlicher. Sondern dieser Post wird sich auf die persönlichen Erfahrungen beziehen, die ich in den letzen Wochen gemacht habe.

Wenn man etwas umgehen und reversen möchte, so muss man das System natürlich extremst gut kennen. SQL-Injections gehen nicht ohne gute (My)SQL-Kentnisse, einen Bufferoverflow kann man nicht schreiben wenn man keine Ahung hat was ein Stack ist. Und so ist es auch mit .NET. Daher begann ich mich in das “Hinter die Kulissen” einer .NET Anwendung einzuarbeiten.

Als Einstieg benutze ich die Anatomy of a .NET Assembly, geschrieben von Simon Cooper, einem Mitentwickler des Redgate .NET Reflectors. Paralell dazu verfolgte ich alles gelesene im CFF Explorer, ein einzigartiges Tool um in .NET Dateien hineinzu schauen. Nachdem soweit alle Grundlagen saßen, wurde der geniale Artikel The .NET File Format als Referenz zum Programmieren benutzt. Der Artikel ist übrigens vom Autor des CFF Explorers. Alternativ kann man sich die offizielle .NET Metadata Referenz von Microsoft anschauen, von dieser ich persönlich mir allerdings nicht viel abgewinnen konnte…

Weiterlesen

6 people like this post.

Encryption breaking des PSC Managers

Da ich fast 2 Stunden daran rumgetüftelt habe verdient dieses Programm auch ein Blogeintrag. Also wird es in diesem Post über meine Vorgehensweise beim “cracken” des PSC Managers von dem User Tasty gehen.

In dem Programm wurde eine normale Rijndael-Verschlüsselung beim Speichern und Auslesen der PSCs verwendet. Und das ganze wäre keine Herrausforderung gewesen, wenn nicht der Obfuscator sehr gute Dienste geleistet hätte. Denn es wurden nicht nur die Methodennamen unleserlich gemacht, sondern auch jeder String aus einer Resourcendatei ausgelesen und nach mehreren Bitshifting-Operationen schließlich zurückgegeben. Ein kleiner Ausschnitt der Datei:

Weiterlesen

13 people like this post.

Ein paar Socks5 Experimente (Fortsetzung)

Bevor es an einen weiteren Artikel der MW2 Serie geht, möchte ich zunächst etwas weiter auf Socks5 eingehen. Das finale Ziel wird es sein, ein Reverse Socks5 Programm zu schreiben, wie in Teil 1 der Socks5-Serie beschrieben.

An dieser Stelle ein herzliches Dankeschön an den User Krusty, welcher mir in diversen Nachrichten immer mit Rat und Denkanstößen zur Seite stand ;-) Von ihm kam auch der Verweis auf die weiter unten besprochene Socks5 Klasse.

Das Programm in Teil 1 bestand aus nicht mehr als der Socks5 Anmeldefunktion und einem Datenaustausch (Eine Seite laden -> Eine Seite zurückliefern). So mochte der Proxy-Check von Proxifier das zwar das als Socks5 ansehen, doch mehr auch nicht. So hat das Programm Multithreading und eine hilfreiche UI bekommen:

Weiterlesen

9 people like this post.

MW2 Bot in C# – Teil 8

Da ich gut aus der Exkursion zurückgekehrt bin wird es gleich einen weiteren Artikel in der MW2 Bot Serie geben. In diesem wird es sich um die, schon in Teil 0 angesprochene, InlineASM Verwendung unter C# drehen. Dabei wird die SendCommandToConsole-Funktion verwendet, welche es erfordert den Stack zu fixxen. Zudem ist diese Funktion relativ unkomplex und klein, daher kann man sie gut als “Modell” verwenden ;-)

Aber bevor ich über die mehr oder weniger komplexen Vorgänge rede, hier erstmal die Funktion in C++:

VOID SendCommandToConsole( CHAR* szCommand )
{
	DWORD dwSend = (DWORD)0x004D3EA0;  // Die Adresse von SendCommandToConsole
 
	_asm push	szCommand // Wir pushen unseren Command, bzw die Adresse, auf den Stack
	_asm push	0 // Wir pushen eine null auf den Stack (Verwendung unbekannt)
	_asm call	dwSend // Da wir alle erforderlichen Sachen auf dem Stack haben wird die Funktion angesprungen
	_asm add	esp, 0x8 // Und es wird der Stack gefixxt
}

Sieht doch ganz überschaubar aus :P Zu erwähnen ist noch, dass auf diesen ASM-Code noch ein RET folgen muss, was aber in diesem Fall vom Compiler später übernommen wird.

Um ASM-Code von C# auszuführen braucht es mindestens folgende Schritte:

  1. Per VirtualAlloc Platz für den Code schaffen. Dabei muss der Speicher auf PAGE_EXECUTE_READWRITE gesetzt werden! Daher ist auch die Verwendung von Marshal.AllocHGlobal nicht möglich, es muss die reine WinAPI verwendet werden.
  2. Den Code zu dem reservierten Speicher kopieren.
  3. Ein Delegate mit dem Typ void auf den Anfang des Codes setzen
  4. Eine Funktion des Types des Delegates erstellen und aufrufen.

Weiterlesen

10 people like this post.