C# Login & PW

06/29/2014 12:57 Hugo081#1
Hallo ich habe ein kleines Problemm ich bin recht neu in c#
habe aber schon kleinere Programme geschrieben, nun möchte ich in mein Programm eine Art login machen so das nur leute mit einen von mir ausgewählten passwort das Programm öffnen können . weis aber nicht so recht wie ich damit anfangen soll wäre toll wenn ihr mir da helfen könnt

Gruß

Hugo
06/29/2014 13:11 PC Jones#2
Quote:
Originally Posted by Hugo081 View Post
Hallo ich habe ein kleines Problemm ich bin recht neu in c#
habe aber schon kleinere Programme geschrieben, nun möchte ich in mein Programm eine Art login machen so das nur leute mit einen von mir ausgewählten passwort das Programm öffnen können . weis aber nicht so recht wie ich damit anfangen soll wäre toll wenn ihr mir da helfen könnt

Gruß

Hugo
Kannst du natürlich machen, wird aber nicht sicher sein.
Wenn man will könnte man den Login innerhalb von 5 Minuten umgehen.
Falls du allerdings nur "Noobs" abhalten willst mach doch den schnellsten(und schlechtesten) Login überhaupt:
Code:
            string username = "pcjones"; // pcjones zu dem usernamen den du willst machen
            string password = "123123"; // 123123 zu dem passwort das du willst machen
            if (txtUserName.Text == username && txtPassword.Text == password )
            {
                MessageBox.Show("Login Erfolgreich");
                formMain.Show();
            }
            else
            {
                MessageBox.Show("Login Fehlgeschlagen");
            }
Solltest du das Programm aber öffentlich machen oder verkaufen solltest du dir im klaren darüber sein, dass dieser "Schutz" quasi nichts bringt.

LG
06/29/2014 13:16 Hugo081#3
Quote:
Originally Posted by PC Jones View Post
Kannst du natürlich machen, wird aber nicht sicher sein.
Wenn man will könnte man den Login innerhalb von 5 Minuten umgehen.
Falls du allerdings nur "Noobs" abhalten willst mach doch den schnellsten(und schlechtesten) Login überhaupt:
Code:
            string username = "pcjones"; // pcjones zu dem usernamen den du willst machen
            string password = "123123"; // 123123 zu dem passwort das du willst machen
            if (txtUserName.Text == username && txtPassword.Text == password )
            {
                MessageBox.Show("Login Erfolgreich");
                formMain.Show();
            }
            else
            {
                MessageBox.Show("Login Fehlgeschlagen");
            }
Solltest du das Programm aber öffentlich machen oder verkaufen solltest du dir im klaren darüber sein, dass dieser "Schutz" quasi nichts bringt.

LG
Okay danke das ist glaube genau das was ich gesucht habe .
eine schlechte verschlüßelung langt mir da das ist nur für leute die ich kenne also nix aufregendes . ich werde das gleich mal probieren und geb dan nochmal ein feedback danke errstmal ! :handsdown:

Quote:
Originally Posted by PC Jones View Post
Code:
            string username = "pcjones"; // pcjones zu dem usernamen den du willst machen
            string password = "123123"; // 123123 zu dem passwort das du willst machen
            if (txtUserName.Text == username && txtPassword.Text == password )
            {
                MessageBox.Show("Login Erfolgreich");
                formMain.Show();
            }
            else
            {
                MessageBox.Show("Login Fehlgeschlagen");
            }
Das funkt wunderbar nur wie bekomme ich jetzt den login vor mein tool so das sich das erst nach login öffnet ? das wäre mir noch sehr wichtig .

Grüße Hugo
06/29/2014 19:42 PC Jones#4
Du doppelklickst oben Rechts auf "Program.cs" und änderst dort dann den Namen der Startform in den Namen der Loginform:
[Only registered and activated users can see links. Click Here To Register...]

