Protect.NET code de la rétroingénierie?

Obfuscation est un chemin, mais elle ne peut pas protéger de casser la protection contre le piratage de sécurité de l'application. Comment puis-je m'assurer que la demande n'est pas altérée, et comment puis-je m'assurer que le mécanisme d'enregistrement ne peut pas être inversé?

il est aussi possible de convertir une application C# en code natif, et Xenocode est trop coûteux.

C # fournit beaucoup de fonctionnalités, et est la langue idéale pour mon code, il est donc hors de question d'écrire à nouveau toute la base de données en C++.

Les certificats sécurisés

peuvent être facilement retirés des assemblages signés .NET.

442
demandé sur Peter Mortensen 2009-02-03 10:53:46

30 réponses

vous ne pouvez pas.

il y a des étapes que vous pouvez prendre pour rendre plus difficile un petit , mais en fin de compte tout exécutable sur la machine locale est fissurable. Finalement, ce code doit être converti en code machine natif et que chaque application est exécutable est vulnérable.

ce que vous voulez faire, c'est juste le rendre assez difficile à craquer pour qu'il ne vaille pas la peine d'être dérangé par les gens.

Some suggestions j'ai pour vous aider à protéger votre application:

  • Obscurcir votre code. Dotfuscator a une édition gratuite et est livré avec Visual Studio.
  • Utiliser de clés publique/privée ou le chiffrement asymétrique pour générer votre produit de licences. Cela garantit que seulement vous peut générer vos codes de licence. Même si votre application est fissuré, vous pouvez être sûr qu'ils ne seront pas libérer un générateur de clés pour votre application, parce qu'il est impossible d'Inverser l'algorithme de génération de clés.
  • utilisez un packeur tiers pour empaqueter votre exécutable .NET dans une application Win32 wrapper cryptée. Themida est l'un des meilleurs. Cela empêche les gens de refléter votre application dans . Réflecteur et en fait une douleur de déballer pour inverser.
  • Écrire votre propre "1519120920 personnalisé" packer . Si les emballeurs tiers sont trop chers, envisagez d'écrire les vôtres. Parfois, les emballeurs personnalisés peuvent être très efficaces, car il n'y a pas de méthodes bien publiées sur la façon de les déballer. Le tutoriel Comment écrire votre propre packer donne une tonne de bonnes informations sur l'écriture de votre propre Win32 emballeur.

mais en fin de compte, si les gens veulent que votre demande soit traitée, ils le feront. Regardez tous les logiciels commerciaux qui dispose d'une grande quantité de ressources nécessaires pour protéger leurs applications et pourtant, ils sont fissurés avant que les demandes sont encore rendu public.

un rétro-ingénieur qualifié peut enflammer IDA-Pro et trancher votre application comme du beurre, peu importe ce que vous faites. Des paniers - l'application peut être décompressé et de l'obscurcissement n'empêche de faire une promenade dans le parc. Tous vos efforts avec votre code de licence complexe peuvent être annulés avec un seul patch octet.

vous avez juste besoin d'accepter qu'il y a une réelle chance que les gens vont pirater votre logiciel. Il ya des gens qui sont jamais va payer pour votre application peu importe ce que et ce sont les gens que vous ne devez pas vous inquiéter.

Il ya cependant, de nombreuses entreprises là-bas qui ne serait jamais risquer un procès et acheter heureusement des licences de logiciels et de nombreux utilisateurs d'ordinateurs qui soit ne veulent pas prendre le risque, de trouver tort ou ne sont pas assez astucieux technologie à pirater. Ce sont vos vrais clients, et vous devriez concentrer vos efforts sur leur fournir une bonne expérience utilisateur et ignorer les gens craquant votre logiciel.

j'ai déjà fait pirater ma candidature, et je l'ai considérée comme un affront personnel. J'étais là, un petit développeur, à mettre mon cœur et mon âme dans une application et ces gens ont eu le culot de me pirater?! Ils prenaient l'argent directement de ma poche!

j'ai immédiatement ajouté dans un tas de DRM draconien code et tenté de saboter toute personne en utilisant une copie illégitime ou fissurée. J'aurais bien sûr dû améliorer ma demande au lieu d'essayer d'arrêter l'inévitable. Non seulement cela, mais je blessais mon véritable clients seront toutes ces protections supplémentaires que je mettais en.

après une longue bataille, je me suis rendu compte que je me battais contre les marées et que tout ce temps perdu était pour rien. J'ai sorti tous les codes téléphoniques sauf les fonctions de licence barebones et je n'ai jamais regardé en arrière.

615
répondu Simucal 2013-02-24 09:07:04

