|
|
Protection des Codes Source
Mpoware propose la seule solution du marché capable de protéger les codes source!
Cette solution innovante vous permet d'obfusquer le code source directement dans Visual Studio sans utiliser d'outil externe.
Les obfuscateurs concurrents du marché ne fonctionne que sur l'IL du code compilé. Or, cette méthode ne permet pas de protéger le code source mais a aussi le désavantage de ne pas être compatible avec certains mécanismes de .NET comme la Reflection ou l'utilisation de noms forts pour les assemblies.
Le code source obfusqué est la seule solution permettant de préserver la propriété intellectuelle depuis l'environnement de développement et de permettre une utilisation complète des classes & mécanismes du framework .NET. C'est aussi la seule solution pour protéger la propriété intellectuelle dans les projets d'out-sourcing.
Un dictionnaire utilisé pendant le processus d'obfuscation permet au développeur propriétaire du code de pouvoir dé-obfusquer son code source pour le relire & le modifier.
Note: l'outil actuel supporte le langage C#.
Exemple d'un code simple ci-dessous:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Mpoware.CSharp.Parser.Tests
{
public class Test5_ClassModifiers
{
// Avec un commentaire une ligne
/*
** Small comment
** Delimited $$$
*/
public void Say(string message)
{
i = 0;
Console.WriteLine("Hello " + /*mon message*/ message);
}
}
}
Exemple de code obfusqué à partir du code ci-dessus (les algorithmes sont ouverts et modifiables/évolutifs):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Mpoware.CSharp.Parser.Tests
{
public class Test5_ClassModifiers
{
public void Say(string lCn)
{
int bFvkZBBQMMybaxvs;
bFvkZBBQMMybaxvs = 0;
if (bFvkZBBQMMybaxvs == 0) goto sdlfhsqdfmkjf;
fmkjdshfkjf: if (bFvkZBBQMMybaxvs == 1) { Console.WriteLine(GetString(new int[] { 2, 2, -3, 0, -1, 3 }) + lCn); goto end; }
sdlfhsqdfmkjf: ADDKSHFDDRH(bFvkZBBQMMybaxvs); bFvkZBBQMMybaxvs++; if (bFvkZBBQMMybaxvs == 1) { goto fmkjdshfkjf; } else { goto fmkjdshfkjf5; };
bFvkZBBQMMybaxvs = 0;
if (bFvkZBBQMMybaxvs == 0) goto sdlfhsqdfmkjf;
fmkjdshfkjf5: if (bFvkZBBQMMybaxvs == 1) { Console.WriteLine(GetString(new int[] { 2, 2, -3, 0, -1, 3 }) + lCn); goto end; }
sdlfhsqdfmkjf6: ADDKSHFDDRH(bFvkZBBQMMybaxvs); bFvkZBBQMMybaxvs++; goto fmkjdshfkjf;
end1: ;
bFvkZBBQMMybaxvs = 0;
if (bFvkZBBQMMybaxvs == 0) goto sdlfhsqdfmkjf;
fmkjdshfkjf1: if (bFvkZBBQMMybaxvs == 1) { Console.WriteLine(GetString(new int[] { 2, 2, -3, 0, -1, 3 }) + lCn); goto end; }
sdlfhsqdfmkjf2: ADDKSHFDDRH(bFvkZBBQMMybaxvs); bFvkZBBQMMybaxvs++; goto fmkjdshfkjf;
end2: ;
bFvkZBBQMMybaxvs = 0;
if (bFvkZBBQMMybaxvs == 0) goto sdlfhsqdfmkjf;
fmkjdshfkjf3: if (bFvkZBBQMMybaxvs == 1) { Console.WriteLine(GetString(new int[] { 2, 2, -3, 0, -1, 3 }) + lCn); goto end; }
sdlfhsqdfmkjf4: ADDKSHFDDRH(bFvkZBBQMMybaxvs); bFvkZBBQMMybaxvs++; goto fmkjdshfkjf;
end3: ;
end: return; ;
}
private int ADDKSHFDDRH(int bFvkZBBQMMybaxvs)
{
return bFvkZBBQMMybaxvs++;
}
private string GetString(int[] p)
{
StringBuilder s = new StringBuilder();
int[] al = new int[6] { 111, 108, 72, 32, 101, 34 };
int i = 0;
for (int k = 0; k < p.Length; k++)
{
i += p[k++]; s.Append((char)al[i]);
}
return s.ToString();
}
}
}
Il est important de valider que les optimisations du compilateur ne permettent pas l'amélioration de la lisibilité de l'IL. Ci-dessous, l'IL généré par le compilateur sur le code obfusqué:
public class Test5_ClassModifiers
{
// Methods
private int ADDKSHFDDRH(int bFvkZBBQMMybaxvs)
{
return bFvkZBBQMMybaxvs++;
}
private string GetString(int[] p)
{
StringBuilder s = new StringBuilder();
int[] al = new int[] { 0x6f, 0x6c, 0x48, 0x20, 0x65, 0x22 };
int i = 0;
for (int k = 0; k < p.Length; k++)
{
i += p[k++];
s.Append((char) al[i]);
}
return s.ToString();
}
public void Say(string lCn)
{
int bFvkZBBQMMybaxvs = 0;
if (bFvkZBBQMMybaxvs == 0)
{
goto Label_0041;
}
Label_0010:
if (bFvkZBBQMMybaxvs == 1)
{
Console.WriteLine(this.GetString(new int[] { 2, 2, -3, 0, -1, 3 }) + lCn);
goto Label_00A0;
}
Label_0041:
this.ADDKSHFDDRH(bFvkZBBQMMybaxvs);
bFvkZBBQMMybaxvs++;
if (bFvkZBBQMMybaxvs != 1)
{
if (bFvkZBBQMMybaxvs == 1)
{
Console.WriteLine(this.GetString(new int[] { 2, 2, -3, 0, -1, 3 }) + lCn);
goto Label_00A0;
}
this.ADDKSHFDDRH(bFvkZBBQMMybaxvs);
bFvkZBBQMMybaxvs++;
}
goto Label_0010;
Label_00A0:;
}
}
|