Praktische Erfahrungen gesucht: Kommerzielle C# Projekte und Codesicherheit...



  • Ich möchte mal speziell die Fragen, die kommerziell mit C# Programme erstellen. Wie haltet ihr das mit der Codesicherheit, verwendet ihr Obfuscatoren oder ähnliches? Oder vertraut ihr hier komplett euren Kunden? Reicht euch (sofern ihr sie verwendet) die kostenfreien Versionen, oder werden hier stärkere Obfuscatoren eingesetzt...



  • Hallo,

    wir setzen bei unserer Software aus dem Bereich Industrieautomatisierung überhaupt keine Obfuscatoren ein.

    Alle Low-Level Sachen, wie Protokolle, Regelalgorithmen, usw. sind in C++ geschrieben, teilweise mit Dongle geschützt. Diese werden über PInvoke oder C++/CLI angebunden.

    Wer unbedingt GUI Code, Datenbankexport oder XML-Verarbeitungslogik klauen will, hat damit sicher mehr Arbeit, als sie selbst neu zu schreiben. Da diese Sachen auf der C++ Logik und diese auf ausgewählter Hardware aufsetzen, hat er da auch nur begrenzte Möglichkeiten.

    Mir ist allerdings klar, dass dieser Ansatz nicht für alle Arten von Software tauglich ist.



  • Wir bauen Erweiterungen für Business Software und die sind in der Regel sehr spezialisiert, so dass praktisch niemand ausser dem Kunden direkt einen Verwendungszweck dafür hätte. Ich habe daher nur ein kleines Lizenzmodul in C++ geschrieben, der Rest ist jedoch ohne Obfuscation umgesetzt. Selbst mit dem besten Decompiler (.NET Reflector) kann man den generierten Code kaum mehr lesen, seit es LINQ und Lambda gibt.

    Mich würde es jedoch auch Wunder nehmen, was bei Projekten mit grösseren Zielgruppen Best Practice ist.



  • Die Firmenleitung wurde auf das Problem hingewiesen, hat aber kein Handeln veranlasst. Also arbeiten wir ohne Obfuscatoren.

    Unsere SW ist an HW gebunden, weshalb relativ wenig Gefahr besteht, dass jemand etwas Nützliches mit unserem Code anstellen könnte. Falls doch würde es relativ schnell auffallen, da wir eine technische Nische bedienen und wenig Konkurrenz haben, auch wenn das Zeug weltweit vertrieben wird.

    Ich werde mich aber in absehbarer Zeit trotzdem nochmal für die Anschaffung eines starken Obfuscators einsetzen, da ein paar Neuentwicklungen auch in anderen Bereichen eingesetzt werden könnten.


  • Administrator

    Kein Obfuscator.

    Der Grund liegt in einer einfachen Überlegung: Der Wert steckt nicht im Code sondern in den Programmierern und der zugehörigen Dokumentation. Der Wert steckt im Wissen der Leute.

    Es ist ein riesen Aufwand ein Reverse-Engineering durchzuführen. Wobei ich darunter nicht nur verstehe, den Code zu rekonstruieren, sondern auch zu verstehen, was die Ideen dahinter sind und wie das im Kontext reinpasst. Dazu reicht eben meistens nicht nur ein wenig Code anschauen, sondern braucht mehr Hintergrundinformationen. Und auch wenn man dann soweit ist, muss man das noch so umbauen, dass es in das eigene Programm reinpasst, wo es dann womöglich gar nicht reinpasst.

    Bis jemand dann tatsächlich so eine Idee nachgebaut haben sollte, ist man selber bereits deutlich weiter. Für die Konkurrenz lohnt sich ein Reverse-Engineering eigentlich gar nicht. Es ist Geldverschwendung.

    Grüssli



  • asc schrieb:

    Ich möchte mal speziell die Fragen, die kommerziell mit C# Programme erstellen. Wie haltet ihr das mit der Codesicherheit, verwendet ihr Obfuscatoren oder ähnliches? Oder vertraut ihr hier komplett euren Kunden? Reicht euch (sofern ihr sie verwendet) die kostenfreien Versionen, oder werden hier stärkere Obfuscatoren eingesetzt...

    In den Fällen, wo ich bisher was kommerzielles in C# programmiert habe, war das kein Thema. Der Source gehört eh dem Kunden. Wenn man sowas wie Shareware verkaufen will, ist es natürlich was anderes, aber da halte ich die Erfolgschancen für verschwindend gering, also braucht man sich auch keine Gedanken um Codesicherheit zu machen ^^



  • Mechanics schrieb:

    Der Source gehört eh dem Kunden.

    Das ist aber eher die Ausnahme.



  • Mechanics schrieb:

    Der Source gehört eh dem Kunden. Wenn man sowas wie Shareware verkaufen will, ist es natürlich was anderes, aber da halte ich die Erfolgschancen für verschwindend gering, also braucht man sich auch keine Gedanken um Codesicherheit zu machen ^^

    Das mag vielleicht bei Projekten mal vorkommen (sofern die Klauseln wirklich die Sourceübergabe einschließt - was ich nur selten erlebt habe). Wir machen aber beispielsweise eine Produktentwicklung, und haben ein paar Dutzend Kunden die das gleiche Produkt (nur ggf. durch unterschiedliche Lizenzierung mit teilweise unterschiedlich freigeschalteten Programmoptionen).

    Eine Sourceübergabe gibt es da nicht (auch wenn es ich glaube zwei Kunden gibt, die eine Sicherheitshinterlegung bei einem Anwalt [für den Fall einer Insolvenz etc.] vereinbart haben - diese haben aber auch nur in solchen Fällen zugriff).



  • [quote="asc"]Das mag vielleicht bei Projekten mal vorkommen (sofern die Klauseln wirklich die Sourceübergabe einschließt - was ich nur selten erlebt habe)./quote]

    Ja, das kommt natürlich drauf an, was man macht. Das waren alles Auftragsarbeiten für konkrete Kunden und somit gehörte auch der Source diesen Kunden. Wenn man was eigenständiges für mehrere Kunden macht, ist es natürlich was anderes.
    Ansonsten... Man kann natürlich einen Obfuscator einsetzen, ist kein großer Aufwand. Viel bringt es aber nicht. Wenn der Kern des Programms in einem bestimmten Algorithmus besteht, wird man ihn auch in obfusckierter Form nachvollziehen können. Wenn aber das ganze Programm an sich wichtig ist, dann wird Reverse Engineering beim Nachbauen keine besonders große Hilfe sein.


Anmelden zum Antworten