vous ne pouvez pas entièrement sécuriser une application (gérée ou non). Si des systèmes comme la Playstation et l'iPad peuvent être craqués - où le fournisseur contrôle même le matériel - quel espoir a votre application? Heureusement, tu n'en as pas vraiment envie. À mon avis, vous devez sécuriser votre application juste assez que quelqu'un ne peut pas accidentellement pirater votre produit, et plus.

Par exemple, si vous utilisez une licence par ordinateur, il ne faut pas seulement lorsque vous l'installez sur une nouvelle machine. Vous voudrez un bon message d'erreur pour empêcher les appels de soutien supplémentaires, mais ne passez pas de temps supplémentaire à rendre trop difficile de travailler autour et ne frappez pas les utilisateurs sur la tête avec elle.

un autre exemple est un procès limité dans le temps. Ne vous inquiétez même pas sur des choses simples comme si les utilisateurs peuvent simplement revenir en arrière l'horloge du système. Quelqu'un qui fait cela sait qu'il viole votre licence, et aussi longtemps qu'un utilisateur sait quand ils sont en violation vous avez fait assez.

vous devez faire cela beaucoup parce que les utilisateurs ne se soucient pas de votre licence. Les licences sont des choses inventées dont personne ne se soucie avant d'en avoir besoin. Personne ne les lit, et ils ne devraient pas avoir à le faire. Par conséquent, la meilleure façon de dire à l'utilisateur où sont les limites est si le comportement out-of-the-box pour votre application est conforme à la licence. Dans le premier cas, cela signifie que défaut d'installer ou d'installer en mode version d'essai la deuxième fois. Pour ce dernier, cela pourrait signifier simplement vérifier une date en texte clair dans un fichier de configuration. Quoi qu'il en soit, assurez-vous de le gérer de façon élégante, serviable et respectueuse.

donc ça explique ce que ça veut dire de faire autant. Mais pourquoi ne pas aller plus loin? pourquoi ne pas boucher chaque petit trou que vous pouvez trouver? , La réponse est en deux parties. Premièrement, si quelqu'un va franchir le seuil éthique de consciemment enfreindre vos conditions de licence - même d'une manière simple - ils seront également prêts à faire quelque chose de plus difficile ou dangereux comme tirer votre application à partir d'un torrent site - et il ya une certaine quantité de danger impliqué dans l'exécution des applications téléchargées à partir de sources non fiables. Le rendre plus difficile est seulement un ennui mineur pour ces utilisateurs et les risques de causer des problèmes avec vos clients payeurs. Garder les choses simples peuvent prévenir quelqu'un de creuser dans votre application et de libérer une fissure plus complète. Deuxièmement, vous avez peu d'yeux disponibles pour chercher des défauts; les pirates ont beaucoup, et ils ont plus de pratique de les trouver. Vous avez seulement besoin de manquer un petit défaut, et votre application aura la même distribution sur les sites pirates que si vous n'avez rien fait. Vous devez avoir raison à chaque fois; ils ne doivent être chanceux qu'une fois. Ainsi, l'effort requis est très élevé et la probabilité de réussite est très faible.

en fin de compte, si quelqu'un veut pirate de votre application (par opposition à l'utiliser), et c'est leur principal objectif. il n'y a rien que vous puissiez faire pour les arrêter. C'est la nature du Logiciel; une fois que les fichiers qui composent votre produit sont sur l'ordinateur d'un utilisateur, ils sera être en mesure de faire avec eux comme ils le souhaitent. Cela est particulièrement pertinent dans les environnements gérés comme Java ou .NET , mais il s'applique certainement au code natif ainsi. Le temps est de leur côté, et suffisamment de temps toute sécurité numérique peut être rompu.

puisque vous ne pouvez pas empêcher les utilisateurs de pirater votre produit, votre meilleur plan d'action est d'engager cette classe d'utilisateurs d'une manière les utilisations à votre avantage. Il est souvent possible de les mettre à travailler pour vous plutôt que contre vous. Avec cela à l'esprit, quelle que soit votre application, c'est probablement la peine de garder un libre version qui est presque entièrement fonctionnelle et n'expire pas. La différence entre une étiquette de Prix US$1 et gratuit est énorme, si pour aucune autre raison que le client n'a pas à vous faire confiance avec leur carte de crédit. Une édition gratuite de votre produit ne tuera pas seulement efficacement la distribution piratée (pourquoi risquer une version piratée alors que vous pouvez être légitime pour le même prix?), il a le potentiel pour élargir votre public.

Le résultat est que vous pouvez besoin d'augmenter le prix de l'édition payante, de sorte qu'à la fin au lieu de 2.000 utilisateurs à 20 $chacun, vous avez 100.000 utilisateurs gratuits, dont 500 sont prêts à payer 99 $pour l'édition "professionnelle". Cela vous rapporte plus d'argent que si vous avez passé un tas de temps à verrouiller votre produit. Plus que cela, vous pouvez engager ces utilisateurs libres et tirer parti de la relation de plusieurs façons importantes.

