KeyStore– Dein Passwort Tresor

    • Beta
    • Closed Source

    Es gibt 109 Antworten in diesem Thema. Der letzte Beitrag () ist von KidRick.

      @Solaris
      Das ist kein Hack. Du musst das Masterpasswort ja vorher eingeben. Du hast halt nen Trojaner in Form einer dll auf den Rechner gepackt. Da kann ich genauso gut die exe ersetzen. Dagegen ist erstmal kein Passworttresor sicher.
      Die dll musst du ja auch erst mal auf den Opferrechner bringen und dann kann man ja ebenso nen Keylogger draufmachen...

      Das Entschlüsseln ohne das Masterpasswort sollte momentan schwierig werden. Es ist zwar ein Klartext/Geheimtext-Paar bekannt, aber das bringt bei AES nix.
      AES ist sicher gegen Known-plaintext attacks.
      Im Moment wüsst ich nicht wie ich es knacken könnte.
      Nein, ist das richtige, da ich auch in den KeyStore gelange. Habe es nochmal versucht. Geht nicht. Habe KeyStore eingerichtet -> Passwort Erstellt -> Dein Programm in den Ordner und dll Überschrieben -> Keystore Eingelogt.


      Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

      Da es ohne das Ersetzen der EXE funktioniert finde ich dass es eine gravierende Sicherheitslücke ist. Würde er wenigstens die DLL auf integrität prüfen würde das überhaupt nicht gehen. Mal davon abgesehen dass die gesamte Konzeption unbrauchbar ist, siehe Manawyrms Link zu KeePass. Das abzusichern ist schon möglich, vllt. nicht für einen Anfänger. Aber man muss es Angreifern ja nicht ganz so leicht machen. Vor allem da es nicht unrealistisch ist, dass Trojaner etc. auf Passwort-Safes angesetzt werden.
      Das Passwort liegt übrigens im KLARTEXT im Speicher rum, während die Anwendung läuft.

      Die Verschlüsselung ist natürlich sicher. Aber wenn man derart mit den Daten rumschludert nützt die beste Verschlüsselung nix.

      @Andy16823 Mal ne kleine Demo.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Solaris“ ()

      Wenn ich die dll austauschen kann, dann kann ich auch den integritätscheck von der exe rausmachen...
      Ich halte auch nicht so viel von nem Passwort im KLARTEXT. Allerdings ist das bei .NET so ne Sache, egal wie du dich verbiegst um das Passwort zu verstecken... gib mir 5 Minuten und ich habs draußen. Bei C++ wird das schon wesentlich schwieriger.
      KeePass ist AFAIK in einer .NET Sprache geschrieben - versuchs doch mal.

      Wie gesagt, es geht darum dass er da das Passwort durch die Gegend reicht. Völlig wurst was ich austausche, ich denke nicht dass jemand so wie ich das gemacht habe versuchen wird was zu klauen. Außer sein Programm wäre so groß und bekannt wie KeePass. Übrigens kann man auch ohne die DLL auszutauschen an das Passwort gelangen.
      Ich reiche das Passwort ja nicht rum, es wird eingegeben und als Variable Temporär gespeichert. Man kommt nicht drum herum das Kennwort einzugeben. Bei KeyLocker sollte das gleiche dann auch Funktionieren.
      Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

      Als Idee:
      Sobald das Passwort eingegeben ist, hashst du es mit einer guten Hashmethode, diesen speicherst du dann in einem Byte-Array. Dann musst du nur noch das eigentliche Passwort aus dem Speicher löschen. Und wenn irgendein sicherheitskritischer String im Arbeitsspeicher sein muss, dann nimm halt nen SecureString.
      MfG Stefan
      verstehe, also das ganze passwort zu md5 und mit dem Hash verschlüsseln aber diesen hash muss ich ja auch wieder speichern. Bringt also auch nicht viel oder ?
      Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

      Nein, du speicherst hier gar nichts, weder das Passwort, noch den Key oder den IV! Und das auch nicht in verschlüsselter oder gehashter Form.
      Ein (einigermaßen) sicherer Ablauf wäre folgender:
      1. Der Benutzer gibt sein Passwort ein (dieses wird gehasht, z.B. mit SHA-1 SHA-256), dieses wird dann als Byte-Array im RAM abgelegt
      2. Das Programm generiert mithilfe von PBKDF2 aus dem Passworthash den Key und den IV für die Verschlüsselung
      3. Das Programm Versucht, mit Hilfe des Key und IV die Passwortdatei zu entschlüsseln und legt das Ergebnis im RAM ab
      4. Das Programm prüft, ob der Entschlüsselungsversuch erfolgreich war, indem es schaut, ob der Dateiinhalt eine bestimmte Form hat (z.B. eine bestimmte XML-Strukturierung oder einen Teststring enthält)
      5. Wenn ja, lädt es die Entschlüsselte Datei in deine OOP-Struktur rein (zu schützende Elemente sind hier immer noch in verschlüsselter Form)
      6. Bei Abruf eines Passworts wird der entsprechende Eintrag rausgesucht und mithilfe des Passworthashes entschlüsselt.
      Das sollte es so ungefähr sein, zumindest würde ich es mit meinem aktuellen Wissensstand so machen.
      Hoffentlich hilfts :) .

      MfG Stefan

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „nafets3646“ ()

      @nafets3646
      Du kannst es noch so umständig machen wie du willst - das bringt alles GAR NICHTS. Bei .NET ist es einfach ein Kinderspiel da einzubrechen.

      Habe grade mal versucht das Passwort aus dem laufenden Prozess von KeePass 2 zu extrahieren.

      Einfach nen Payload in den Prozess injizieren (mit dem richtigen Tool) und schon hab ich das Passwort.
      Das Passwort war in nem Private SecureString gespeichert.

      Hab sowas noch nie vorher gemacht, aber allzu schwierig war das nicht. Der selbstgeschriebene Payload hat nur ~30 Zeilen.

      Ergebnis: SecureString ist Fail!

      Du kannst bei ner .NET Anwendung nix verbergen, ich kann mich da so bewegen, als wäre es meine eigene Anwendung. Bei ner C++ Anwendung kann man es vermutlich auch nicht zu 100% sicher machen, aber da ist es viiiiiiiel aufwendiger.
      Ob Klartext oder Hash, es geht nicht sicherer mit .Net Wenn du einen Hash nimmst kann man die Exe auch manipulieren. Nur das eben keiner das Wort kennt
      Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

      markus.obi schrieb:

      Du kannst bei ner .NET Anwendung nix verbergen, ich kann mich da so bewegen, als wäre es meine eigene Anwendung. Bei ner C++ Anwendung kann man es vermutlich auch nicht zu 100% sicher machen, aber da ist es viiiiiiiel aufwendiger.

      Also wenn man so Geschütze auffährt, knack ich C++ auch problemlos. All zu aufwändig ists nicht. Ich schmeiß das Ding in'n Disassembler und änder einfach die Routinen ab. Security through obscurity hat noch nie funktioniert. Sowas muss einfach nur korrekt gemacht werden, sodass der Quellcode einem Null hilft.
      Macht doch nen OffTopic Thread auf um euch über Verschlüsselungen zu unterhalten. Vorschläge is ja ok aber hier den ganzen Thread zumüllen in dem es afaik darum geht, Kritikpunkte und Verbesserungsvorschläge zu posten, geht gar ned. Naja ich mach die Regeln ja nich ^^


      @Andy16823 hab auch paar Kritikpunkte:
      - Beim Öffnen des Programms sollte das Passworteingabefeld den Fokus haben
      - Einloggen sollte (nachdem das PW eingegeben wurde) mit [Enter] möglich sein.
      - Neu Anlegen, Bearbeiten und Löschen von Einträgen sollten mit Shortcuts erreichbar sein.
      - In der Übersicht sollte das Passwort nicht im Klartext stehen. Es sollte erst nach einer Aktion sichtbar werden.
      - Deinem KeyStore fehlen Kategorien und benutzerdefinierte Felder. Kategorien z.B. "Web" oder "Social Networks" oder "Windows" und benutzerdefinierte Felder für weitere Daten, also dass man beim Anlegen oder Bearbeiten sagen kann "Feld hinzufügen" und man dann zwei Textboxen hat wo einmal der Name des Feldes reinkommt (z.B. "Bemerkung") und dann noch wo man eben die Daten reinschreibt dazu. Natürlich hier dann die Möglichkeit via Checkbox o.ä. anbieten, das Benutzerdefinierte Feld für spätere Verwendung zu speichern. Hier könnten dann auch Comboboxen ins Spiel kommen. Aber nur als Idee
      - In den Einstellungen, das mit dem Automatischen Beenden ist in zwei GroupBoxen obwohl es sich um die gleiche Einstellung handelt. Dies zusammenlegen.
      - Bei Kenwort Adresse öffnen bekomm ich einen Fehler:
      Spoiler anzeigen
      Informationen über das Aufrufen von JIT-Debuggen
      anstelle dieses Dialogfelds finden Sie am Ende dieser Meldung.

      ************** Ausnahmetext **************
      System.ComponentModel.Win32Exception (0x80004005): Das System kann die angegebene Datei nicht finden
      bei System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
      bei System.Diagnostics.Process.Start()
      bei System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
      bei KeyStore.Form1.ToolStripButton7_Click(Object sender, EventArgs e) in C:\Users\Andreas\Documents\Visual Studio 2012\Projects\WindowsApplication2\WindowsApplication2\Form1.vb:Zeile 130.
      bei System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
      bei System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e)
      bei System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
      bei System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
      bei System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
      bei System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
      bei System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
      bei System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea)
      bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
      bei System.Windows.Forms.Control.WndProc(Message& m)
      bei System.Windows.Forms.ScrollableControl.WndProc(Message& m)
      bei System.Windows.Forms.ToolStrip.WndProc(Message& m)
      bei System.Windows.Forms.ToolStripDropDown.WndProc(Message& m)
      bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
      bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
      bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

      ************** Geladene Assemblys **************
      mscorlib
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.18444 built by: FX451RTMGDR.
      CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll.
      ----------------------------------------
      KeyStore
      Assembly-Version: 1.0.0.0.
      Win32-Version: 1.0.0.0.
      CodeBase: file:///C:/Users/Marius.Gerum/Desktop/Release/KeyStore.exe.
      ----------------------------------------
      Microsoft.VisualBasic
      Assembly-Version: 10.0.0.0.
      Win32-Version: 11.0.50938.18408 built by: FX451RTMGREL.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll.
      ----------------------------------------
      System
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.18408 built by: FX451RTMGREL.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll.
      ----------------------------------------
      System.Core
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.18408 built by: FX451RTMGREL.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll.
      ----------------------------------------
      System.Windows.Forms
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.18408 built by: FX451RTMGREL.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll.
      ----------------------------------------
      System.Drawing
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.18408 built by: FX451RTMGREL.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll.
      ----------------------------------------
      System.Runtime.Remoting
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.18408 built by: FX451RTMGREL.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Remoting/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll.
      ----------------------------------------
      System.Configuration
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.18408 built by: FX451RTMGREL.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll.
      ----------------------------------------
      System.Xml
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.18408 built by: FX451RTMGREL.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll.
      ----------------------------------------
      aesCrypto
      Assembly-Version: 1.0.0.0.
      Win32-Version: 1.0.0.0.
      CodeBase: file:///C:/Users/Marius.Gerum/Desktop/Release/aesCrypto.DLL.
      ----------------------------------------
      mscorlib.resources
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.18408 built by: FX451RTMGREL.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_de_b77a5c561934e089/mscorlib.resources.dll.
      ----------------------------------------
      System.Windows.Forms.resources
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.18408 built by: FX451RTMGREL.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_de_b77a5c561934e089/System.Windows.Forms.resources.dll.
      ----------------------------------------

      ************** JIT-Debuggen **************
      Um das JIT-Debuggen (Just-In-Time) zu aktivieren, muss in der
      Konfigurationsdatei der Anwendung oder des Computers
      (machine.config) der jitDebugging-Wert im Abschnitt system.windows.forms festgelegt werden.
      Die Anwendung muss mit aktiviertem Debuggen kompiliert werden.

      Zum Beispiel:

      <configuration>
      <system.windows.forms jitDebugging="true" />
      </configuration>

      Wenn das JIT-Debuggen aktiviert ist, werden alle Ausnahmefehler an den JIT-Debugger gesendet, der auf dem
      Computer registriert ist, und nicht in diesem Dialogfeld behandelt.



      - Ein Klick auf "Ausführen" bringt auch eine Fehlermeldung:
      Spoiler anzeigen
      Informationen über das Aufrufen von JIT-Debuggen
      anstelle dieses Dialogfelds finden Sie am Ende dieser Meldung.

      ************** Ausnahmetext **************
      System.ComponentModel.Win32Exception (0x80004005): Das System kann die angegebene Datei nicht finden
      bei System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
      bei System.Diagnostics.Process.Start()
      bei System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
      bei KeyStore.Form1.ToolStripButton7_Click(Object sender, EventArgs e) in C:\Users\Andreas\Documents\Visual Studio 2012\Projects\WindowsApplication2\WindowsApplication2\Form1.vb:Zeile 130.
      bei System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
      bei System.Windows.Forms.ToolStripButton.OnClick(EventArgs e)
      bei System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
      bei System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
      bei System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
      bei System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
      bei System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
      bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
      bei System.Windows.Forms.Control.WndProc(Message& m)
      bei System.Windows.Forms.ScrollableControl.WndProc(Message& m)
      bei System.Windows.Forms.ToolStrip.WndProc(Message& m)
      bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
      bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
      bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

      ************** Geladene Assemblys **************
      mscorlib
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.18444 built by: FX451RTMGDR.
      CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll.
      ----------------------------------------
      KeyStore
      Assembly-Version: 1.0.0.0.
      Win32-Version: 1.0.0.0.
      CodeBase: file:///C:/Users/Marius.Gerum/Desktop/Release/KeyStore.exe.
      ----------------------------------------
      Microsoft.VisualBasic
      Assembly-Version: 10.0.0.0.
      Win32-Version: 11.0.50938.18408 built by: FX451RTMGREL.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll.
      ----------------------------------------
      System
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.18408 built by: FX451RTMGREL.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll.
      ----------------------------------------
      System.Core
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.18408 built by: FX451RTMGREL.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll.
      ----------------------------------------
      System.Windows.Forms
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.18408 built by: FX451RTMGREL.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll.
      ----------------------------------------
      System.Drawing
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.18408 built by: FX451RTMGREL.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll.
      ----------------------------------------
      System.Runtime.Remoting
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.18408 built by: FX451RTMGREL.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Remoting/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll.
      ----------------------------------------
      System.Configuration
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.18408 built by: FX451RTMGREL.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll.
      ----------------------------------------
      System.Xml
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.18408 built by: FX451RTMGREL.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll.
      ----------------------------------------
      aesCrypto
      Assembly-Version: 1.0.0.0.
      Win32-Version: 1.0.0.0.
      CodeBase: file:///C:/Users/Marius.Gerum/Desktop/Release/aesCrypto.DLL.
      ----------------------------------------
      mscorlib.resources
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.18408 built by: FX451RTMGREL.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_de_b77a5c561934e089/mscorlib.resources.dll.
      ----------------------------------------
      System.Windows.Forms.resources
      Assembly-Version: 4.0.0.0.
      Win32-Version: 4.0.30319.18408 built by: FX451RTMGREL.
      CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_de_b77a5c561934e089/System.Windows.Forms.resources.dll.
      ----------------------------------------

      ************** JIT-Debuggen **************
      Um das JIT-Debuggen (Just-In-Time) zu aktivieren, muss in der
      Konfigurationsdatei der Anwendung oder des Computers
      (machine.config) der jitDebugging-Wert im Abschnitt system.windows.forms festgelegt werden.
      Die Anwendung muss mit aktiviertem Debuggen kompiliert werden.

      Zum Beispiel:

      <configuration>
      <system.windows.forms jitDebugging="true" />
      </configuration>

      Wenn das JIT-Debuggen aktiviert ist, werden alle Ausnahmefehler an den JIT-Debugger gesendet, der auf dem
      Computer registriert ist, und nicht in diesem Dialogfeld behandelt.



      - Auch Einstellungen-Fenster sollte sich mit Shortcut öffnen lassen, z.B. Alt+P (Preferences)
      - Neu Anlegen und Bearbeiten sollte auch über Kontextmenü erreichbar sein

      Gut, zum Thema Verschlüsselung und wie das intern in deinem Programm geregelt ist, sag ich mal nix. Das wurde ja bereits auf den kompletten letzten Seiten breitgeschlagen und totgekaut.

      Ansonsten finde ich ist es fast schon dein bisher bestes Programm. Auch das mit der Rechtschreibung ist deutlich besser als man sonst gewöhnt ist von dir ;)


      Link :thumbup:
      Hello World
      Warum programmiert man überhaupt einen Passwort Tresor in .Net wenns doch von Anfang an schon nicht sicher sein wird? O.o sollte ja klar gewesen sein. Warum nicht gleich in C#?
      Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

      @Orion
      Du wirfst hier Programmiersprache und Framework durcheinander.
      Auch in C# kann man .net Programmieren.
      There is no CLOUD - just other people's computers

      Q: Why do JAVA developers wear glasses?
      A: Because they can't C#

      Daily prayer:
      "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."