myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Rund um die Programmierung » Code vor unerlaubten Zugriff schützen
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Code vor unerlaubten Zugriff schützen

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
sugar76 sugar76 ist männlich
myCSharp.de-Mitglied

Dabei seit: 19.10.2017
Beiträge: 63
Entwicklungsumgebung: Visual Studio, IntelliJ IDEA
Herkunft: Berlin


sugar76 ist offline

Code vor unerlaubten Zugriff schützen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo allerseits,

ich habe zwar schon viel entwickelt, aber wenig Erfahrungen damit, wie ich von mir entwickelte Software vor unerlaubtem Zugriff schützen kann. Das gilt insbesondere dann, wenn die Software beim Kunden installiert ist, also nicht auf einem von mir betriebenen Server läuft.

Das betrifft folgendes:
* Wie kann ich sicherstellen, dass der Code nicht per Reverse Engineering ausgelesen werden kann?
* Wie kann ich verhindern, dass sensible Daten, wie z.B. Connection-Strings für Datenbanken, nicht im Klartext in irgendwelchen Config-Dateien landen, sondern verschlüsselt werden?

Wie sind Eure Erfahrungen in diesem Bereich?

Grüße,

Abid
07.12.2017 18:07 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.380
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Das Thema wurde ungefähr 42986423490324234 mal besprochen - und das vorsichtig geschätzt.

Bitte wenigstens 10 Sekunden die Forensuche oder Google verwenden. Wenigstens 10 Sekunden.
Beim Suchbegriff obfuscator hier im Forum findest Du über 150 Threads dazu.

Das Fazit ist: gar nicht.

 Schutz vor Deobfuscation
 [FAQ] DB-Password/Kennwort/Connection-String sicher speichern

Wenn Du ConnectionStrings brauchst, dann scheint es schon ein grundlegender Fehler bzgl. Architektur zu sein, dass die Anwendung direkt auf einen Datenbankserver zugreift und nicht über eine Server-Anwendung (zB ein REST-Service) dazwischen.
Eine solche Server-Anwendung wäre dann auch für eine individuelle Authentifizierung des Benutzers zuständig. Sowas sollte niemals die Datenbank übernehmen. Dafür ist sie nicht da; das kann sie auch nicht.

Das Prinzip dahinter ist eine ganz normale Client Server Architektur.
Nur, dass bei euch wohl der Server nur physikalisch und nicht als Anwendung vorhanden ist.
07.12.2017 18:11 Beiträge des Benutzers | zu Buddylist hinzufügen
sugar76 sugar76 ist männlich
myCSharp.de-Mitglied

Dabei seit: 19.10.2017
Beiträge: 63
Entwicklungsumgebung: Visual Studio, IntelliJ IDEA
Herkunft: Berlin

Themenstarter Thema begonnen von sugar76

sugar76 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Abt:
Das Thema wurde ungefähr 42986423490324234 mal besprochen - und das vorsichtig geschätzt.

Da hast Du Recht... ich wollte einfach eine Diskussion eröffnen, der Stand der Technik kann sich ja mit der Zeit ändern.

Zitat von Abt:
Wenn Du ConnectionStrings brauchst, dann scheint es schon ein grundlegender Fehler bzgl. Architektur zu sein, dass die Anwendung direkt auf einen Datenbankserver zugreift und nicht über einen Service (zB. REST) dazwischen.

Bzgl. Architektur gebe ich Dir nochmal Recht. Es gibt aber Szenarien, in denen die Software beim Kunden läuft und dann läuft beim Kunden auch der REST-Service. Egal, welche Architektur man verwendet, irgendeine Komponente hat den Zugriff zur Datenbank und dort steht dann ein Connection-String.
07.12.2017 18:35 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.380
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Das sind völlig verschiedene Szenarien.

- Szenario A: Verbindung zur Datenbank wird vom Client eröffnet, Benutzer hat direkten Zugriff auf die Verbindung - und hat potentiellen Zugriff auf die Credentials.
- Szenario B: Verbindung zur Datenbank wird vom Server eröffnet, Benutzer hat keinen Zugriff auf die Verbindung - und auch nicht auf die potentiellen Credentials.

Einen vollständigen Schutz für alle Szenarien gibt es nicht.
07.12.2017 18:44 Beiträge des Benutzers | zu Buddylist hinzufügen
Deaktiviertes Profil Deaktiviertes Profil ist männlich
myCSharp.de-Mitglied

