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.

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