Eine Blazor-WebAssembly-App dekompilieren: die .NET-DLLs lesen, die der Browser geladen hat
Eine Blazor-WebAssembly-App sendet Ihre .NET-Assemblies an den Browser — als webcil verpackt, aber mit vollständigem IL. Hier steht, wie man sie aus _framework zieht, in einem Dekompilierer liest und warum Ihr clientseitiges C# so offen liegt wie JavaScript.
Wenn jemand zum ersten Mal die Entwicklerwerkzeuge auf einer Blazor-WebAssembly-App öffnet und einen _framework-Ordner voller .wasm-Dateien sieht, wirkt das beruhigend undurchsichtig — wie der kompilierte WebAssembly-Blob, den man nicht lesen kann. Ist er nicht. Blazor WebAssembly kompiliert Ihr C# nicht nach WebAssembly; es liefert eine .NET-Laufzeit (als WASM) plus Ihre gewöhnlichen .NET-Assemblies aus und führt sie im Browser aus. Diese Assemblies werden zu jedem Besucher geladen, Metadaten und IL intakt, was bedeutet, dass Ihr clientseitiges C# so sauber dekompiliert wie jede DLL auf Ihrer Festplatte. Zu verstehen, wie man sie liest, ist zugleich der schnellste Weg zu verstehen, was man nicht hineinlegen darf.
Was an den Browser ausgeliefert wird
Beim Laden einer Blazor-WebAssembly-App holt sie ein Manifest — _framework/blazor.boot.json — das jede benötigte Assembly samt Dateiname und Integritäts-Hash auflistet. Der Browser lädt diese Dateien dann aus _framework/. Im aktuellen .NET kommen sie als webcil: Ihre PE-Assembly, in einen WebAssembly-kompatiblen Container verpackt. Webcil existiert aus einem banalen Grund — manche Proxys, CDNs und Unternehmens-Firewalls verfälschen oder blockieren rohe .dll-Downloads — also wird die .dll in eine Form umverpackt, die als .wasm-artiges Asset durchgeht. Und das Entscheidende: webcil ist eine Hülle, keine Verschlüsselung — die ursprünglichen ECMA-335-Metadaten und das IL liegen Byte für Byte darin.
Die Kette von „bereitgestellte App“ zu „Ihrem Quellcode“ ist also kurz: blazor.boot.json nennt die Assemblies, _framework/ liefert sie aus, webcil enthält das echte PE, und ein Dekompilierer hebt das IL zurück nach C#.
Sie in Glass lesen
Der Ablauf ist derselbe wie bei jeder Assembly, mit einem kleinen Vorschritt für webcil:
- Öffnen Sie die
_framework/blazor.boot.jsonder laufenden App (Entwicklerwerkzeuge → Netzwerk, oder direkt abrufen) und notieren Sie die Assemblies, die Sie interessieren — in der Regel Ihre App-Assembly und Ihre eigenen Bibliotheken, nicht die des Frameworks. - Laden Sie diese Dateien aus
_framework/herunter. - Öffnen Sie sie in Glass. Glass liest die .NET-Assembly im webcil-Container und rekonstruiert C# — Ihre Komponenten, Ihre Dienste, Ihre Modelle — genau wie bei einer Desktop-DLL. (Bei älteren Blazor-Versionen sind die Dateien normale
.dllund öffnen sich direkt.)
Ab da ist es gewöhnliche Dekompilierung: Typen durchgehen, Methodenrümpfe lesen, Referenzen folgen — wie beim Dekompilieren jeder DLL zu C#.
Die eigentliche Lektion: die Client-Seite ist öffentlich
Das ist weniger ein Dekompilierungs-Tutorial als eine Sicherheitserinnerung mit angehängter Demonstration. Blazor-WebAssembly-Code läuft auf dem Rechner des Nutzers, ist also so offen wie JavaScript. Alles, was Sie darin einbetten — ein API-Schlüssel, eine Verbindungszeichenfolge, eine Lizenzumgehung, proprietäre Preislogik — lässt sich mit den obigen Schritten in Minuten zurücklesen. Die defensiven Schlüsse:
- Halten Sie Geheimnisse und sensible Logik serverseitig (eine Backend-API oder Blazor Server, wo das C# auf dem Server bleibt und nur DOM-Diffs über die Leitung gehen).
- Müssen Sie sensible Logik an den Client ausliefern, obfuskieren Sie sie — Blazor-WASM-Assemblies können wie jede Assembly umbenannt und ihre Zeichenketten verschlüsselt werden (siehe Blazor WebAssembly vor Dekompilierung schützen) — eingedenk dessen, dass clientseitiger Schutz die Hürde hebt, den Code aber nicht geheim macht.
Die eigene App so lesen zu können, wie es ein Angreifer täte, ist genau der Punkt: Tun Sie es einmal, und Sie wissen genau, was nicht in den Browser gehört.
Mit Glass umsetzen
Glass öffnet die Assemblies hinter einer Blazor-WebAssembly-App — es liest direkt durch die webcil-Hülle bis zum IL und rekonstruiert C# — sodass Sie genau prüfen können, was Ihr bereitgestellter Client offenlegt. Es ist kostenlos und dasselbe Werkzeug, mit dem Sie jeden unbekannten .NET-Code verstehen würden.
Holen Sie es von der Glass-Seite und öffnen Sie das _framework Ihrer eigenen App, um zu sehen, was ausgeliefert wird.
Nebula.NET testen
Härten Sie Ihren .NET-Code in wenigen Minuten — starten Sie mit der kostenlosen Edition.