LG :)
06/29/2014 20:20 Hugo081#5
Danke Sehr hast mir richtig gut weiter geholfen ;)

kann geschloßen werden
06/29/2014 20:55 supercracker13#6
Ich würde zumindestens das Passwort nicht im Klartext reinschreiben.
Benutzt nen md5 Hash. Also einmal dein Passwort hashen und dann das eingegebene Passwort auch und dann erst vergleichen.
Dann könnte er höhstens versuchen den Hash zu knacken um an das Passwort zu kommen.
Einloggen könnte er sich trotzdem wenn er das Programm in ollydbg reinzieht. Oder das Passwort ausliest.

Sinvoller wäre es wenn du alle Dateien, welche von dem Programm benötigt werden mit diesem Passwort verschlüsselst, sodass man ohne dieses Passwort auf keine Datei zugreifen kann.

Ich hoffe du hast das verstanden ^^
06/29/2014 22:33 Hugo081#7
Quote:
Originally Posted by supercracker13 View Post
Ich würde zumindestens das Passwort nicht im Klartext reinschreiben.
Benutzt nen md5 Hash. Also einmal dein Passwort hashen und dann das eingegebene Passwort auch und dann erst vergleichen.
Dann könnte er höhstens versuchen den Hash zu knacken um an das Passwort zu kommen.
Einloggen könnte er sich trotzdem wenn er das Programm in ollydbg reinzieht. Oder das Passwort ausliest.

Sinvoller wäre es wenn du alle Dateien, welche von dem Programm benötigt werden mit diesem Passwort verschlüsselst, sodass man ohne dieses Passwort auf keine Datei zugreifen kann.

Ich hoffe du hast das verstanden ^^
Jop habe ich hab mich dazu heute auch schon einwenig schlau gemacht und es am ende so übernommen . Danke sehr ! :handsdown: Ich fand es aber gut das mir nicht gleich alles im bestmöglichen erklärt wurde so das ich daraus aufbauen konnte langsam aber verständnisvoll nach und nach,denn ich will ja ein programm schreiben und nicht die ganze zeit [strg+c & v ] zudrücken und am ende hab ich 0 dunst was ich da überhaupt gemacht habe :D
06/30/2014 01:00 TeamFAiTh#8
Erst recht solltest du als Anfänger schon anfangen "richtig" und "sicher" zu programmieren.
Deshalb solltest du das hardcoden schonmal direkt lassen.

Tipp:
Besorge dir einen FTP Server auf der zwei Dateien liegen. Ein PHP Script welche die Logindaten überprüft und eine txt mit den Logindaten.

Die PHP namens check.php sieht so aus:
Code:
<?php
$user = $_GET['user'];
$pass = $_GET['pass'];
$datei = fopen("logins.txt","r");
while($info = fgets($datei)){
	$array = split("\t",$info);	
	if($array[0]==$user && rtrim($array[1])== $pass){
		echo "True";
		break;
	}
}
fclose($datei);
?>
In der Datei "logins.txt" die auch auf dem Server liegt, liegen die Logindaten welche so aufgebaut sind (Natürlich kann man diese nochmal extra verschlüsseln)

Code:
UserName1	Password
UserName2	Password2
UserName3	Password3
Zwischen Username und Passwort immer ein Tab!


Dein Code könnte dann ungefähr so aussehen ( Da du ja kein Copy & Paste haben möchtest, hier in vb.net ;) )

Code:
Dim client As New System.Net.WebClient
        If client.DownloadString("http://deinserver.de/check.php?user=" & UserName & "&pass=" & Password) = "True" Then
            MessageBox.Show("Die Zugangsdaten stimmen!")
        Else
            MessageBox.Show("Die Zugangsdaten stimmen nicht!")
        End If

Natürlich kann man auch statt die Logindaten im Link auch als POST übergeben, aber dann müsstest du auch die PHP dementsprechend anpassen.


