2009-02-25 8 views
4

Je souhaite utiliser NGEN.EXE afin de générer des images natives de mes assemblys avant de créer mon programme d'installation. J'espère que cela gardera mes binaires Reflector -proof. Ai-je raison à ce sujet?Génération d'images natives en dehors du cache

Je viens de comprendre que toutes les images natives sont maintenant stockées dans le cache d'images natives. Est-il possible d'obtenir des binaires natifs que je peux ensuite empaqueter avec un installateur? D'un autre côté, est-il possible de se débarrasser des assemblages originaux après avoir généré les images natives? J'utilise une application qui utilise une clé codée en dur pour le cryptage lorsque je parle à un serveur. Avec .NET, il devient ridiculement facile pour les gens de mettre la main sur la clé.

Répondre

3

Ceci n'est pas vraiment supporté par NGEN et le framework .net, mais il existe des outils tiers qui peuvent le faire, google pour ".net linker".

Je recommande de ne pas le faire, MS ont des raisons valables de ne pas le soutenir.

+3

"Les MS ont des raisons valables de ne pas supporter cela." J'ai entendu ça un peu plus souvent que je le voudrais. Si seulement la SP me permettait de prendre les risques que j'ai envie de prendre, je pourrais quitter le travail un peu plus tôt chaque jour. –

+0

Certaines des raisons sont liées à la sécurité, si elles vous permettent de faire cela, vous pouvez contourner le système de sécurité. Net, maintenant vous pouvez être digne de confiance, mais si vous pouvez contourner le système, les méchants peuvent. – Nir

2

Vous ne pouvez pas envoyer uniquement l'image ngen de l'assemblage. Le moteur d'exécution nécessite toujours que l'assemblage réel existe même s'il en possède une image native. La raison en est que les métadonnées d'assemblage ne sont pas reportées sur l'image native.

+0

"La raison en est que les métadonnées d'assemblage ne sont pas reportées sur l'image native." C'est exactement ce que je veux. Une image native sans métadonnées. –

+0

Mais ce n'est pas ce que le CLR veut. CLR nécessite les métadonnées. Fondamentalement, des choses comme .NET linker n'utilisent pas directement le CLR. Ils ont en quelque sorte utilisé une version * piratée * pour fonctionner. –

5

Je peux voir plusieurs problèmes avec ce que vous essayez de réaliser.

1) Comme cela a été mentionné par @Mehrdad, l'assemblage est toujours requis pour les métadonnées, même s'il existe une image native.
2) Une image native n'est valide que sur la machine sur laquelle elle a été compilée. Le compilateur JIT effectue des optimisations qui normalement ne peuvent pas être effectuées car il connaît EXACTEMENT le matériel sur lequel le code devra fonctionner.
3) Même une image native peut être décompilée. C'est juste un peu plus facile de prendre un DLL géré. Pourriez-vous nous dire pourquoi voulez-vous cacher votre code source? A en juger par la rapidité avec laquelle chaque nouvelle version de WGA est piratée, je suppose que si votre logiciel est utile à distance, quelqu'un aura la clé et sur internet (ou p2p ou quoi que ce soit) dans les heures suivant chaque nouvelle version de votre logiciel, et ils vont être les gens qui sont très heureux de démonter une image native. Ou peut-être simplement lire le code de la machine :)
Mon approche personnelle serait de s'assurer que votre application fonctionne bien et est à un prix raisonnable. Les honnêtes gens ne le voleront pas, les malhonnêtes trouveront un moyen, peu importe ce que vous faites. Ultimement, s'ils ont votre application à exécuter il n'y a rien que vous puissiez faire pour contrôler complètement ce qu'ils font avec, même si vous pouvez rendre plus difficile pour eux d'utiliser un réflecteur en utilisant un obfuscateur d'abord, mais à la fin c'est comme la vraie vie En fait, les serrures ne retiennent que les gens honnêtes.

Bien sûr, si vous pouvez déplacer une partie importante des fonctionnalités de votre application du client vers un service Web, vous avez plus de chance. Vous pouvez créer des comptes avec des noms d'utilisateur et des mots de passe pour les clients, l'application le demande lorsqu'elle est exécutée et l'utilise pour s'authentifier auprès du service Web. Si leur utilisation de cette application a expiré, le service Web refuse leur demande.

+0

"Une image native est uniquement valide sur la machine sur laquelle elle a été compilée." Nous pouvons gérer ce problème en appelant NGEN après l'installation. –

+1

"Même une image native peut être décompilée, il est juste un peu plus facile de prendre un DLL géré." À tout le moins, ce n'est pas aussi facile que d'ouvrir l'assemblage en utilisant Reflector. –

+0

Une partie de mon code est utilisée pour contacter un serveur de licences. Il utilise une clé de chiffrement codée en dur (un tableau d'octets) dans l'assemblage. Reflector met à nu tout le schéma de licence. Clés, emplacements de registre, minuteries et tout. –

1

Il n'y a aucune raison d'utiliser une image native. Cet outil est fait pour le développement afin d'accélérer les choses. Ce n'est pas une application, c'est une image qui change tellement la CPU de l'ordinateur, la configuration Dot net rendra votre image non valide, donc ce n'est pas vraiment utilisable. Cracking votre logiciel est possible, tout logiciel est fissuré, il y a ceux qui ne l'étaient pas? ne se soucient pas de la piraterie, supposons qu'il existe :)

2

obtenir cette liste de logiciels:

  • {} Smartassembly
  • DeployLX CodeVeil
  • Dotfuscator .NET Obfuscator
  • Salamandre .NET Obfuscateur
  • Designs sémantiques: Obturateur de code source C#
  • Spices.Net
  • Thinstall
  • Demeanor pour
  • .NET
  • Reactor NET
  • IntelliLock
  • Eazfuscator.NET
  • SecureTeam CliSecure

Ce sont obfuscators + lieurs.

+0

Pourquoi les gens ont-ils oublié InishTech? Rappelez-vous le SLPS de Microsoft? Flexible, juste prix et très facile à intégrer. –

Questions connexes