2010-11-24 30 views
4

Que pensez-vous de renommer toutes mes classes, propriétés, méthodes, etc pour des choses comme _, __ ou ___? Dans quelle mesure serait-ce proche de ce qu'un obfuscateur C# (comme Dotfuscator ou Eazfuscator) ferait à mon application, et quoi d'autre pourrais-je faire manuellement (sur un laps de temps raisonnable) pour rendre mon code aussi obscur que possible? La raison pour laquelle je veux faire ceci est parce qu'un obfuscator gâchera ma liaison de données et parce qu'ils ne obscurcissent pas les applications publiées avec ClickOnce (à moins que je fasse quelque chose d'expert avec des manifestes et d'autres choses que je ne sais pas faire et que personne ne semble vraiment savoir si ça marche toujours).Code manuellement obfusant?

+1

je pense qu'il semble comme un diable de beaucoup de travail. –

+2

Il y a pas mal d'obfuscateurs là-bas. Êtes-vous sûr qu'aucun d'entre eux ne répond à vos besoins? L'obscurcissement manuel est très sujette aux erreurs ... – SteveCav

+1

Je plains le dev qui va maintenir une telle monstruosité. Il va certainement faire un bon article sur le DailyWTF.com un certain temps. –

Répondre

2

Vous devriez obscurcir votre application. Pour éviter toute erreur de liaison de données, un certain nombre d'Obfuscators fournissent désormais des paramètres d'obfuscation silverlight/wpf qui vous aideront à éviter ces erreurs. Après l'obfuscation, vous pouvez créer un programme d'installation clickonce en utilisant mage.exe
http://msdn.microsoft.com/en-us/library/xc3tc5xx.aspx
Sérieusement NE PAS renommer. Vous rendez votre vie plus difficile. En fait, aussi difficile qu'ils soient, vous ne voulez pas voler votre code.
Son juste un fichier bat pour faire le clickonce après une construction.

+0

Ceci est une application WinForms. – Juan

+0

Un simple paramètre pour désactiver le changement de nom de classe/méthode ferait l'affaire. L'obfuscator va quand même: obscurcir le code à l'intérieur des méthodes. Il y a aussi des paramètres (par exemple, l'emballage dans un exécutable natif) qui rendront votre code impossible à ouvrir dans le réflecteur (qui est l'outil principal utilisé par les yeux indiscrets). – basarat

+1

Je veux juste rappeler que la version commerciale de Dotfuscator va obscurcir vos applications ClickOnce facilement (et depuis plus d'un an). Il intègre la lecture, l'analyse et la réécriture des manifestes ClickOnce requis sans que vous ayez à revenir en arrière pour afficher les étapes de construction et mage. Vous pouvez obtenir un essai gratuit et l'essayer par vous-même. –

2

Voici une idée étrange pour vous. Je suppose que votre environnement de développement prend en charge le refactoring, et renommer les variables est certainement une opération de refactoring populaire. Voyez si vous pouvez écrire cela. Si vous ne pouvez pas, envisager quelque chose comme AutoIt. Voyez où cela se dirige? Exprimez votre renommage en terme d'opérations de refactoring, scriptez-les et faites-en une étape de pré-compilation. De cette façon, vous pouvez garder vos sources non brouillées, mais effectuer toutes les opérations d'obfuscation que vous voulez, et que vous savez fonctionneront.

+0

Oui, c'est un peu ce que j'avais en tête. Pas besoin de paniquer (@guys commentant sur ma question;)). Mais ma question n'est pas de savoir comment le faire, mais à quel point le résultat sera proche de ce que ferait un véritable obfuscateur. – Juan

1

Est-il absolument nécessaire de prendre en charge ClickOnce? Il existe d'autres façons de distribuer une application. Pensez à compiler le code, en utilisant l'obfuscateur de votre choix, puis en créant un programme d'installation en utilisant quelque chose comme Inno Setup.

Je vous recommande fortement de faire et non de renommer directement dans le code. Si vous devez suivre ce chemin, essayez de faire une copie du projet (une fois dans son état final), ouvrez la copie dans votre EDI et utilisez des outils de refactoring pour renommer les classes, les variables et les méthodes. Si vous ne faites pas de copie, votre code sera très difficile à modifier plus tard.

0

La version gratuite de Babel.NET a très bien fonctionné pour moi, elle a obscurci le code interne des fonctions et renommé toutes les classes et membres privés et internes. Nous utilisons la réflexion, la sérialisation et la liaison de données, et cela ne gâchait aucun de ceux-là.
Il prend également en charge l'intégration avec MSBuild qui, je crois, aiderait à gérer la génération postérieure ClickOnce.

2

La raison pour laquelle je veux faire est parce qu'un gâchis de volonté obfuscator mes de liaison de données

Je ne sais pas comment fonctionne votre-liaison de données, mais si vous coder en dur les noms de propriétés en tant que chaîne dans votre code source C#, alors je remplacerais les chaînes codées en dur par des lamdas pour identifier la propriété. C'est plus sympa refactoring aussi.

Get property name inside setter