Michal Strehovsky
25.09.2023, 09:44 Uhr
Reverse Engineering nativ kompilierter .NET-Anwendungen
Der slowakische Entwickler Michal Strehovsky gewährt einen Blick in die Interna von Anwendungen, die mit nativem AOT erstellt wurden.
Mit .NET 7 wurde ein neues Bereitstellungsmodell eingeführt: die native AOT-Kompilierung. Wird eine .NET-Anwendung mit nativem AOT kompiliert, wird sie zu einer eigenständigen nativen ausführbaren Datei mit einer eigenen minimalen Laufzeitumgebung zur Verwaltung der Codeausführung kompiliert. Diese Laufzeitumgebung ist recht klein und in .NET 8 ist es möglich, eigenständige C#-Anwendungen mit weniger als einem MByte zu erstellen.
Es ist allerdings auch das erste Mal, dass .NET-Programme nicht in dem in ECMA-335 definierten Dateiformat (das heißt Anweisungen und Metadaten für eine virtuelle Maschine) verteilt werden, sondern als nativer Code (PE/ELF/Mach-O-Dateiformat), mit nativen Datenstrukturen wie zum Beispiel C++. Das bedeutet, dass keines der Reverse-Engineering-Tools für .NET, die in den letzten 20 Jahren entwickelt wurden, mit nativem AOT funktioniert. Entwickler Michal Strehovsky hat sich mit derart kompilierten .NET-Anwendungen näher beschäftigt und teilt seine Erkenntnisse in diesem Blogbeitrag.