l'Un est le soutien. Un pessimiste profiterait de cette occasion pour se plaindre de la augmentation du coût de support de 100.000 utilisateurs libres, mais quelque chose d'étonnant se produit à la place: votre produit devient largement auto-supportant. Vous voyez tout le temps avec de grands projets open source qui n'ont pas d'argent pour les frais de soutien. Les utilisateurs vont faire en sorte que cela se concrétise.

les utilisateurs libres ont généralement des attentes de soutien réduites au départ, et pour de bonnes raisons. Tout ce que vous avez à faire est de marquer l'édition gratuite comme seule qualification pour le soutien communautaire et de mettre en place un forum en ligne modéré par les utilisateurs à cette fin. Votre base de connaissances de soutien est Auto-Génératrice, et les utilisateurs avancés guideront ceux qui ont besoin de main supplémentaire tenant en votre nom. Plus important encore, cela vous permettra d'identifier et de corriger les bogues plus rapidement, ce qui améliorera en fin de compte la qualité de votre produit et réduira les coûts d'assistance totaux. Cela n'était pas possible auparavant parce que votre base d'utilisateurs n'était pas assez grande, mais quand vous traitez les utilisateurs libres comme des clients, il peut fonctionner très bien.

un autre est la rétroaction. En regardant votre forum, Vous apprenez des idées d'amélioration importantes que vous n'avez peut-être jamais envisagé autrement. Cela peut vous permettre en fin de compte de transformer plus de vos utilisateurs libres En utilisateurs payés et de créer un produit plus convaincant qui attirera un public encore plus grand.

enfin, vous devez envisager le marketing. Tous ces utilisateurs sont maintenant les fans plutôt que des adversaires, et ils agiront en conséquence. Non seulement cela, mais quand vient le temps de publier votre prochaine version ces utilisateurs auront tous passé par votre canal de distribution approuvé, plutôt que d'un autre mécanisme inconnu. Cela signifie pour votre prochaine version que vous commencez connecté avec un public plus grand, très intéressé et de soutien.

les meilleures fonctionnalités à réserver pour l'Édition Professionnelle sont des outils visant à faciliter le déploiement et la gestion de l'entreprise. Un pirate ne verra pas ça comme une raison assez convaincante pour le pirater pour son propre utiliser, mais pour une entreprise qui cherche à acheter 300 licences et de le faire sortir de l'entreprise, il s'agit d'un must-have. Bien sûr, l'édition professionnelle sera piraté de toute façon, mais encore une fois: ne vous inquiétez pas parce que vous ne seriez probablement pas en mesure de vendre le produit à ces pirates, peu importe ce que vous avez fait, donc il ne vous coûte tout revenus.

alors que psychologiquement il peut être difficile de donner votre produit autant, j'espère que vous pouvez comprendre comment il est vraiment la meilleure façon d'aller. Pas seulement cela, c'est la seule façon d'aller dans le long terme. Je sais que quelqu'un pense qu'il ne veut pas le faire de cette façon. Après tout, ils se débrouillent très bien en vendant leur produit verrouillé à 20 $pendant des années. Mais c'est tout simplement dommage, parce que si vous ne le faites pas de cette façon, éventuellement quelqu'un d'autre sera . Et leur produit sera juste aussi bon que le vôtre, ou assez près qu'elles le peuvent affirmant que. Puis tout d'un coup votre prix ça semble scandaleux, les ventes chutent de façon spectaculaire, et il n'y a rien d'autre que vous puissiez faire. Vous pouvez opter pour un niveau intermédiaire supplémentaire si vous le DEVEZ, mais il est peu probable de vous aider.

254
répondu Joel Coehoorn 2014-04-15 15:57:36

d'après mon expérience, rendre votre application ou votre bibliothèque plus difficile à déchiffrer blesse vos clients honnêtes tout en retardant légèrement ceux qui sont malhonnêtes. Concentrez-vous sur la fabrication d'un grand produit à faible frottement au lieu de mettre beaucoup d'efforts pour retarder l'inévitable.

44
répondu Kent Boogaart 2011-09-27 14:54:00

Un secret que vous partager avec beaucoup de gens n'est pas un secret. Si vous avez des choses secrètes dans votre code, l'obscurcir n'est pas une protection; il suffit de le désobuser une fois . Si vous avez un secret que vous ne voulez pas partager avec vos clients, alors ne le partagez pas avec vos clients . Écrivez votre code comme un service web et gardez votre code super secret sur votre propre serveur, où vous seul pouvez le voir.

36
répondu Eric Lippert 2010-02-21 06:13:52