Dabei seit: 06.07.2014
Beiträge: 985


Deaktiviertes Profil ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wer Zugang zum Rechner hat (root Rechte) der kommt immer an alles dran, wo auch der Rechner selber dran kann, sonst käme auch der Rechner nicht dran.

Klingt logisch, ist aber anscheinend nicht immer offensichtlich.

So etwas lässt sich organisatorisch wesentlich sinnvoller und effektiver lösen als eine tolle Pseudoverschlüsselung.
07.12.2017 20:18 Beiträge des Benutzers | zu Buddylist hinzufügen
Torni Torni ist männlich
myCSharp.de-Mitglied

Dabei seit: 14.11.2014
Beiträge: 27


Torni ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Abgesehen davon haben Reverse Engineers bisher immer "gewonnen".

Einen richtigen Schutz gibt es nicht wirklich.

Wir haben früher alles gecracked was auf dem Markt war, da gab es keine Hindernisse..
Heute bin ich genau auf den anderen Seite..aber auch da gewinnen die anderen..
07.12.2017 21:05 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
sugar76 sugar76 ist männlich
myCSharp.de-Mitglied

Dabei seit: 19.10.2017
Beiträge: 63
Entwicklungsumgebung: Visual Studio, IntelliJ IDEA
Herkunft: Berlin

Themenstarter Thema begonnen von sugar76

sugar76 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Erstmal vielen Dank für alle Antworten.

Ich fasse mal zusammen:
1) Code per obfuscation schützen bietet ein Plus an Sicherheit, aber mehr auch nicht.
2) Zugangsdaten zu Datenbanken, etc. lassen sich am besten dadurch schützen, dass man den Rechner absichert, auf dem die Zugangsdaten liegen. Hier ist die Verwendung einer separaten Zugriffsschicht (REST Service o.ä.) auf einem eigenen Server und den Zugriff zur Datenbank bereitstellt, "sicherer" als wenn die Zugangsdaten direkt auf dem Client Rechner liegen.
09.12.2017 10:45 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Deaktiviertes Profil Deaktiviertes Profil ist männlich
myCSharp.de-Mitglied

Dabei seit: 06.07.2014
Beiträge: 985


Deaktiviertes Profil ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Die Zwischenschicht schützt nicht nur die Zugangsdaten, sondern auch den Zugriff insgesamt.

Die Datenbank lässt man exklusiv mit der Zwischenschicht kommunizieren, damit wirklich keiner dazwischenpfuschen kann.

Und schon ist nur noch das möglich, was die Zwischenschicht erlaubt.

Ein weiteres Schmankerl: Ich brauche mir keine Gedanken mehr über irgendwelche Datenbank-Treiber auf dem Client machen (ist der Treiber installiert, passt die Version, ...)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Deaktiviertes Profil am 09.12.2017 12:34.

09.12.2017 12:32 Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.380
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

1) Code-Verschleierung macht es nur komplizierter an den Quellcode zu kommen; von Sicherheit kann man hier trotzdem nicht sprechen.
Ein Entwickler, der weiß, was ILCode ist, weiß auch, wie man daraus C#/VB.NET Code bekommt. Laien können auch mit dem Quellcode direkt nichts anfangen.

2) Es geht darum, dass kein physikalischer Zugriff auf eine Datenbank erfolgen kann. Weder lokal noch über das Netzwerk.
Jeder Datenbankserver, der direkt erreichbar ist, ist eine potentielle Lücke.
In Azure zB. ist jeder Datenbankserver von Haus aus nicht erreichbar; nicht mal für andere Azure Dienste. Das muss alles einzeln freigegeben werden. Bewusst.

Ein ordentliches Authentifizierungssystem geht nur über eine eigene Server-Anwendung.
Ein Datenbankserver ist dafür nicht gemacht und es ist auch nicht seine Aufgabe (nein, die Benutzerverwaltung im SQL Server ist nicht dafür da!).
09.12.2017 13:39 Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegen mehr als 2 Jahre.
oehrle oehrle ist männlich
myCSharp.de-Mitglied

Dabei seit: 08.06.2009
Beiträge: 354
Entwicklungsumgebung: VisualStudio 2010/2012
Herkunft: Germany


oehrle ist offline

