FreeObfuscator.NET protection

.NET · C# · DLL · EXE

.NET schützen, ohne JSON- und Reflection-Verträge zu ändern

Explizite JSON-Namen verwenden und echte Verbraucher auf umbenannte Eigenschaften oder fehlende Typen prüfen.

Obfuscator öffnen

Upload, Konto und Zahlung verwenden die englische Oberfläche.

JSON-Namen von CLR-Namen trennen

JSON-Verbraucher erwarten ein bestimmtes Dokument. JsonPropertyName legt bei System.Text.Json den Namen einer Eigenschaft ausdrücklich fest. Prüfe Serialisierung und Deserialisierung: Ein korrektes Ausgabedokument ist nur die Hälfte des Vertrags. Das Attribut garantiert nicht, dass jeder Obfuscator alle per Reflection verwendeten Mitglieder oder Konstruktoren erhält.

Einen Roundtrip ausführen

Kompiliere den folgenden Code als .NET-8-Konsolenprojekt. Vor und nach dem Schutz soll json-contract=OK erscheinen. Arbeite in einer Kopie des Ausgabeverzeichnisses und ersetze nur die Anwendungsassembly. Das Beispiel prüft order_id und das zurückgelesene DTO. Ergänze deine Naming Policies, Enum-Darstellung, Konstruktorwahl und Converter.

Textbasierte Namenssuche erfassen

Type.GetType, GetMethod, Konfiguration und Plugin-Suche können normale kompilierte Referenzen umgehen. Gehe nicht davon aus, dass beliebige Strings umgeschrieben werden. Nutze nach Möglichkeit explizite Registrierungen und teste trotzdem den Produktionsweg. Erhaltene öffentliche APIs helfen kompilierten Verbrauchern, garantieren aber keine internen Reflection-Abfragen.

Beide Seiten des Deployments prüfen

Lies gespeicherte Dokumente der alten Version mit dem geschützten Build. Lass einen unveränderten Verbraucher die DLL aufrufen, lade echte Plugins und öffne relevante Ansichten. Teste fehlende und null-Werte. Source-generierte Serialisierung reduziert teilweise Reflection, repariert aber keine beliebige Umbenennung. Ist ein benötigter Vertrag nicht sicher, schränke den Schutz ein oder wähle einen passenden Ablauf.

using System;
using System.Text.Json;
using System.Text.Json.Serialization;
public sealed class OrderDto
{
    [JsonPropertyName("order_id")]
    public int Id { get; set; }
}
public static class Program
{
    public static void Main()
    {
        string json = JsonSerializer.Serialize(new OrderDto { Id = 42 });
        var copy = JsonSerializer.Deserialize<OrderDto>(json);
        if (json != "{\"order_id\":42}" || copy?.Id != 42)
            throw new InvalidOperationException("JSON contract changed");
        Console.WriteLine("json-contract=OK");
    }
}

Anleitungen zum Codeschutz