Quote:
Originally Posted by supercracker13 View Post
Benutzt nen md5 Hash...

Einloggen könnte er sich trotzdem wenn er das Programm in ollydbg reinzieht. Oder das Passwort ausliest...

Sinvoller wäre es wenn du alle Dateien, welche von dem Programm benötigt werden mit diesem Passwort verschlüsselst, sodass man ohne dieses Passwort auf keine Datei zugreifen kann.
Man braucht kein OllyDBG um einen MD5 Hash knacken zu können.
Es gibt nicht viele Methoden, höchstens UTF7, UTF32, UTF8, Encoding (UTF16) und ASCII.

Außerdem ist es nicht sinnvoll alle Dateien mit einem Passwort zu verschlüsseln, man sollte immer von Passwort zu Passwort wechseln.

AES256 oder ähnliches wäre sinnvoller, doch auch hier ist es doof da der zu decrypte String + das Zusatzpasswort hardcoded sind (Bringt also nicht viel)


Gruß
iL0v3SuN
06/30/2014 02:10 Black Tiger ツ#9
Sehr viele entwickeln noch in WinForms.
Windows Forms ist zwar ganz nett für den Anfang, besser wäre aber natürlich WPF. Auch wenn die Lernkurve steiler ist, ersparst du dir wesentlich viel Frust, wenn du den Wechsel/Einstieg sobald wie möglich vollziehst.

Nicht weil WPF unbedingt DAS zukünftige Grafik-Framework sei, aber das Paradigma - nämlich die strikte Trennung von UI und Logik - wird wohl auf dieser Art und Weise fortgeführt werden.
06/30/2014 11:13 supercracker13#10
Quote:
Originally Posted by TeamFAiTh View Post

Man braucht kein OllyDBG um einen MD5 Hash knacken zu können.
Es gibt nicht viele Methoden, höchstens UTF7, UTF32, UTF8, Encoding (UTF16) und ASCII.

Außerdem ist es nicht sinnvoll alle Dateien mit einem Passwort zu verschlüsseln, man sollte immer von Passwort zu Passwort wechseln.
Ich meinte auch nicht um den MD5 zu knacken sondern um die Abfrage zu umgehen.
Vor ein Paar tagen habe ich das mal bei meinen Programmen versucht.
Das Programm sollte beim Server abfragen ob es noch benutzt werden darf.
Also zb auf dem server ist ne Datei in der steht "true". Das Programm frag ob die Datei "true" sagt, ansonsten schließt sich das Programm.

Ich hab mein Programm bei olly reingezogen und hab die Abfrage umgangen. Und wenn ich das schaffe (mit kaum Kenntnissen) ist das kein Problem.
06/30/2014 13:28 tolio#11
alles was auf dem eigenen system passiert kann man umgehen/umbauen wie man lustig ist
und eine abfrage funktioniert immer nur mit einer abfrage, egal an welcher stelle und in welcher form sie programmiert wird
durch die oben genannte tatsache kann man diese dann auch wieder verändern
06/30/2014 14:19 supercracker13#12
Nicht ganz. Das mit dem umgehen ist klar. Alles was am pc passiert kann man umgehen.
Man kann sich aber aussuchen wie schwer man es den Angreifern macht.
Angenommen das Programm benötigt bestimmte Ressourcen zb dll oder bilder oder sprachen für die gui. So kann man diese verschlüsseln. Zb aes aber fast egal.
Du musst den richtigen Schlüssel eingeben sonst eerden die Ressourcen nicht geladen. Weil da nirgends das Passwort verglichen wird kann man das auch nicht umgehen.

