Passwortschutz - aber sicher! (mit WINAPI-Funktionen)
-
Hallo,
ich möchte im mein Programm einen Passwortschutz implementieren. Und ehe ich zuerst mal was zusammentippe und später merke man hätte das viel besser machen können, frage ich am liebsten euch mal um Rat:
Ich will ein PW vom User via DialogBox aufnehmen, und in der Registry einen Salted-Hash-Wert von einer Kombination aus dem vom User eingegebenen PW, der Seriennummer der Festplatte und einer kleinen geheimen Zeichenfolge erstellen.
Mir scheint das ziemich sicher zu sein.Falls ein Beknackter zu viel Zeit hat, die Seriennummer der Festplatte ermittelt und somit ein Haswert selber generiert und meinen Wert in der Registry ersetzt, so kommt er trotzdem nicht weiter, weil er meine kleine geheime Zeichenfolge immer noch nicht kennt. Um sicherzustellen, dass einer den PW-Schutz-aktiviert-Flag nicht einfach aus der registry entfernt mache ich davon 3 verschiedene Flags, an 3 verschiedenen Orten in der Registry mit jeweils anderen und getarnten Namen. Falss das Programm einen der Flags nicht findet, so wird dieser einfach neu generiert und erstellt.
Das ganze muss schon ziemlich sicher laufen und cniht von jedem Seppel mit ein wenig PC-Kenntnissen umgangen werden können.
Erkennt ihr ne Sicherheitslücke in dem obigen Vorgehen?
Habt ihr Verbesserungsvorschläge??Mfg.
-
Dieser Thread wurde von Moderator/in CMatt aus dem Forum WinAPI in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Falls ein Beknackter zuviel Zeit hat wird er einfach via Hex-Editor und sonstigen Tools die Passwortabfrage ausbauen...
-
Dazu muss sich ein Beknackter aber schon mächtig gut auskennen... :p
-
Nö, muss er garnicht.
Diese geheime Zeichenfolge, wird die im Program generiert oder ist die hardgecoded ? Man bedenke das jeder "beknackte" nen disassembler starten und stringreferenzen auslesen kann. Auch die Entscheidung von je in jne oder umgekehrt zu ändern stellt in der Regel kein Problem dar. Dafür muss man nur die richtige Stelle finden und die opcodes ersetzen. Dafür gibtz tuts en mass und Softice ist deren Freund.
Was die 3 verschiedenen geheimen Stellen in der Registry angeht, so handelt es sich dabei um einen typischen Fall von security by obscurity, nicht besonders sicher idR. obwohl passworte selbst auf diesem Prinzip beruhen.
Du solltest dir darüber im klaren sein, dass jeder Schutz umgangen werden kann wenn man den entsprechenden Aufwand betreibt. Meistens bedarf es jedoch keines so großen Aufwands.
Ich denke auch dass sich jemand nicht die Mühe macht die Hashes neu zu berechnen. Einfacher ist es wohl die Abfrage zu umgehen. Du kannst deine App natürlich packen, was es ein bischen sicherer macht. Dadurch schreckst du aber nur die Hobbycracker (wenn überhaupt) ab. Du solltest dir einen guten Algorithmus überlegen wie der richtige Schlüssel berechnet wird, auch verwirrende Abfragen helfen eine bisschen den Code unübersichtlicher zu machen.
Aber wirklich sicher ist so eine Singlehostlösung nicht. Darüber solltest du dir klar sein.
-
Schau mal hier:
http://www.s-a-ve.com/faq/Anti-Cracking-Tips-2.htm(Hmm, ich haette nicht uebel Lust mal einen Assemblercode-Obfuscator zu schreiben, der automatisch den Codefluss ein wenig durcheinanderruehrt (Inkl. tausender globaler "Jump-Flags")).
-
thx @ll.