en gros, il y a trois groupes de personnes là-bas.

  • ceux qui n'achèteront pas votre logiciel et recourront à des fissures, ou s'ils n'en trouvent pas, n'utiliseront pas du tout votre logiciel. Ne vous attendez pas à gagner de l'argent de ce groupe. Ils comptent soit sur leurs propres compétences ou sur des crackers (qui ont tendance à prioriser leur temps en fonction de votre utilité et de la taille de votre auditoire. Le plus utile, le plus vite qu'une fissure sera disponible).

  • groupe d'utilisateurs légitimes qui achèteront (paieront) votre logiciel, quel que soit le mécanisme de protection que vous utilisez. Ne rendez pas la vie difficile à vos utilisateurs légitimes en utilisant un mécanisme de protection élaboré puisqu'ils vont payer pour cela dans tous les cas. Un complexe mécanisme de protection peuvent facilement gâcher l'expérience utilisateur et vous ne voulez pas que cela arrive à ce groupe. Personnellement, je voterais contre toute solution matérielle, ce qui ajoute à la le coût de votre logiciel.

  • une minorité qui ne recourra pas à la fissuration "non éthique" et paiera pour votre logiciel parce que ses caractéristiques sont protégées par un mécanisme de licence. Vous ne voulez probablement pas rendre excessivement facile pour ce groupe de contourner votre protection. Cependant, tous les efforts que vous consacrez à la protection de votre logiciel seront récompensés, selon la taille de ce groupe de personnes. Cela dépend entièrement de la le type de logiciel que vous construisez.

étant donné ce que vous avez dit, si vous pensez qu'il y a une minorité assez importante qui peut être poussée à acheter votre logiciel, allez de l'avant et mettez en œuvre une certaine forme de protection. Pensez à combien d'argent vous pouvez gagner à partir de cette minorité par rapport au temps que vous passez à travailler sur la protection, ou le montant que vous dépensez sur une tierce partie Protection API/outil.

si vous souhaitez mettre en œuvre une solution de votre propre, l'utilisation de la cryptographie à clé publique est un bon moyen (par opposition à des algorithmes symétriques) pour empêcher les piratages faciles. Vous pourriez par exemple signer numériquement votre licence (numéro de série, ou fichier de licence). La seule façon de contourner cela serait alors de décompiler, Modifier et recompiler le code (ce que vous pourriez rendre plus difficile en utilisant des techniques telles que celles suggérées dans la réponse de Simucal).

20
répondu Mystic 2016-02-21 06:32:01

vous ne pouvez pas empêcher les gens de cracker votre logiciel.

cependant, vous pouvez les faire créer des fissures qui nuiront moins à vos ventes. Les générateurs de clés qui peuvent émettre un code d'enregistrement valide pour votre logiciel sont bien pires que les simples correctifs qui suppriment les incitatifs d'enregistrement de votre logiciel. C'est parce qu'une fissure ne fonctionnera que pour une version logicielle et cessera de fonctionner avec la prochaine mise à jour logicielle que vous lancerez. Le générateur de clés continuera à travaillez jusqu'à ce que vous changiez votre algorithme de clé d'enregistrement et c'est quelque chose que vous ne voulez pas faire souvent parce qu'il va repousser vos clients honnêtes.

donc, si vous êtes à la recherche d'une méthode pour lutter contre les générateurs de clés illégaux pour votre logiciel et vous ne voulez pas utiliser le cryptage assymétrique en raison de la longueur des codes d'enregistrement que cela génère, vous pourriez avoir un regard sur la vérification partielle des clés.

vérification partielle des clés s'assure que chaque keygenerator ne fonctionne que pour une version particulière de votre logiciel. Fondamentalement, ce que vous faites est de s'assurer que chaque version de votre logiciel seulement des liens avec le code pour vérifier certains chiffres du code d'enregistrement. Quels chiffres sont exactement aléatoires, donc les pirates devront Inverser de nombreuses versions différentes de votre logiciel et combiner tout cela dans un générateur de clés afin de libérer un générateur de clés qui fonctionne pour toutes les versions de votre logiciel.

si vous publier de nouvelles versions de logiciels sur une base régulière, cela conduit à de nombreux générateurs de clés répartis sur toutes sortes d'archives de piratage de logiciels qui ne fonctionnent plus. Les pirates de logiciels potentiels cherchent généralement une fissure ou un keygen pour la dernière version, de sorte qu'ils vont probablement essayer quelques-uns de ceux-ci et abandonner éventuellement.

