Question

Il me semble que l'obscurcissement est une idée qui s'inscrit quelque part dans le camp de la « sécurité par l'obscurité » ou du « faux sentiment de protection ».Pour protéger la propriété intellectuelle, il existe le droit d'auteur ;pour éviter que des problèmes de sécurité ne soient détectés, il existe résoudre ces problèmes.Bref, je le considère comme une solution technique à un problème social. Ceux-là ne fonctionnent presque jamais.

Cependant, il semble que je sois le seul de notre équipe de développement à ressentir cela, donc soit je me trompe, soit j'ai juste besoin d'arguments convaincants.Notre produit utilise .NET et un développeur a suggéré .NET Reactor (qui, incidemment, a également été suggéré dans ce fil SO).

.NET Reactor arrête complètement toute décompilation en mélangeant n'importe quel assemblage .NET pur (écrit en C#, VB.NET, Delphi.NET, J#, MSIL...) avec du code machine natif.

Donc, en gros, vous jetez tous les avantages du bytecode d’un seul coup ?

Y a-t-il du bon ingénierie avantages de l'obscurcissement ?

Était-ce utile?

La solution

J'ai posté une question qui pourrait vous aider car elle aborde certains des problèmes :devrais-je- m'inquiéter-de-masquer-mon-code-net

Autres conseils

Vous avez demandé des raisons d'ingénierie, ce n'est donc pas à proprement parler une réponse à la question.Mais je pense que c'est une clarification valable.

Comme vous le dites, l’obscurcissement vise à résoudre un problème social.Et les problèmes sociaux (ou commerciaux), contrairement aux problèmes techniques, ont rarement une solution complète.Il n’existe que des degrés de réussite pour résoudre ou minimiser le problème.

Dans ce cas, l’obscurcissement augmentera les barrières empêchant quelqu’un de décompiler et de voler votre code.Cela découragera les attaques occasionnelles et, par inertie, pourrait rendre votre propriété intellectuelle moins susceptible d'être volée.Pour faire une analogie fastidieuse, un dispositif d'immobilisation n'empêche pas le vol de votre voiture, mais il le rendra moins probable.

Bien sûr, il y a un coût, en maintenabilité, (éventuellement) en performances et, surtout, en rendant plus difficile pour les utilisateurs de soumettre avec précision des rapports de bogues.

Comme GateKiller l'a dit, l'obscurcissement n'empêchera pas une équipe déterminée de décompiler, mais (et cela dépend de votre produit) dans quelle mesure une équipe est-elle susceptible de vous attaquer ?

Il ne s’agit donc pas d’une solution technique à un problème social, c’est une décision technique qui ajoute une influence à une structure sociale complexe.

Si une grande équipe de programmeurs veut vraiment accéder à votre code source et qu’elle a le temps, l’argent et les efforts, alors elle réussira.

L'obscurcissement devrait donc arrêter les personnes qui n'ont pas le temps, l'argent ou les efforts pour obtenir votre source, les passants que vous pourriez appeler.

Si vous vous en tenez à l’obscurcissement pur du code géré, vous pouvez réduire considérablement la taille de l’assembly, et les noms de classes/fonctions obscurcis (réduits en lettres simples) signifient une empreinte mémoire plus petite.Ceci est presque toujours négligeable, mais a un impact (et est utilisé) sur certains appareils mobiles/embarqués (bien que principalement en Java).

Un avantage technique potentiel est que, dans certains cas, l'obscurcissement peut créer des exécutables plus petits ou d'autres artefacts -- par ex.l'obscurcissement de javascript entraîne des fichiers plus petits (car toutes les variables sont nommées "a" et "b" au lieu de "descriptiveNameOne" et tous les espaces sont supprimés, etc.).Cela se traduit par des temps de chargement plus rapides pour les pages Web qui utilisent du javascript obscurci.Évidemment, cela ne s'applique pas (autant) au monde .NET, mais c'est un exemple de situation dans laquelle il existe un avantage direct en matière d'ingénierie.

Bien que cela ne soit pas lié à .net, j'envisagerais l'obscurcissement en Javascript et éventuellement dans d'autres langages interprétés.Javascript bénéficie bien de l'obscurcissement car il réduit la bande passante nécessaire et les jetons que l'analyseur doit lire.

Mais obscurcir le bytecode compilé ne me semble pas vraiment utile.Je veux dire, qu'essaieriez-vous de réaliser ?Je ne vois que l'obscurcissement étant légèrement utile dans le code de vérification de licence pour éviter qu'il ne soit contourné trop facilement.

La principale raison de recourir à l'obscurcissement est de protéger la propriété intellectuelle, comme vous l'avez indiqué.Il est généralement beaucoup plus rentable pour une entreprise d’acheter un produit d’obscurcissement tel que .NET Reactor que d’essayer de faire respecter légalement vos droits d’auteur.

L'obscurcissement peut également offrir d'autres avantages plus accessoires, tels que des améliorations de performances et une réduction de la taille des assemblages.Ce seraient les ingénierie avantages que vous recherchez.

Utilisez le cryptage pour protéger les informations en cours de route.

Utilisez l'obscurcissement pour protéger les informations pendant que votre programme les possède encore.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top