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