This post originated from an RSS feed registered with .NET Buzz
by -.
Original Post: Ich werde beklaut!
Feed Title: Norbert Eder - Living .NET
Feed URL: http://feeds.feedburner.com/NorbertEder-Livingnet
Feed Description: Copyright (c)2005, 2006 by Norbert Eder
Das trifft wohl nicht oft zu. Aber sehr viele Softwareunternehmen haben Angst, beklaut zu werden. Beklaut hinsichtlich Ideen, Sourcecode oder Ähnlichem.
Fast täglich werde ich von unterschiedlichsten Personen darauf angesprochen - meist hinsichtlich WPF - wie man sich effektiv davor schützen kann. Sind erst mal die grundlegenden Informationen bezogen, stellt sich schnell heraus, dass in den meisten Fällen bereits Tools (Obfuscator etc.) eingesetzt werden und das eigentliche Problem ganz wo anders liegt - nämlich in der immerwährenden Angst.
Natürlich, seit es Software gibt, wurde von der Konkurrenz abgekupfert und geklaut. Das wird wohl auch noch so bleiben und kann wohl nie gänzlich ausgeschlossen werden.
Die mir gestellten Fragen bezogen sich meist auf einfache Dinge: Styles, Templates. Und ja, diese Informationen können sehr einfach aus einer Assembly bezogen werden. Alles was man dazu braucht ist der .NET Reflector und das Add-In Baml-Viewer.
Sehen wir uns dies anhand eines Beispiels an. Gegeben sei eine kleine Anwendung, die einen einzigen Button enthält. In der App.xaml wird global für alle Buttons ein Style definiert:
Nach dem Kompilieren der Anwendung, wird die erstellte Assembly (in diesem Fall die die ausführbare Anwendung) im Reflector geöffnet. Innerhalb der Ressourcen finden sich die generierten Ressourcen für unsere Anwendung. In <i>AssemblyName</i>.g.resources auch die zu BAML kompilierten XAML-Dateien:
Mit installiertem BamlViewer kann nun über das Tools-Menü eben dieser aufgerufen werden. Als Ergebnis werden zwei zusätzliche Bereiche angezeigt. Im ersten werden die enthaltenen Baml-Dateien gezeigt. Bei Klick auf eine dieser Dateien wird das XAML im zweiten Bereich gezeigt:
Damit ist es nun ein Leichtes, um an fremde Styles, Templates und dergleichen heran zu kommen. Dies ändert sich auch nicht, wenn beispielsweise ein Tool á la den Dotfuscator verwendet wird. Das XAML bleibt vor diversen Änderungen unberührt. Zudem sollte mit Obfuscatoren und XAML besonders vorsichtig umgegangen werden. Typen, die von XAML aus benötigt werden, sollten beispielsweise nicht umbenannt werden, da diese anschließend nicht mehr gefunden werden können. Lediglich {smartassembly} bietet kleine Unterstützungen in diese Richtung an.
Generell ist anzumerken, dass es zwar sicherlich einige geben wird, die sich hart erarbeitete Styles von anderen "besorgen" werden. Der Punkt ist aber weiterhin die Businesslogik. Diese entsteht oft in Mannmonaten bzw. -jahren und kann nicht so einfach analysiert werden. Im der dafür notwendigen Zeit ist der Hersteller ein gutes Stück weiter und der Erfolg des Reengineerings hält sich somit in Grenzen.
Es verhält sich also ähnlich zu Websites: Auch hier können Styles und die notwendigen Images sehr schnell bezogen werden - die rechtlichen Konsequenzen inklusive. Das Layout macht aber noch keine Anwendung ...