Ist es sicher, sensible Daten in einer C ++ kompilierten Binärdatei zu speichern?

8

Es ist bekannt, dass DLLs, die von .NET erzeugt werden, leicht dekompiliert werden können. Dies bedeutet, dass vertrauliche Informationen (z. B. Verschlüsselungsschlüssel) nicht in .NET-Binärdateien gespeichert werden sollten.

Wäre es eine sinnvolle Alternative, sensible Daten in (zum Beispiel) C ++ - Binärdateien zu speichern, die von meinem .NET-Code genutzt werden könnten? Ich weiß noch nichts über Interop-Sachen, bin aber gespannt, ob das ein erstrebenswerter Weg sein könnte. Ich denke, um zu klären, meine Fragen sind:

  1. Könnte eine in C ++ (oder C) erzeugte Binärdatei leicht dekompiliert werden, um auf sensible String-Daten zuzugreifen?
  2. Ist das eine total hirnrissige Idee, entweder weil es nicht funktionieren würde, sehr schwer zu erreichen wäre, oder weil eine viel bessere Alternative existiert, der ich noch nicht begegnet bin?
David 28.12.2012, 13:05
quelle

5 Antworten

12

Die Antwort lautet nein. Während seine wahre .NET-DLL trivialerweise zu ihrer ursprünglichen Struktur dekompiliert werden kann, und eine C / C ++ - DLL nur zu einem Monster-Chaos dekompiliert werden kann, das ein Compiler lieben würde, werden die Daten, die darin gespeichert sind, in einem großen, un plaziert -managed, Eimer, also jeder, der wusste, welcher Teil zu sehen (und, ok, all diese Daten sind eng aneinander gedrängt, so dass es schwierig wird zu wissen, welches Bit ist was), aber die Daten werden da sein für alle zu sehen.

Google für Datensegment , wo die statischen Daten in einer nativen Windows-Binärdatei platziert werden.

Schnellbearbeitung: Natürlich können Sie verschlüsselte Informationen in Ihrer C ++ - Binärdatei speichern und verschlüsseln, aber Sie müssen etwas anderes verwenden, um den Entschlüsselungsschlüssel zu speichern (z. B. Ihr Windows-Benutzerkennwort oder Ähnliches). Mit .NET können Sie vertrauliche Informationen in einer Konfigurationsdatei speichern und bei der ersten Ausführung oder Installation einfach verschlüsseln, verschlüsselt und entschlüsselt sie basierend auf den Benutzerkontendetails, unter denen die App läuft (also ändere sie nicht und behalte eine Kopie der unverschlüsselten Konfigurationsdatei irgendwo :-))

    
gbjbaanb 28.12.2012 13:09
quelle
3

String-Literale können von nativen exe oder dll gelesen werden

    
Tony Thomas 28.12.2012 13:08
quelle
3

Es gibt immer einen Weg, sensible Informationen in Ihrer Binärdatei zu finden. Die Unterschiede zwischen .NET-Binärdateien und nativen Binärdateien sind die Komplexität ihrer umgekehrten Analyse (die Ursache liegt darin, dass NET-Code auf der virtuellen Prozessmaschine (VM) ausgeführt wird, so dass die Schutzmechanismen von .NET kaum Tricks jenseits der VM ausführen). Wie Sie bereits erwähnt haben, können .NET-Binärdateien leicht dekompiliert werden, selbst wenn Sie Ihre Binärdatei durch einen Obfuscator wie Deafuscator wie de4dot verschleiert haben kann es leicht entblößen. Die umgekehrte Analyse von nativen Binärdateien ist jedoch schwieriger als die erste. Es gibt viel effektivere Schutzmechanismen in diesem Bereich, wie Anti-Debugging, die Verschleierung der virtuellen Maschine und so weiter. Diese Techniken könnten Ihren Code sicherer machen, natürlich ist dies eine relative Sache.

    
bwdeng 28.12.2012 14:21
quelle
1

Die Antwort ist JA. Sensible Daten können in C ++ kompilierten Binärdateien gespeichert werden. Leute, die nichts über Sicherheit wissen, tun es die ganze Zeit.

    
John Smith 28.12.2012 13:10
quelle
1

Es gibt verschiedene Sicherheitsstufen mit unterschiedlichen Kosten und Unannehmlichkeiten für die Benutzer. Das Speichern von Schlüsseln im Code ist ziemlich üblich, aber nicht sehr sicher. Da Sie .NET verwenden, das Windows impliziert, und Sie möchten möglicherweise in der Datenschutz API (DPAPI) suchen. Es verschlüsselt Daten mit Ihrem Windows-Benutzer-ID-Passwort als Schlüssel.

Viele Laptops und Server enthalten einen TPM-Chip (Trusted Platform Module), der die Verschlüsselung für Sie übernimmt und den Schlüssel für Sie schützt.

    
brian beuning 28.12.2012 14:38
quelle