Protection contre la copie

Licences

 

Format des licences dotNet Protector

Vous pouvez utiliser dotNet Protector pour protéger vos application contre la copie.

Le système d'activation de dotNet Protector utilise des licences sous forme de fichier XML :

<dotNetProtectorLicense>

   <License ProductKey="..." LicenseKey="..." />

</dotNetProtectorLicense>

ProductKey est une châine de caractère format 5x5 (XXXXX-XXXXX-XXXXX-XXXXX-XXXXX)

LicenseKey est une chaîne de caractères format 6x6

 

Ce fichier de licence peut être placé dans une dll de resources (obligatoire pour SQL Server)

 

Vous pouvez créer une dll de licence à l'aide de l'outil AL (Assembly Linker) du .NET framework

Si votre assembly s’appelle MyDll et le fichier d’assembly MyDll.dll, vous devrez incorporer la licence MyDll.license dans une dll MyDll.license.dll.

La commande est alors la suivante :

  AL /t:lib /out:MyDll.license.dll /embed:MyDll.dll.license,MyDll.license

Si vous désirez créer une dll de licence avec nom fort (pour l'installer dans le GAC)

  AL /t:lib /out:MyDll.license.dll /v:1.2.3.4 /keyfile:MyDll.snk /embed:MyDll.dll.license,MyDll.license

la version 1.2.3.4 doit être la même pour la dll protégée et pour la dll de licence

la clé publique doit également être la même.

 

Emplacement des Licences

Lors de l'exécution, la runtime de dotNet Protector cherchera à localiser la licence (seulement si le verrou matériel a été activé)

La runtime cherchera d'abord une licence au format xml (sauf pour la runtine SQL)

et ensuite sous forme de dll de licence.

 

Pour les fichiers XML, les emplacements de recherche sont les suivants, dans l'ordre :

1. elle cherche dans l'assembly les attributs AssemblyCompanyAttribute et AssemblyProductAttribute

  essaie d'ouvrir Environment.SpecialFolder.CommonApplicationData\AssemblyCompany\AssemblyProduct\AssemblyVersion\AssemblyName.license

2.  construit un hash MD5 à partir du nom de l'assembly

    byte[] data = new byte[asm.FullName.Length];

    for (int i = 0; i < asm.FullName.Length; i++) data[i] = (byte)asm.FullName[i];

    HashAlgorithm hash = new MD5CryptoServiceProvider();

    byte[] hashdata = hash.ComputeHash(data);

    Guid id = new Guid(hashdata);

    string LicenseDir=id.ToString()

  essaie d'ouvrir Environment.SpecialFolder.CommonApplicationData\Licenses\LicenseDir\AssemblyName.license

3. analyse le chemin de l'assembly et cherche la licence de 2 manières

    GetLocalPath(asm.EscapedCodeBase)+".License" 

    asm.Location+".License" // Windows exe / dll

4. essaie d'ouvrir Assembly.ManifestModule.Name.License dans le répertoire en cours

5. essaie d'ouvrir AssemblyName.License dans le répertoire en cours

 

Pour les dlls de licence, la recherche est la suivante:

supposons que l'assembly soit MyDll, Version=1.2.3.4

1. si l'assembly à un nom fort, cherche MyDll.license, Version=1.2.3.4, Culture=neutral, PublicKeyToken='même que MyDll'

2. si l'assembly à un nom fort, soit xxxx son PublicKeyToken

  cherche MyDll.licensexxxx, Version=1.2.3.4, Culture=neutral, PublicKeyToken=null

3. cherche MyDll.license, Version=1.2.3.4, Culture=neutral, PublicKeyToken=null

 

 

 

 

Envoyer un commentaire à PV Logiciels à propos de cet article