Program na hasło - jak?

0

C#
Siema. Napisałem program i chcę, żeby był na hasło.
Na razie wpadłem na taki pomysł. Najpierw pobieram zahashowane hasło MD5 z pewnej strony:

WebClient cli = new WebClient();
            try{
                correctMd5 = cli.DownloadString("http://www.onet.pl/tajne.txt");
            } catch(Exception ex){
                MessageBox.Show("Błąd: " + ex.Message);
                Environment.Exit(0);
            }

, a następnie wrzucam hasło, które wpisał użyszkodnik do metody:

private bool IsPasswordValid(string inputPassword){
            string userPasswordHash = Md5.GetMd5(inputPassword);
            if (!Regex.Match(inputPassword, "dupa").Success){ // musi być wyraz "dupa"
                return false;
            }

            if(correctMd5 == userPasswordHash){
                correctPassword = true;
                return true;
            }
            else
                return false;
        }

Wiem, że da się zmienić w pliku .hosts IP strony, z której się pobiera na localhost i podmienić plik. Zabezpieczeniem na to jest jakiś program obfuscatorowy.

Dobry pomysł?

0

Żaden obfuscator przed tym Cię nie ochroni. Możesz na sztywno podać adres ip, chociaż to rodzi pewne problemy. Innym rozwiązaniem będzie np. zaszyfrowanie tego hash'a jeszcze jakimś algorytmem np. DES, ale ktoś kto się będzie znał i tak złamie i to bez żadnego dziwnego podmieniania adresów, tylko zmieni całą metodę sprawdzającą hasło, albo w ogóle ją wywali(tutaj obfuscator pomoże). 100% pewności nigdy nie będziesz miał.
To sprawdzanie z wyrazem "dupa" jest dla mnie zupełnie nie zrozumiałe. Dodatkowo przypisanie correctPassword = true; nie powinno być tutaj.

0
byku_guzio napisał(a):

Żaden obfuscator przed tym Cię nie ochroni. Możesz na sztywno podać adres ip, chociaż to rodzi pewne problemy. Innym rozwiązaniem będzie np. zaszyfrowanie tego hash'a jeszcze jakimś algorytmem np. DES, ale ktoś kto się będzie znał i tak złamie i to bez żadnego dziwnego podmieniania adresów, tylko zmieni całą metodę sprawdzającą hasło, albo w ogóle ją wywali(tutaj obfuscator pomoże). 100% pewności nigdy nie będziesz miał.
To sprawdzanie z wyrazem "dupa" jest dla mnie zupełnie nie zrozumiałe. Dodatkowo przypisanie correctPassword = true; nie powinno być tutaj.

correctPassword zapomniałem wywalić z kodu.
Tę dupę dałem, gdyby ktoś podmienił pliki, a nie wiedziałby jaki wyraz jest patternie (przez obfuscatora). Wpisywałby coś bez tego słowa i dalej wyświetlałby mu się błąd.
Czyli co? Nie da się na 100% zabezpieczyć? W końcu Photoshopa łamią, to mój program też by złamali :D.

0

no raczej - wystarczy podmienić twoją metodę na "return true"
jeśli chcesz żeby zabezpieczenie naprawdę przysporzyło problemów to działanie całego programu musi zależeć od tego hasła na przykład generując kluczowe początkowe wartości zmiennych z tego hasła

0
unikalna_nazwa napisał(a):

no raczej - wystarczy podmienić twoją metodę na "return true"
jeśli chcesz żeby zabezpieczenie naprawdę przysporzyło problemów to działanie całego programu musi zależeć od tego hasła na przykład generując kluczowe początkowe wartości zmiennych z tego hasła

Dobry pomysł. Wątpię, żeby ktoś chciał crackować mój program, no ale pomysł dobry. Ale jakby chciał, to i tak scrackuje...

0

Zabezpieczeniem na to jest jakiś program obfuscatorowy.

Tja, Procmon/WireShark i po sprawie...

Na razie wpadłem na taki pomysł. Najpierw pobieram zahashowane hasło MD5 z pewnej strony:

MD5 już nie jest zbyt bezpieczne...

Dobry pomysł?

Nie. zmieniam jedno porównanie i całe twoje łączenie się itd. już przegrywa.

Miminalnie lepszym pomysłem jest wysyłanie hasełka do strony i oczekiwanie na pewną odpowiedź, to już trudniej zcrackować, ale oczywiście też się da (ale przy wymyślnej obfuskacji może być całkiem mocne).
Lepsze sposoby są, ale nie podam ich bo mi nie płacisz :P .

0