Das ganze bleibt allerdings nur solange sicher bis die entschlüsselten Dateien an die Öffentlichkeit gelangen. Weil vorher kann man ja nix damit anfangen. Bei nem 256Bit key dauert das seine zeit ^^
06/30/2014 15:50 th0rex#13
Quote:
Originally Posted by supercracker13 View Post
Nicht ganz. Das mit dem umgehen ist klar. Alles was am pc passiert kann man umgehen.
Man kann sich aber aussuchen wie schwer man es den Angreifern macht.
Angenommen das Programm benötigt bestimmte Ressourcen zb dll oder bilder oder sprachen für die gui. So kann man diese verschlüsseln. Zb aes aber fast egal.
Du musst den richtigen Schlüssel eingeben sonst eerden die Ressourcen nicht geladen. Weil da nirgends das Passwort verglichen wird kann man das auch nicht umgehen.

Das ganze bleibt allerdings nur solange sicher bis die entschlüsselten Dateien an die Öffentlichkeit gelangen. Weil vorher kann man ja nix damit anfangen. Bei nem 256Bit key dauert das seine zeit ^^
Dauert ~10 min, weil die entschlüsselten Dateien im RAM sind. Kann man dann einfach dumpen. Es stimmt schon, dass man, solange es auf deinem pc passiert, immer irgendwie was verändern/bekommen kann.
07/01/2014 10:08 supercracker13#14
Ja aber womit willst du die Dateien entschlüsselt bekommen ?
Du brauchst dann einen der das Passwort kennt und die entschlüsselt. Wenn der die dann veröffentlicht musst du trotzdem noch das Programm verändern das es die unverschlüsselten dateien lädt.
Ansonsten wirst du niemals an die Datei kommen außer das passwort ist 0000 oder so.
Falls du es mir nicht glaubst kann ich dir gerne mal ein Beispiel erstellen und du kannst dein Glück versuchen ^^

Beispiel ist im Anhang:
Ich kann dir sogar den Code geben, aber ohne das Passwort kommst du nicht an die Daten die ausgegeben werden sollen. Ich habe ein einfaches Passwort verwendet, aber ich glaube trotzdem nicht das man da so ohne weiteres dran kommt.
Und hier ist es halt nur Text, aber man kann das selbe auch mit anderen Dateien machen auf die das Programm aufbaut.

07/01/2014 11:18 Mostey#15
Quote:
Originally Posted by supercracker13 View Post
Ja aber womit willst du die Dateien entschlüsselt bekommen ?
Du brauchst dann einen der das Passwort kennt und die entschlüsselt. Wenn der die dann veröffentlicht musst du trotzdem noch das Programm verändern das es die unverschlüsselten dateien lädt.
Ansonsten wirst du niemals an die Datei kommen außer das passwort ist 0000 oder so.
Falls du es mir nicht glaubst kann ich dir gerne mal ein Beispiel erstellen und du kannst dein Glück versuchen ^^

Beispiel ist im Anhang:
Ich kann dir sogar den Code geben, aber ohne das Passwort kommst du nicht an die Daten die ausgegeben werden sollen. Ich habe ein einfaches Passwort verwendet, aber ich glaube trotzdem nicht das man da so ohne weiteres dran kommt.
Und hier ist es halt nur Text, aber man kann das selbe auch mit anderen Dateien machen auf die das Programm aufbaut.

Diese Denkweise ist mindestens genauso unsicher, denn wenn jemand den Schlüssel kennt und die Daten unverschlüsselt im RAM liegen, hast du ein Problem. Denn dann reicht schon eine Person, die die Daten unverschlüsselt (oder vielleicht sogar noch direkt den Schlüssel) weiterschicken kann.

Wenn überhaupt, dann lieber über Netzwerk (Daten liegen Remote entschlüsselt und werden asymmetrisch mit dem fremden öffentlichen Schlüssel verschlüsselt sodass auch nur dieser mit dem dazugehörigen privaten Schlüssel diese auch entschlüsseln kann, dann hast du wenigstens keinen statischen Key und etwas mehr "Sicherheit")

Wobei selbst dann irgendwann die Daten auch entschlüsselt im RAM liegen. Egal wie du es drehst, komplett sicher wird es nie sein.