Archive for Nov. 2011

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

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