2010-11-24 4 views
4

Was denkst du über das Umbenennen aller meiner Klassen, Eigenschaften, Methoden usw. in Sachen wie _, __ oder ___? Wie nah wäre das mit dem, was ein C# -Obfuscator (wie Dotfuscator oder Eazfuscator) mit meiner App machen würde, und was könnte ich sonst (in angemessener Zeit) manuell tun, um meinen Code so verschleiert wie möglich zu machen? Der Grund, warum ich dies tun möchte, ist, weil ein Obfuscator meine Datenbindung durcheinander bringt und weil sie nicht die mit ClickOnce veröffentlichten Apps verschleiert (es sei denn, ich mache Expertenwissen mit Manifesten und anderen Dingen, die ich nicht kann) und dass niemand wirklich sicher zu wissen scheint, ob es immer funktioniert).Manuell verschleiernden Code?

+1

ich denke, es wie ein Heck einer Menge Arbeit zu sein scheint. –

+2

Es gibt ziemlich viele Obfuscatoren da draußen. Sind Sie sicher, dass keiner von ihnen Ihre Bedürfnisse erfüllt? Manuelles Verschleiern ist sehr fehleranfällig ... – SteveCav

+1

Ich bemitleide den Entwickler, der solch eine Monstrosität aufrechterhalten wird. Es wird sicherlich einen großen Artikel auf dem DailyWTF.com einige Zeit machen. –

Antwort

2

Sie sollten Ihre Anwendung verschleiern. Um Datenbindungsfehler zu vermeiden, bieten nun eine Reihe von Obfuscatoren silverlight/wpf-Verschleierungsstandards an, die Ihnen helfen, diese Fehler zu vermeiden. Nach der Verschleierung können Sie einen Clickonce-Installer mit mage.exe
http://msdn.microsoft.com/en-us/library/xc3tc5xx.aspx
Ernsthaft machen Sie nicht die Umbenennung. Du machst dein Leben schwieriger. In der Tat so schwierig wie sie, du willst nicht deinen Code stehlen.
Es ist nur eine Fledermaus-Datei, um das Clickonce nach einem Build zu machen.

+0

Dies ist eine WinForms App. – Juan

+0

Eine einfache Einstellung zum Deaktivieren der Umbenennung von Klassen-/Methodennamen würde den Zweck erfüllen. Der Obfuscator wird immer noch: den Code innerhalb der Methoden verschleiern. Es gibt auch Einstellungen (z. B. Umbruch in einer nativen ausführbaren Datei), die dazu führen, dass Ihr Code im reflector nicht geöffnet werden kann (dies ist das primäre Werkzeug, das von neugierigen Blicken verwendet wird). – basarat

+1

Ich möchte nur darauf hinweisen, dass die kommerzielle Version von Dotfuscator Ihre ClickOnce-Anwendungen leicht verschleiern wird (und das seit über einem Jahr). Es integriert das Lesen, Parsen und Neuschreiben der erforderlichen ClickOnce-Manifeste, ohne dass Sie zu Post-Build-Schritten und -Mage zurückkehren müssen. Sie können eine kostenlose Testversion erhalten und es selbst ausprobieren. –

2

Hier ist eine seltsame Idee für Sie. Ich nehme an, Ihre Entwicklungsumgebung unterstützt Refactoring, und das Umbenennen von Variablen ist sicherlich eine beliebte Refactoring-Operation. Sehen Sie, ob Sie das skripten können. Wenn Sie nicht können, betrachten Sie so etwas wie AutoIt. Sehen Sie, wohin das führt? Drücken Sie Ihre Umbenennung in Bezug auf Refactoring-Operationen aus, skripten Sie sie und machen Sie dies zu einem Vorkompilierungsschritt.

Auf diese Weise können Sie Ihre Quellen unauffällig bewahren und dennoch alle gewünschten Verschleierungsoperationen ausführen, von denen Sie wissen, dass sie funktionieren.

+0

Ja, das ist irgendwie was ich im Sinn hatte. Kein Grund zum Ausrasten (@guys kommentiert meine Frage;)). Aber meine Frage ist wirklich nicht, wie man es macht, sondern wie nahe das, was ein echter Obfuscator macht, das Ergebnis wäre. – Juan

1

Ist die Unterstützung von ClickOnce unbedingt erforderlich? Es gibt andere Möglichkeiten, eine Anwendung zu verteilen. Erwägen Sie, den Code zu kompilieren, den Obfuscator Ihrer Wahl zu verwenden und dann ein Installationsprogramm zu erstellen, das etwa Inno Setup verwendet.

Ich empfehle Ihnen dringend nicht Sachen im Code direkt umbenennen. Wenn Sie diesem Pfad folgen müssen, erstellen Sie eine Kopie des Projekts (einmal im endgültigen Zustand), öffnen Sie die Kopie in Ihrer IDE und verwenden Sie Refactoringtools, um Klassen, Variablen und Methoden umzubenennen. Wenn Sie keine Kopie erstellen, ist es sehr schwer, den Code später zu ändern.

0

Die kostenlose Version von Babel.NET funktionierte ziemlich gut für mich, verschleierte den internen Code der Funktionen und benannte alle privaten und internen Klassen und Mitglieder. Wir verwenden Reflektion, Serialisierung und Datenbindung und es hat sich nicht mit irgendwelchen davon herumgeschlagen.
Es unterstützt auch die Integration mit MSBuild, die meiner Meinung nach helfen würde, mit der späteren ClickOnce-Generation umzugehen.

2

Der Grund, warum ich dies tun wollen ist, weil ein obfuscator Willen Chaos

ich Ihre Datenbindung funktioniert nicht weiß Bindung meiner Daten wie, aber wenn man hart-Codierung ist Eigenschaftsnamen als String in Ihrem C# -Quellcode, dann würde ich die hartcodierten Strings durch lamdas ersetzen, um die Eigenschaft zu identifizieren. Dies ist auch mehr Refactoring-freundlich.

Get property name inside setter