j'ai utilisé la vérification partielle des clés dans mes nouveaux jeux shareware (C++) et cela a été très efficace. Avant nous avions beaucoup de problèmes avec des générateurs-clés que nous ne pouvions pas combattre. Après cela, il y avait beaucoup de fissures et Quelques générateurs de clés qui fonctionnaient seulement pour cette version particulière du jeu, mais aucun générateur de clés qui fonctionnerait avec toutes les versions. Nous avons régulièrement publié des mises à jour très mineures du jeu et pour rendre toutes les fissures existantes inutiles.

Il semble y avoir une source ouverte .NET framework pour une partie de la Vérification de la Clé , bien que je ne l'ai pas essayé.

19
répondu Adrian Grigore 2009-09-14 08:09:59
  • utilisez la mise à jour en ligne pour bloquer les copies non autorisées.

  • vérifiez le numéro de série de différents modules de votre application et n'utilisez pas un seul appel de fonction pour faire la vérification (de sorte que les pirates ne peuvent pas contourner la vérification facilement).

  • non seulement vérifier le numéro de série à démarrage, faire la vérification pendant sauvegarde des données, faites - le tous les vendredis en soirée, il ne lorsque l'utilisateur est inactif ...

  • vérifier la vérification du dossier de demande somme, stockez votre somme de chèque de sécurité dans différents endroits.

  • ne va pas trop loin sur ce genre de astuces, assurez-vous de votre application ne jamais planter/obtenir en dysfonctionnement lors de la vérification du code d'enregistrement.

  • Construire une application utile pour les utilisateurs beaucoup plus important que de faire un

    incassable binaire pour les craquelins.

16
répondu rIPPER 2009-06-26 11:36:53

vous pouvez..

Microsoft SLP Services Inishtech's Software Potential offre la possibilité d'aider à protéger le code sans affecter la fonctionnalité de vos applications.

mise à jour: (divulgation: je travaille sur Eazfuscator.NET) What makes Microsoft SLP Services Software Potential different est la capacité de virtualiser le code, donc vous certainement peut . Plusieurs années se sont écoulées depuis que la question a été posée à l'origine; aujourd'hui, il y a plus de produits disponibles qui fonctionnent également sur une base similaire tels que:

14
répondu ogggre 2014-10-21 11:21:48

réflecteur de réseau ne peut ouvrir que le" code géré "qui signifie essentiellement "code réseau". Donc vous ne pouvez pas l'utiliser pour démonter les fichiers COM DLL, natif c++, classique Visual Basic 6.0 code, etc. La structure du code compilé. net le rend très pratique, portable, découvrable, vérifiable, etc. .net Reflector en profite pour vous permettre d'examiner les assemblages compilés, mais les décomposeurs et les désassembleurs ne sont en aucun cas spécifiques à .NET et ont été autour tant que les compilateurs ont été autour.

vous pouvez utiliser des obfuscators pour rendre le code plus difficile à lire, mais vous ne pouvez pas exactement l'empêcher d'être décomposé Sans également le rendre illisible à .NET. Il ya une poignée de produits là-bas (généralement coûteux) qui prétendent "lier" votre application de code géré dans une application de code natif, mais même si ceux-ci fonctionnent effectivement, une personne déterminée trouvera toujours un moyen.

quand il s'agit d'obscurcissement cependant, vous obtenez ce que vous payez. Donc, si votre code est tellement propriétaire que vous devez aller si loin pour le protéger, vous devriez être prêt à investir de l'argent dans un bon brouilleur.

cependant, au cours de mes 15 années d'expérience dans la rédaction de code, j'ai réalisé qu'être surprotecteur de votre code source est une perte de temps et n'a que peu d'avantages. Juste essayer de lire le code source original sans supporter de la documentation, des commentaires, etc. il peut être très difficile à comprendre. Ajoutez à cela les noms de variables insensées que les décomposeurs inventent et le code spaghetti que les brouilleurs modernes créent - vous n'avez probablement pas à vous soucier trop des gens qui volent votre propriété intellectuelle.

10
répondu Josh Einstein 2013-02-24 10:58:51