Spoko. Zamiast MD5 używać SHA256?

0

Spoko. Zamiast MD5 używać SHA256?

Najlepiej to jeszcze to jakoś sól (ale z tym będzie trudno jeżeli ma to być z pliku txt), wtedy będzie to dosyć skuteczne (chociaż do swoich zastosowań używam najczęściej SHA512 jeżeli chodzi o bezpieczeństwo).
Ale generalnie, nie zwiększa to bezpieczeństwa twojego programu, a jedynie utrudnia znalezienie hasła. No, chyba że ktoś będzie na tyle dziwny że będzie szukać haseł o tym samym hashu...

0

Możesz napisać funkcję sprawdzającą plik hosts, czy nie wystąpiła podmiana. Chyba (nie jestem pewien) program odpalany w trybie użytkownika (nie admina) pozwala na podejrzenie tego pliku, ale nie modyfikacje. To spowoduje zaniechanie crackowania programu przez mało doświadczonych.
Ale tak jak mówiłeś - nigdy nie uda ci się przed tym obronić, zawsze znajdzie się taki @deus.

0
bordeux napisał(a):

Możesz napisać funkcję sprawdzającą plik hosts, czy nie wystąpiła podmiana.

To jest banalne do obejścia. Nawet nie musisz mieć fizycznego dostępu do maszyny ofiary i podmieniać pliku hosts.

0
-123 napisał(a):

Spoko. Zamiast MD5 używać SHA256?

Najlepiej to jeszcze to jakoś sól (ale z tym będzie trudno jeżeli ma to być z pliku txt), wtedy będzie to dosyć skuteczne (chociaż do swoich zastosowań używam najczęściej SHA512 jeżeli chodzi o bezpieczeństwo).
Ale generalnie, nie zwiększa to bezpieczeństwa twojego programu, a jedynie utrudnia znalezienie hasła. No, chyba że ktoś będzie na tyle dziwny że będzie szukać haseł o tym samym hashu...

Dodam sól, zmienię na SHA512, a cracker wejdzie, zmieni kod na return true i dziękuję dobranoc :D.

0

Włączyłem fiddlera, następnie mój program. Widać mój url. Jak go jakoś zaszyfrować, żeby go nie było widać w fiddlerze?
Pozdro.

0

Jak go jakoś zaszyfrować, żeby go nie było widać w fiddlerze?

Możesz go zaszyfrować ale poza tym programem ogłupisz też swój moduł do połączeń. Czyli: nie da się.

1

mam proste pytanie, po co wrzucać jednocześnie hasło na stronę i do kodu? jeśli koniecznie chcesz trzymać hasło na serwerze to może treść którą program powinien wyświetlić też trzymaj na serwerze, a serwer niech zajmie się sprawdzaniem hasła:
http://adres/pobierztresc.php?haslo=hashhasla
strona moze zwrocic np.:
1
zabezpieczona tresc

albo
0

zalezy od zastosowania.

0
krwq napisał(a):

mam proste pytanie, po co wrzucać jednocześnie hasło na stronę i do kodu? jeśli koniecznie chcesz trzymać hasło na serwerze to może treść którą program powinien wyświetlić też trzymaj na serwerze, a serwer niech zajmie się sprawdzaniem hasła:
http://adres/pobierztresc.php?haslo=hashhasla
strona moze zwrocic np.:
1
zabezpieczona tresc

albo
0

zalezy od zastosowania.

Tak zrobię. Stworzę plik .php i nikt nie zobaczy nawet hasha hasła.

0
<?php
	$passHash="jakistamhash";
	$_POST["inputHash"];
	
	if($_POST["inputHash"] == $passHash)
	{
		echo "goodPass";
	} else echo "badPass";
?>

Nigdy w php nie programowałem. Tak może być? Działa w każdym razie.

0

Nigdy w php nie programowałem.

I obyś już nigdy nie musiał.

Tak może być? Działa w każdym razie.

A skoro działa to nie może być? W każdym razie bezpieczeństwa zbyt to nie zwiększa, bo cracker może chociażby postawić swój skrypt php który mu zwróci twój magiczny keyword.

0
-123 napisał(a):

Nigdy w php nie programowałem.

I obyś już nigdy nie musiał.

Tak może być? Działa w każdym razie.

A skoro działa to nie może być? W każdym razie bezpieczeństwa zbyt to nie zwiększa, bo cracker może chociażby postawić swój skrypt php który mu zwróci twój magiczny keyword.

Czyli nie da się uchronić. Zostawiam tak jak jest.

1 użytkowników online, w tym zalogowanych: 0, gości: 1