2017-04-08 4 views
1

J'ai une bibliothèque écrite en C#. Je veux le distribuer en tant que DLL. Mais il semble que .NET permet une décompilation confortable, donc les algorithmes peuvent être facilement volés.Protection du code source d'une DLL

Je peux le réécrire en C++, mais je suis nouveau pour .NET. Donc, le problème principal serait d'écrire une interface à C#. La bibliothèque n'est pas trop grande et utilise des threads, du réseau et quelques maths

Existe-t-il un moyen de construire une DLL qui peut seulement être désassemblée? Ou je ferais mieux de simplement écrire tout en C++ et fournir une interface à C#? Est-il beaucoup plus difficile de décompiler C++ que C#?

+1

Vous cherchez un 'obfuscator'. – cubrr

+0

@cubrr cela fournirait-il suffisamment de protection pour une bibliothèque écrite en C#? C++ et un tel outil 'obfuscator' seraient-ils meilleurs? – Leonid

+1

Obfuscator vient de vous renommer classes méthodes, variables, champs etc ... avec des noms wierd, il peut donc être difficile de l'inverser. Je pense que vous devriez breveter votre code et l'héberger dans le cloud. Bien sûr, vous pouvez héberger dans le nuage une DLL obfusquée. –

Répondre

1

Si vous êtes vraiment inquiet au sujet de la propriété intellectuelle de votre algorithme, alors vous avez quelques options.

1) Brevet l'algorithme. Je peux entendre les hurlements, mais c'est ainsi que vous protégez la propriété intellectuelle d'une manière légale.

2) Ne donnez pas la DLL avec l'algorithme aux utilisateurs. Hébergez l'algorithme dans le cloud et autorisez uniquement les clients à y accéder.

Certains du reste je ne comprends pas. Vous dites que vous pouvez écrire en C++, mais vous ne savez pas écrire une interface en C#? Utilisez COM. C# peut utiliser des bibliothèques COM. Vous pouvez également exporter votre fonction en C++ et écrire une bibliothèque d'interopérabilité .NET qui appelle la DLL C++ à l'aide de PInvoke.

2

Tout ce qui est distribué aux utilisateurs finaux peut être contrecollé. Vous pouvez augmenter la quantité d'effort nécessaire, mais ce sera toujours possible. Si votre algorithme est vraiment critique, propriétaire et précieux et que vous continuez à concevoir des applications et que le résultat de votre algorithme n'est pas critique ou peut être fragmenté ... alors peut-être pourriez-vous envisager une approche de service Web. Vous pouvez ensuite utiliser certaines des protections standard les plus solides de l'industrie pour accéder à vos calculs.

+0

"Tout ce qui est distribué aux utilisateurs finaux peut être modifié" - oui, je comprends. Mais vaut-il la peine de réécrire la bibliothèque en C++? – Leonid

+1

@Leonidas vous ne nous avez pas donné assez d'informations pour aider à cette question. En général, le code C++ compilé sera plus difficile à comprendre que C# obscurci, mais réécrire votre code en C++ pourrait être trivial ou presque impossible selon les caractéristiques du code que vous utilisez, votre confort avec C++ et la taille et les exigences du code algorithmique. – wllmsaccnt

+0

En fait, je suis beaucoup plus à l'aise avec C++, mais je suis nouveau à .NET. Donc, le problème principal serait d'écrire une interface à C#. La bibliothèque n'est pas trop grande et utilise des threads, du réseau et quelques maths. – Leonid