FreeObfuscator.NET protection

.NET · C# · DLL · EXE

Protéger .NET sans modifier les contrats JSON et de réflexion

Fixez les noms du document et testez des consommateurs réels pour repérer propriétés renommées et types introuvables.

Ouvrir l’obfuscateur

Le dépôt de fichiers, le compte et le paiement utilisent l’interface en anglais.

Distinguer nom JSON et nom CLR

Les consommateurs JSON dépendent du document échangé. JsonPropertyName définit explicitement le nom JSON d’une propriété avec System.Text.Json. Vérifiez écriture et lecture : produire le bon document ne teste que la moitié du contrat. Cet attribut ne garantit pas que tout obfuscateur préserve chaque membre, constructeur ou convertisseur utilisé par réflexion.

Effectuer un aller-retour

Compilez le code ci-dessous dans un projet console .NET 8. Il doit afficher json-contract=OK avant et après protection. Utilisez une copie du dossier de sortie et remplacez uniquement l’assembly concerné. L’exemple vérifie order_id et la lecture du DTO. Ajoutez vos politiques de noms, représentations d’énumérations, choix de constructeurs et convertisseurs.

Recenser les noms stockés en texte

Type.GetType, GetMethod, configuration et découverte d’extensions peuvent contourner les références compilées ordinaires. Ne supposez pas que toutes les chaînes seront réécrites. Préférez des enregistrements explicites quand c’est possible, puis testez le mécanisme réel. Une API publique préservée aide les consommateurs compilés, sans garantir toutes les recherches internes par réflexion.

Tester les deux côtés du déploiement

Lisez avec la version protégée des documents enregistrés par l’ancienne. Faites appeler la DLL par un consommateur inchangé, chargez une extension réelle et ouvrez les écrans concernés. Testez valeurs absentes et nulles. La génération de sérialisation réduit parfois la réflexion, mais ne répare pas tout renommage. Si un contrat nécessaire ne peut être maintenu, limitez la protection ou choisissez un autre processus.

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");
    }
}

Guides de protection