Leseschutz möglich ??

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo, sorry dass ich da auch nochmal nachfrage. Bei uns in der Firma ist es auch so, das wir entwickeln und bestimmte Berechnugsprogramme nach aussen geben.
Könnte es aber auch so funktioneren, dass der Code auf einem Speichermedium lin Form von USB iegt (als DLL), der Stick aber nicht kopiert werden kann ... ??
Oder kann der IL-Code dann aus dem Speicher ausgelesen werden?
Gäbe es so eine Möglichkeit in diese Richtung etwas zu machen, damit es jedenfalls nicht ganz so leicht ist?
23.01.2020 00:02 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
trib trib ist männlich
myCSharp.de-Mitglied

Dabei seit: 22.04.2008
Beiträge: 661
Entwicklungsumgebung: C#


trib ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo oehrle,

ein Schreibschutz wird Dich nicht davor schützen, dass das Programm ausgelesen wird.

Um das dekompilieren zu umgehen: Verwende eine Programmiersprache, die keinen IL Code generiert. C, C++, etc.

Zwar gibt es auch einige Tools für z.B. C++ Anwendungen, die Hürde ist aber um ein vielfaches höher!

PS: Ja, man kann USB-Sticks schreibschützen. Hilft an dieser Stelle aber nicht.
23.01.2020 09:39 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.380
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wie in meinem vorherigen Beitrag bereits geschrieben hast Du da keine allgemeine Chance.
Meinen Maschinenbaukunden, die oft auch Algorithmen haben, die Wettbewerbsvorteile darstellen, empfehle ich den Berechnungskern in zB C++ auszulagern und den dann von C# aufzurufen.

In  .NET Native hast Du mittlerweile auch die Möglichkeit C# Code auf nativ zu kompilieren; aber vermutlich wird das aufgrund der Einschränkungen für Deinen Zweck nicht anwendbar sein.
23.01.2020 16:32 Beiträge des Benutzers | zu Buddylist hinzufügen
oehrle oehrle ist männlich
myCSharp.de-Mitglied

Dabei seit: 08.06.2009
Beiträge: 354
Entwicklungsumgebung: VisualStudio 2010/2012
Herkunft: Germany


oehrle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo, aber C++ ist doch dann auch in .Net? Oder hat dass dann wieder mit der Umsetzung in IL zu tun, dass bei C++ so nicht gemacht wird?
24.01.2020 07:04 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.384
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist offline Füge T-Virus Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Du solltest dich dringend in C++ einlesen.
Reines C++ (Unmanged) hat nichts mit .NET zu tun.
Das wird nativ kompiliert, da hast du keine .NET Runtime sondern ein "echtes" Programm spezifisch für die Rechnerarchitektur und Betriebssystem!
Dies kann man dann, da es keinen IL Code sondern nur den fertigen Maschinenlesbaren Code für den spezifischen CPU Typen gibt, auch nicht einfach dekompilieren bzw. durch einen Zwischencode (IL Code) auslesen.

Anders sieht es bei Manged C++ aus, was dann auf .NET läuft.
Da hast du dann IL Code, den man eben durch ILSpy einfach auslesen kann.
Das sind aber Grundlagen der .NET Architektur.
Das solltest du dir dringend mal durchlesen!

T-Virus

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von T-Virus am 24.01.2020 07:39.

24.01.2020 07:38 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
oehrle oehrle ist männlich
myCSharp.de-Mitglied

Dabei seit: 08.06.2009
Beiträge: 354
Entwicklungsumgebung: VisualStudio 2010/2012
Herkunft: Germany


oehrle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Danke für die Info.
24.01.2020 09:45 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.380
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von T-Virus:
Dies kann man dann, da es keinen IL Code sondern nur den fertigen Maschinenlesbaren Code für den spezifischen CPU Typen gibt, auch nicht einfach dekompilieren bzw. durch einen Zwischencode (IL Code) auslesen.

Muss das kurz korrigieren, denn so formuliert stimmt das nicht.

Am Ende von unmanaged C++ kommt (meist) einfacher Binärcode raus.
Aber auch C++ kann man decompilen - einer der bekanntesten ist Hex Rays.
Anders als bei den meisten .NET Decompilern werden da aber Random Namen für Methoden und Variablen generiert, da die ursprünglichen Informationen beim Compile Prozess verloren gehen. Auch fehlt die gesamte Struktur.

Der Aufwand aus C++ etwas wieder nutzbares herzustellen ist immens größer als bei .NET; aber auch nicht unmöglich - wie bei allem mit Nullen und Einsen.
Das sind aber die Grundlagen der PC Architektur :-)
24.01.2020 15:16 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 2 Jahre.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 29.01.2020 16:22