si vous voulez que les gens puissent exécuter votre code (et si vous ne le faites pas, alors pourquoi l'avez-vous écrit en premier lieu?), puis leur PROCESSEUR doit être capable d'exécuter votre code. Pour pouvoir exécuter le code, le CPU doit être capable de comprendre il.

puisque les CPU sont muets, et les humains ne le sont pas, cela signifie que les humains peuvent comprendre le code aussi bien.

il n'y a qu'un seul moyen d'être sûr que vos utilisateurs ne recevez pas votre code: ne leur donnez pas votre code.

cela peut être réalisé de deux façons: logiciel en tant que service (SaaS), c'est-à-dire que vous exécutez votre logiciel sur votre serveur et ne laissez vos utilisateurs y accéder à distance. C'est le modèle que Stack Overflow utilise, par exemple. Je suis sûr que le débordement de la pile n'obscurcit pas leur code, mais on ne peut pas le décompiler.

l'autre voie est le modèle d'appareil: au lieu de donner votre code à vos utilisateurs, vous leur donnez un ordinateur contenant le code. C'est le modèle que les consoles de jeu, la plupart des téléphones mobiles et TiVo utiliser. Notez que cela ne fonctionne que si vous " possédez "l'intégralité du chemin d'exécution: vous devez construire votre propre CPU, votre propre ordinateur, écrire votre propre système d'exploitation et votre propre implémentation CLI . Ensuite, et seulement alors pouvez-vous protéger votre code. (Mais la note que même l'erreur la plus petite rendra toutes vos protections inutiles. Microsoft, Apple, Sony, l'industrie de la musique et l'industrie du cinéma peut en témoigner.)

Ou, vous pouvez simplement ne rien faire, ce qui signifie que votre code sera automatiquement protégée par le droit d'auteur.

9
répondu Jörg W Mittag 2013-02-24 11:08:17

ça vaut vraiment le coup? Chaque mécanisme de protection peut être brisé avec une détermination suffisante. Tenez compte de votre marché, du prix du produit, du nombre de clients, etc.

Si vous voulez quelque chose de plus fiable, puis descendre le chemin de touches matérielles, mais c'est plutôt gênant (pour l'utilisateur) et plus cher. Solutions logicielles serait probablement une perte de temps et de ressources, et la seule chose qu'ils vous donnent est le faux sentiment de "sécurité".

encore quelques idées (aucune n'est parfaite, car il n'y en a pas).

  • AntiDuplicate
  • changer le langage, utiliser les bons trucs que les auteurs de Skype utilisé
  • serveur de licence

Et ne perdez pas trop de temps, parce que les pirates ont beaucoup d'expérience avec les techniques typiques et sont à quelques pas devant vous. Sauf si vous souhaitez utiliser beaucoup de ressources, probablement changer de langage de programmation (faire du Skype façon).

8
répondu Jeff Atwood 2013-02-24 08:49:15

malheureusement, vous n'allez pas vous enfuir. Votre meilleur pari est d'écrire votre code en C et P/Invoke .

il y a un petit hic-22, quelqu'un pourrait simplement décompiler votre application en CIL et tuer n'importe quel code de vérification/activation (par exemple, l'appel à votre bibliothèque C). Rappelez - vous que les applications qui sont écrites en C sont également rétro-conçu par les pirates plus persistants (il suffit de regarder comment rapide jeux sont fissurés de ces jours). Rien ne protégera votre application.

à la fin il fonctionne beaucoup comme votre maison, le protéger assez bien de sorte qu'il est trop d'effort (code spaghetti aiderait ici) et de sorte que l'agresseur se déplace juste sur votre voisin de porte (concurrence :) ). Regardez Windows Vista, il doit y avoir 10 façons différentes de le casser.

il y a des paquets là-bas qui crypteront votre fichier EXE et le décrypteront quand le l'utilisateur est autorisé à l'utiliser, mais encore une fois, c'est à l'aide d'une solution générique qui a sans aucun doute été fissuré.

les mécanismes D'Activation et d'enregistrement sont destinés à la "moyenne Joe:" les gens qui n'ont pas assez de connaissances technologiques pour la contourner (ou pour cette question savent qu'ils peuvent La contourner). Ne vous embêtez pas avec des craquelins, ils ont beaucoup trop de temps sur leurs mains.

8
répondu Jonathan C Dickinson 2013-02-24 09:09:45

en plus de la protection d'achat, vous (ou vos développeurs) pouvez apprendre à copier-protéger.

ce sont des idées:

d'abord, essayez d'écrire un programme qui s'écrit à la console. C'est un problème connu. Le but principal de cette tâche est de s'exercer à écrire du code d'auto-référence.

Deuxièmement, vous avez besoin de développer une technologie qui va réécrire un peu de code d'une manière fiable sur d'autres méthodes ' CIL .

vous pouvez écrire une machine virtuelle (encore dans .NET ). Et mets du code là-dedans. Finalement, la machine virtuelle exécute une autre machine virtuelle qui exécute le code. C'est pour une partie des fonctions rarement appelées pour ne pas trop ralentir la performance.

réécrit une partie de la logique en C++ / CLI, et mélange le code géré et non géré. Cela va durcir le démontage. Dans ce cas, n'oubliez pas de fournir x64 binaires aussi.

7
répondu modosansreves 2013-02-24 09:16:27

Oui. Il est vrai. .net code est extrêmement facile à réinterroger si le code n'est pas brouillé.

Obfuscation va ajouter une couche de gêne pour les gens qui essaient de rétro-concevoir votre logiciel. Selon la version que vous obtenez, vous obtiendrez différents niveaux de protection.

Visual Studio inclut une version de Dotfuscator . Puisqu'il s'agit d'une version empaquetée, vous n'obtiendrez certainement pas la plus forte confusion possible. Si vous regardez leurs listes de fonctionnalités, vous verrez exactement ce que vous manquez (et exactement ce que l'application va faire pour rendre votre code plus sûr).

il y a quelques autres obfuscators free ou open source. net dehors (mais je ne peux pas commenter sur la qualité ou les diverses méthodes qu'ils utilisent):

à la fin, rien n'est parfait. Si quelqu'un veut vraiment voir comment votre logiciel fonctionne, ils le feront.

6
répondu Justin Niessner 2013-02-24 11:09:30

Eh bien, vous ne pouvez pas entièrement protéger votre produit d'être fissuré, mais vous pouvez maximiser/améliorer les niveaux de sécurité et de le rendre un peu trop difficile pour être fissuré par des débutants et des crackers intermédiaires.

Mais gardez à l'esprit que rien n'est inviolable, seul le logiciel côté serveur est bien protégé et ne peut pas être déchiffré. Quoi qu'il en soit, pour améliorer les niveaux de sécurité dans votre application, vous pouvez faire quelques étapes simples pour empêcher certains crackers "pas tous" de se fissurer vos applications. Ces mesures vont rendre ces crackers fous et peut-être désespérés:

ce sont juste des méthodes simples pour empêcher les débutants et les crackers intermédiaires de cracker votre application. Si vous avez plus d'idées pour protéger votre application, n'hésitez pas à les mettre en œuvre. Ça va juste rendre la vie de crackers dure, et ils vont être frustrés, et finalement ils vont laisser votre candidature, parce que ça ne vaut pas le coup.

enfin, vous devez également envisager de passer votre temps à coder des applications de bonne qualité. Ne perdez pas votre temps à coder des couches de sécurité compliquées. Si un pirate veut casser votre application il/elle va faire n'importe ce que vous faites...

maintenant, allez mettre en place quelques jouets pour les crackers...

6
répondu Robin Van Persi 2013-02-24 11:16:23

il y a Salamander , qui est un compilateur .net natif de Remotesoft qui peut déployer des applications sans le .net framework. Je ne sais pas si elle est à la hauteur de ses revendications.

5
répondu Matthew Olenik 2009-02-04 20:04:21

si Microsoft pouvait trouver une solution, nous n'aurons pas de versions de Windows piratées, donc rien n'est très sûr. Voici quelques questions similaires de Stack Overflow et vous pouvez mettre en œuvre votre propre façon de les protéger. Si vous lancez différentes versions, vous pouvez adopter différentes techniques pour différentes versions, donc au moment où la première est fissurée, la seconde peut prendre le relais.

5
répondu Shoban 2017-05-23 12:18:24

réacteur net

mise à Jour

Jared a souligné que de4dot affirme pouvoir le décompiler.

. le réacteur. NET fournit une protection complète pour votre propriété intellectuelle sensible en convertissant vos assemblages. net en processus non gérés qui ne peuvent pas être compris comme CIL, et qu'aucun outil existant ne peut décompiler. Les pirates n'ont accès à aucune forme intelligible de votre source.

puissantes et flexibles, les fonctions D'autorisation de réacteur.Net vous permettent de faire respecter vos conditions de licence et de protéger votre flux de revenus en utilisant des serrures matérielles et logicielles. Le gestionnaire de licences peut construire des licences d'essai ou permanentes, en quelques secondes. Un kit de développement de logiciel (SDK) entièrement documenté, avec des exemples, vous permet d'appeler le système de licence directement à partir de votre code, vous permettant de créer des extensions personnalisées au système de licence.

5
répondu loraderon 2013-11-18 09:57:16

Voici une idée: vous pourriez avoir un serveur hébergé par votre entreprise auquel toutes les instances de votre logiciel doivent se connecter. Le simple fait de les connecter et de vérifier une clé d'enregistrement n'est pas suffisant -- ils retireront simplement le chèque. En plus de la vérification des clés, vous devez également faire effectuer par le serveur une tâche vitale que le client ne peut pas effectuer lui-même, il est donc impossible de supprimer. Cela signifierait probablement beaucoup de traitement lourd de la part de votre serveur, mais il cela rendrait votre logiciel difficile à voler, et en supposant que vous avez un bon schéma de clés (vérifier la propriété, etc), les clés seront également difficiles à voler. Ceci est probablement plus invasif que vous le voulez, car il faudra que vos utilisateurs soient connectés à internet pour utiliser votre logiciel.

4
répondu rmeador 2009-03-16 17:12:41

Tout ce qui tourne sur le client peut être décomposé et fissuré. L'Obfusification rend les choses plus difficiles. Je ne connais pas votre candidature, mais 99% du temps, Je ne pense pas que ça en vaille la peine.

3
répondu Kendrick 2010-06-22 13:13:45

obscurcissez le code! Il y a un exemple dans Obscurcissement de Code C# .

3
répondu ligaoren 2013-02-24 11:05:25

gardez à l'esprit que 99%+ de vos utilisateurs ne seront pas intéressés à examiner votre exécutable pour voir comment il fonctionne.

étant donné que si peu de gens vont même se donner la peine d'essayer et que la plupart des brouilleurs peuvent être travaillés, est-ce que cela vaut la peine de votre temps et de vos efforts?

Vous feriez mieux d'investir du temps dans l'amélioration de votre produit, de sorte que plus de gens veulent l'utiliser.

2
répondu ChrisF 2010-06-22 13:16:44

Juste pour ajouter un avertissement: si vous allez utiliser l'obfuscation, vérifier que tout fonctionne toujours! L'obscurcissement peut changer des choses comme les noms de classe et de méthode. Donc si vous utilisez la réflexion pour appeler certaines méthodes et/ou classes (comme dans une architecture de plugin) votre application pourrait échouer Après avoir obscurci. De plus, les empilages peuvent être inutiles pour repérer les erreurs.

2
répondu Hans Kesting 2010-06-22 13:20:18

si elle est écrite en .NET et compilée en CIL , elle peut être réfléchie. Si la sécurité est un problème et qu'il faut éviter toute confusion, alors je recommande d'écrire votre demande en utilisant un langage non géré, qui est, par nature, plus difficile à inverser.

2
répondu Peter Mortensen 2013-02-24 08:51:06

comment s'assurer que la demande n'est pas altérée, et comment s'assurer que le mécanisme d'enregistrement ne peut pas être inversé.

tous les deux ont la même réponse très simple: ne pas distribuer de code objet à des parties non fiables, comme (apparemment) vos clients. Qu'il soit possible d'héberger l'application sur vos machines dépend seulement de ce qu'elle fait.

si ce n'est pas un application , peut-être Pouvez-vous autoriser SSH login avec X forwarding à un serveur d'application (ou Connexion Bureau À Distance , je suppose, Pour Windows).

si vous donnez le code objet à des personnes de type nerd, et qu'ils pensent que votre programme pourrait être amusant à craquer, il will obtenir craqué. Pas moyen de contourner cela.

si vous ne me croyez pas, faites remarquer une application très médiatisée: n'a pas été fissuré ou piratés.

si vous allez avec les clés matérielles, cela rendra la production plus chère et vos utilisateurs vont vous détester pour cela. C'est une vraie chienne de ramper sur le sol à brancher et débrancher vos 27 bidules USB parce que les fabricants de logiciels ne vous font pas confiance (j'imagine).

il y a des paquets qui chiffrent votre EXE et le déchiffrent lorsque l'utilisateur est autorisé à l'utiliser.""

bien sûr, la solution est de casser le test "can-I-use-it" pour qu'il retourne toujours vrai.

un mauvais truc pourrait être d'utiliser les valeurs des octets des opcodes qui effectuent le test ailleurs dans le programme d'une manière sale qui va faire planer le programme avec une forte probabilité à moins que la valeur soit juste. Il vous rend lié à une architecture particulière, bien que: - (

2
répondu Jonas Kölker 2013-02-24 09:12:13

il suffit de faire une bonne application et le code un système de protection simple. Peu importe la protection que vous choisissez, elle sera inversée... Alors ne perdez pas trop de temps/argent.

2
répondu knoopx 2013-02-24 09:17:01

il est impossible de sécuriser complètement une application, désolé.

2
répondu Fredou 2013-02-24 09:17:22

quand il s'agit de .NET, si vous libérez une application Windows Forms (ou n'importe quelle application où le client a le fichier exécutable Portable), il est possible de la fissurer.

si vous voulez vous en tenir à .NET et que vous voulez réduire au minimum les chances d'avoir votre code source pris, alors vous pouvez envisager de le déployer comme un ASP.NET application sur un serveur web, au lieu d'en faire une application Windows Forms.

2
répondu Peter Mortensen 2013-02-24 10:38:19

franchement, parfois nous avons besoin d'obscurcir le code (par exemple, enregistrer les classes de licence et ainsi de suite). Dans ce cas, votre projet n'est pas libre. IMO, tu devrais payer pour un bon obstructeur.

Dotfuscator cache votre code et . le réflecteur net affiche une erreur lorsque vous tentez de le décompiler.

2
répondu Peter Mortensen 2013-02-24 11:03:28

je peux vous recommander d'utiliser Obfuscator .

2
répondu masoud ramezani 2013-02-24 11:04:32