Ĺadny brzuch
Witam
Napisałem program w Delphi i teraz chciałbym go zabezpieczyć :). Polegałoby to na tym, iż program pobiera plik z www.mojastrona.pl/program.txt , zapisuje do Edita i sprawdza czy jego wartosc wynosi np. "uruchom". Jeśli tak - program uruchamia się, jeśli nie - wyskakuje błąd. I napisałem takie coś:
onCreate:
Timer1.Enabled:=true;
Timer1:
Timer1.Enabled:=false; try test.Text:=idhttp1.Get('http://mojastrona.pl/program.txt') except begin MessageBox(0, 'Wystąpił błąd. Program zostanie zamknięty', PChar(Application.Title), MB_IConerror); Close; end; end; Button1.Click;
Button1:
if test.Text='uruchom' then begin Form2.Show; Form1.Hide; end else begin MessageBox(0, PChar(test.Text), PChar(Application.Title), MB_IConerror); Close; end;
No i wszystko ładnie działa, ale chciałbym go troszkę zabezpieczyć ;]. Bo nie jest problemem "zgadnięcie" adresu strony, następnie go podmienienie czy w ogóle usunięcie tej funkcji i program scrackowany... Wiem, że nie ma zabezpieczenia, którego nie da się złamać, ale można to troszkę utrudnić :P. Więc co polecacie zrobić? Może da się jakoś ukryć ten adres w zasobach programu?
Z góry dziękuję za pomoc.
każdy sniffer wykryje Ci z jaką stroną się łączysz i jaki plik otwierasz
No to może jakiś inny sposób? Może dać stronę z logowaniem i połączenie szyfrowane? Tylko jak zrobić... Ma ktoś jakieś pomysły?
A dlaczego chcesz blokować aplikację? Masz aż tak super funkcjonalny program?
a czy to ważne czy ma tak super program ?? po prostu chce to zrobić :P
Mam bardzo banalny pomysł
zrób, że podczas włączenia programu ściągasz ten plik twój co masz na serwerze i zapisujesz na dysku w jakimś miejscu następnie program wczytuje ten plik (bo to ustawisz w programie) i sprawdza czy można uruchomić formę 2 czy nie można no i kasujesz plik z dysku - to wszystko będzie trwało jakieś 2 sek.
wiadomo, że sniffery wykryją jaki plik ściągasz ale
jak użyjesz urlmon i
URLDownloadToFile(nil, 'http://www.serwer.com/plik+twój.txt', 'c:\xxxx.txt', 0, nil)
wtedy ściągniesz plik ale na dysku będzie miał inną nazwę więc nie da się go łatwo odszukać przez osoby nie porządane
no a na serwerze nie da się zmienić pliku chyba, że sam to zrobisz
no ale jak mówię to bardzo uproszczony sposób
Pomysł dobry, jednak ma wadę, gdyż ktoś "zaglądnie" sobie do programu, poprzez jakiś edytor i widzi, jaki plik pobiera program. Poza tym, jeśli ktoś umieści program na płytce CD, to nie zapisze się plik plik.txt, a do dysku twardego może się pluć jakiś AV, że zapisuje jakieś pliki ;]. Jakieś inne pomysły?
Aplikacja może i nie jest super, ale tak jak napisał kolega, że chce, żeby miała takie zabezpieczenie :P
Pomysł dobry, jednak ma wadę, gdyż ktoś "zaglądnie" sobie do programu, poprzez jakiś edytor i widzi, jaki plik pobiera program. Poza tym, jeśli ktoś umieści program na płytce CD, to nie zapisze się plik plik.txt, a do dysku twardego może się pluć jakiś AV, że zapisuje jakieś pliki ;]. Jakieś inne pomysły?
Aplikacja może i nie jest super, ale tak jak napisał kolega, że chce, żeby miała takie zabezpieczenie :P
Nie przesadzaj. Do zapisywania plików jest katalog temp. Ja zapiszesz plik do temp dla danego usera to żaden antywirus się nie powinien przyczepić
tak jak mówi Statjacek plik pobrany ze strony zapiszesz np do tempa pozatym ten plik usuniesz od razu po wczytaniu go do programu tak jak mówiłem będzie to trwało jakieś 2 sekundy.
A żeby sobie ktoś nie "zaglądnął" do programu użyj jakiegoś pasera czy jak się to zwie :P
pozatym i co z tego, że ktoś będzie wiedział jaki plik ściągasz z neta skoro na kompie zapiszesz go pod inną nazwą - ściągasz plik x.txt zapisujesz fhdjfdj.txt :P
Antywirusy nie będą się pluć, że zapisujesz plik na dysku ponieważ to zwykle pliki tekstowe
No ale jak chcesz możesz oczywiście zrobić inaczej :P
Poza tym, jeśli ktoś umieści program na płytce CD, to nie zapisze się plik plik.txt, a do dysku twardego może się pluć jakiś AV, że zapisuje jakieś pliki ;]
Tak samo jak firewall może blokować dostęp do sieci Twojemu programowi albo system nie pozwalać na uruchamiania EXE z CD czy USB. W taki sposób dojdziesz do wniosku, że trzeba opanować cały system, aby mieć pewność, że program się uruchomi ;)
pozatym i co z tego, że ktoś będzie wiedział jaki plik ściągasz z neta skoro na kompie zapiszesz go pod inną nazwą - ściągasz plik x.txt zapisujesz fhdjfdj.txt :P
Problemem nie jest miejsce, z którego pobierany jest plik, ale jego zawartość. Jest to tylko kwestią czasu, aż ktoś odganie jaki plik jest odpowiedzialny za weryfikację (firewall, sniffer, program do mintorowania dysku itd.).
Zawartość pliku musi się zmieniać np. w zależności od aktualnej daty oraz godziny. Jak to zrobić? Piszesz prosty skrypt PHP, który w zależności od daty generuje unikalny numer (np. dodaje rok, m-c, dzień, godzinę i dziesiątki minut - 10 minut to wystarczająco długo, aby program połączył się i pobrał dane). Program robi to samo, a następnie pobiera zaszyfrowaną datę ze skryptu. Jeśli się zgadza, to znaczy, że można uruchomić program. Jeśli nie chcesz, aby program się uruchamiał, to po prostu usuwasz lub zmieniasz skrypt na serwerze. Aby uniknąć problemów z synchronizacją czasu należy pobierać czas z jakiegoś niezależnego serwera.
Co się stanie jeśli ktoś przejmie zaszfrowaną datę? Będzie dysponował informacjami, które pozwolą mu na uruchomienia aplikacji co najwyżej przez 10 minut ;) A dlaczego? Ponieważ znalezienie metody, którą szyfrujesz datę wymaga włamania się na stronę WWW albo debugowania programu. Wątpie, że ktokolwiek będzie chciał się męczyć ;)
Zawartość pliku musi się zmieniać np. w zależności od aktualnej daty oraz godziny. Jak to zrobić? Piszesz prosty skrypt PHP, który w zależności od daty generuje unikalny numer (np. dodaje rok, m-c, dzień, godzinę i dziesiątki minut - 10 minut to wystarczająco długo, aby program połączył się i pobrał dane). Program robi to samo, a następnie pobiera zaszyfrowaną datę ze skryptu. Jeśli się zgadza, to znaczy, że można uruchomić program. Jeśli nie chcesz, aby program się uruchamiał, to po prostu usuwasz lub zmieniasz skrypt na serwerze. Aby uniknąć problemów z synchronizacją czasu należy pobierać czas z jakiegoś niezależnego serwera.
Co się stanie jeśli ktoś przejmie zaszfrowaną datę? Będzie dysponował informacjami, które pozwolą mu na uruchomienia aplikacji co najwyżej przez 10 minut ;) A dlaczego? Ponieważ znalezienie metody, którą szyfrujesz datę wymaga włamania się na stronę WWW albo debugowania programu. Wątpie, że ktokolwiek będzie chciał się męczyć ;)
Pomysł bardzo dobry, jednak wykonanie troszkę mnie przeraża... Bo tak, ktoś kto mieszka w innym państwie będzie miał problem z uruchomieniem aplikacji, bo inna godzina. No i jeśli np. ktoś ma zmienioną datę (bo czasami się zdarza, że musi, np. żeby AV nie minął okres wersji trial :P) to też nic z tego :(. Ale za pomysł brawa :). Chyba, że by zostawił tylko dni, bez godzin... No, ale też jakie szyfrowanie miałoby być? Bo napisałeś:
a następnie pobiera zaszyfrowaną datę ze skryptu.
Może jakiś mały przykład? Bo w programie z porównaniem daty bym sobie poradził, ale gorzej ze skryptem PHP...
Ale i tak dzięki wielkie za pomoc :)
No, ale też jakie szyfrowanie miałoby być?
Jakie tylko zechcesz. Może dodać rok do m-ca, pomnożyć przez dzień, odjąć godzinę itd. Możesz użyć dowolnego algorytmy szyfrowania. Możliwości masz nieograniczone.
<?php // Czas GMT. date_default_timezone_set("Europe/London"); // Pobranie daty oraz godziny. $date = getdate(); $years = $date['year']; $months = $date['mon']; $days = $date['mday']; $hours = $date['hours']; $minutes = $date['minutes']; // Zaokrąglenie minut do dziesiątek (kod będzie unikalny co 10 minut). $minutes = $minutes - $minutes % 10; // Szyfrowanie ;) $code = 2 * $years + 4 * $months * $days - 3 * $hours - 2 * $minutes; // Wyświetlenie wyniku. echo($code); ?>
Ten prosty kod pobiera datę, szyfruje ją i wyświetla. Wrzucasz ten kod na konto WWW pod nazwą "index.php". Jeśli otworzysz stronę, to przeglądarka wyświetli jakąs liczbę. Jeśli w programie pobierzesz plik "http://www.twojastrona.pl/index.php", to również dostaniesz tą liczbę. Wystarczy, że zmienisz linię, w której jest szyfrowanie daty na swój algorytm i taki sam napiszesz w programie.
Pomysł bardzo dobry, jednak wykonanie troszkę mnie przeraża... Bo tak, ktoś kto mieszka w innym państwie będzie miał problem z uruchomieniem aplikacji, bo inna godzina.
Aby uniknąć problemów z synchronizacją czasu należy pobierać czas z jakiegoś niezależnego serwera.
Pobierasz zawsze GMT. Musisz znaleźć sposób pobierania aktualnej daty z sieci albo po prostu skorzystać z tego samego skryptu ;)
<?php // Czas GMT. date_default_timezone_set("Europe/London"); // Pobranie daty oraz godziny. $date = getdate(); $years = $date['year']; $months = $date['mon']; $days = $date['mday']; $hours = $date['hours']; $minutes = $date['minutes']; // Zaokrąglenie minut do dziesiątek (kod będzie unikalny co 10 minut). $minutes = $minutes - $minutes % 10; $date = $years . '-'. $months . '-' . $days . ' ' . $hours . ':' . $minutes; // Wyświetlenie wyniku. echo($date); ?>
Ale za pomysł brawa :)
"pomysł" jest powszechnie wykorzystywany. W niektórych firmach pracownicy muszą dokonywać autoryzacji (np. w celu uzyskania dostępu do urządzenia albo przed wejściem do pomieszczenia). Pracownik ma kartę, która generuje co minutę unikalny kod. Taki sam kod, w takich samych odstępach czasu generuje czytnik kart. Reszty się można domyślać ;)
W twoim przypadku prościej i bezpieczniej jest zrobić hash - np. program losuje wartość liczbową, po czym dopisuje do niej kilka znaków (zawsze takich samych, tzw sól), i robi z tego md5. Na serwer jako parametr get wysyła samą liczbę (http://www.twojastrona.pl/index.php?id=liczba), a skrypt robi to samo co program - dodaje ten sam ciąg znaków i na całości robi md5, po czym zwraca wartość md5. Program ją pobiera i porównuje tą z serwera z samodzielnie wygenerowaną. To, że ktoś może łatwo zauważyć, że przekazujesz wartość liczbową nic nie zmiania, bo bez soli nie da się złamać algorytmu (pod warunkiem, że losujesz z odpowiednio dużego przedziału te liczby - zwykły int powinien wystarczyć, to daje olbrzymia liczbe kombinacji). No i jest niezależny od błędów związanych z datą, i zewnętrznymi serwerami (wystarczy że padnie serw z którego byś pobierał datę i program przestaje działać, tak samo jeśli ktoś go włączy o 23:59:59 to też pewnie się sypnie).
Kod php czegoś takiego jest banalny
echo md5( $_GET['id'] + 'twoj ciag znakow');
i tak samo napisać to w delphi, tu masz unit do md5 http://download.4pro...ers.net/md5.zip
Użytkownik Deadeye edytował ten post 14 luty 2009, 02:52
Dzięki wielkie :) Chyba skorzystam ze sposobu kolegi wyżej :P. A co do md5 w delphi to ja skorzystałem z tej strony. I mi zamiast:
echo md5( $_GET['id'] + 'twoj ciag znakow');
poszło:echo md5($_GET['id'].'twoj ciag znakow');ponieważ w Twoim kodzie miałem cały czas 0.. Wszystkim jeszcze raz dziękuję za pomoc :)
Temat do zamknięcia...
Użytkownik userup edytował ten post 15 luty 2009, 19:48
Ponieważ "+" służy do dodawania liczb, a "." do łączenia ciągów znaków ;)
Ponieważ "+" służy do dodawania liczb, a "." do łączenia ciągów znaków ;)
No tak, przyzwyczajenia z innych języków, gdzie zawsze + służy do łączenia ciągów znaków też.
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Napisałem program w Delphi i teraz chciałbym go zabezpieczyć :). Polegałoby to na tym, iż program pobiera plik z www.mojastrona.pl/program.txt , zapisuje do Edita i sprawdza czy jego wartosc wynosi np. "uruchom". Jeśli tak - program uruchamia się, jeśli nie - wyskakuje błąd. I napisałem takie coś:
onCreate:
Timer1.Enabled:=true;
Timer1:
Timer1.Enabled:=false; try test.Text:=idhttp1.Get('http://mojastrona.pl/program.txt') except begin MessageBox(0, 'Wystąpił błąd. Program zostanie zamknięty', PChar(Application.Title), MB_IConerror); Close; end; end; Button1.Click;
Button1:
if test.Text='uruchom' then begin Form2.Show; Form1.Hide; end else begin MessageBox(0, PChar(test.Text), PChar(Application.Title), MB_IConerror); Close; end;
No i wszystko ładnie działa, ale chciałbym go troszkę zabezpieczyć ;]. Bo nie jest problemem "zgadnięcie" adresu strony, następnie go podmienienie czy w ogóle usunięcie tej funkcji i program scrackowany... Wiem, że nie ma zabezpieczenia, którego nie da się złamać, ale można to troszkę utrudnić :P. Więc co polecacie zrobić? Może da się jakoś ukryć ten adres w zasobach programu?
Z góry dziękuję za pomoc.
każdy sniffer wykryje Ci z jaką stroną się łączysz i jaki plik otwierasz
No to może jakiś inny sposób? Może dać stronę z logowaniem i połączenie szyfrowane? Tylko jak zrobić... Ma ktoś jakieś pomysły?
A dlaczego chcesz blokować aplikację? Masz aż tak super funkcjonalny program?
a czy to ważne czy ma tak super program ?? po prostu chce to zrobić :P
Mam bardzo banalny pomysł
zrób, że podczas włączenia programu ściągasz ten plik twój co masz na serwerze i zapisujesz na dysku w jakimś miejscu następnie program wczytuje ten plik (bo to ustawisz w programie) i sprawdza czy można uruchomić formę 2 czy nie można no i kasujesz plik z dysku - to wszystko będzie trwało jakieś 2 sek.
wiadomo, że sniffery wykryją jaki plik ściągasz ale
jak użyjesz urlmon i
URLDownloadToFile(nil, 'http://www.serwer.com/plik+twój.txt', 'c:\xxxx.txt', 0, nil)
wtedy ściągniesz plik ale na dysku będzie miał inną nazwę więc nie da się go łatwo odszukać przez osoby nie porządane
no a na serwerze nie da się zmienić pliku chyba, że sam to zrobisz
no ale jak mówię to bardzo uproszczony sposób
Pomysł dobry, jednak ma wadę, gdyż ktoś "zaglądnie" sobie do programu, poprzez jakiś edytor i widzi, jaki plik pobiera program. Poza tym, jeśli ktoś umieści program na płytce CD, to nie zapisze się plik plik.txt, a do dysku twardego może się pluć jakiś AV, że zapisuje jakieś pliki ;]. Jakieś inne pomysły?
Aplikacja może i nie jest super, ale tak jak napisał kolega, że chce, żeby miała takie zabezpieczenie :P
Pomysł dobry, jednak ma wadę, gdyż ktoś "zaglądnie" sobie do programu, poprzez jakiś edytor i widzi, jaki plik pobiera program. Poza tym, jeśli ktoś umieści program na płytce CD, to nie zapisze się plik plik.txt, a do dysku twardego może się pluć jakiś AV, że zapisuje jakieś pliki ;]. Jakieś inne pomysły?
Aplikacja może i nie jest super, ale tak jak napisał kolega, że chce, żeby miała takie zabezpieczenie :P
Nie przesadzaj. Do zapisywania plików jest katalog temp. Ja zapiszesz plik do temp dla danego usera to żaden antywirus się nie powinien przyczepić
tak jak mówi Statjacek plik pobrany ze strony zapiszesz np do tempa pozatym ten plik usuniesz od razu po wczytaniu go do programu tak jak mówiłem będzie to trwało jakieś 2 sekundy.
A żeby sobie ktoś nie "zaglądnął" do programu użyj jakiegoś pasera czy jak się to zwie :P
pozatym i co z tego, że ktoś będzie wiedział jaki plik ściągasz z neta skoro na kompie zapiszesz go pod inną nazwą - ściągasz plik x.txt zapisujesz fhdjfdj.txt :P
Antywirusy nie będą się pluć, że zapisujesz plik na dysku ponieważ to zwykle pliki tekstowe
No ale jak chcesz możesz oczywiście zrobić inaczej :P
Poza tym, jeśli ktoś umieści program na płytce CD, to nie zapisze się plik plik.txt, a do dysku twardego może się pluć jakiś AV, że zapisuje jakieś pliki ;]
Tak samo jak firewall może blokować dostęp do sieci Twojemu programowi albo system nie pozwalać na uruchamiania EXE z CD czy USB. W taki sposób dojdziesz do wniosku, że trzeba opanować cały system, aby mieć pewność, że program się uruchomi ;)
pozatym i co z tego, że ktoś będzie wiedział jaki plik ściągasz z neta skoro na kompie zapiszesz go pod inną nazwą - ściągasz plik x.txt zapisujesz fhdjfdj.txt :P
Problemem nie jest miejsce, z którego pobierany jest plik, ale jego zawartość. Jest to tylko kwestią czasu, aż ktoś odganie jaki plik jest odpowiedzialny za weryfikację (firewall, sniffer, program do mintorowania dysku itd.).
Zawartość pliku musi się zmieniać np. w zależności od aktualnej daty oraz godziny. Jak to zrobić? Piszesz prosty skrypt PHP, który w zależności od daty generuje unikalny numer (np. dodaje rok, m-c, dzień, godzinę i dziesiątki minut - 10 minut to wystarczająco długo, aby program połączył się i pobrał dane). Program robi to samo, a następnie pobiera zaszyfrowaną datę ze skryptu. Jeśli się zgadza, to znaczy, że można uruchomić program. Jeśli nie chcesz, aby program się uruchamiał, to po prostu usuwasz lub zmieniasz skrypt na serwerze. Aby uniknąć problemów z synchronizacją czasu należy pobierać czas z jakiegoś niezależnego serwera.
Co się stanie jeśli ktoś przejmie zaszfrowaną datę? Będzie dysponował informacjami, które pozwolą mu na uruchomienia aplikacji co najwyżej przez 10 minut ;) A dlaczego? Ponieważ znalezienie metody, którą szyfrujesz datę wymaga włamania się na stronę WWW albo debugowania programu. Wątpie, że ktokolwiek będzie chciał się męczyć ;)
Zawartość pliku musi się zmieniać np. w zależności od aktualnej daty oraz godziny. Jak to zrobić? Piszesz prosty skrypt PHP, który w zależności od daty generuje unikalny numer (np. dodaje rok, m-c, dzień, godzinę i dziesiątki minut - 10 minut to wystarczająco długo, aby program połączył się i pobrał dane). Program robi to samo, a następnie pobiera zaszyfrowaną datę ze skryptu. Jeśli się zgadza, to znaczy, że można uruchomić program. Jeśli nie chcesz, aby program się uruchamiał, to po prostu usuwasz lub zmieniasz skrypt na serwerze. Aby uniknąć problemów z synchronizacją czasu należy pobierać czas z jakiegoś niezależnego serwera.
Co się stanie jeśli ktoś przejmie zaszfrowaną datę? Będzie dysponował informacjami, które pozwolą mu na uruchomienia aplikacji co najwyżej przez 10 minut ;) A dlaczego? Ponieważ znalezienie metody, którą szyfrujesz datę wymaga włamania się na stronę WWW albo debugowania programu. Wątpie, że ktokolwiek będzie chciał się męczyć ;)
Pomysł bardzo dobry, jednak wykonanie troszkę mnie przeraża... Bo tak, ktoś kto mieszka w innym państwie będzie miał problem z uruchomieniem aplikacji, bo inna godzina. No i jeśli np. ktoś ma zmienioną datę (bo czasami się zdarza, że musi, np. żeby AV nie minął okres wersji trial :P) to też nic z tego :(. Ale za pomysł brawa :). Chyba, że by zostawił tylko dni, bez godzin... No, ale też jakie szyfrowanie miałoby być? Bo napisałeś:
a następnie pobiera zaszyfrowaną datę ze skryptu.
Może jakiś mały przykład? Bo w programie z porównaniem daty bym sobie poradził, ale gorzej ze skryptem PHP...
Ale i tak dzięki wielkie za pomoc :)
No, ale też jakie szyfrowanie miałoby być?
Jakie tylko zechcesz. Może dodać rok do m-ca, pomnożyć przez dzień, odjąć godzinę itd. Możesz użyć dowolnego algorytmy szyfrowania. Możliwości masz nieograniczone.
<?php // Czas GMT. date_default_timezone_set("Europe/London"); // Pobranie daty oraz godziny. $date = getdate(); $years = $date['year']; $months = $date['mon']; $days = $date['mday']; $hours = $date['hours']; $minutes = $date['minutes']; // Zaokrąglenie minut do dziesiątek (kod będzie unikalny co 10 minut). $minutes = $minutes - $minutes % 10; // Szyfrowanie ;) $code = 2 * $years + 4 * $months * $days - 3 * $hours - 2 * $minutes; // Wyświetlenie wyniku. echo($code); ?>
Ten prosty kod pobiera datę, szyfruje ją i wyświetla. Wrzucasz ten kod na konto WWW pod nazwą "index.php". Jeśli otworzysz stronę, to przeglądarka wyświetli jakąs liczbę. Jeśli w programie pobierzesz plik "http://www.twojastrona.pl/index.php", to również dostaniesz tą liczbę. Wystarczy, że zmienisz linię, w której jest szyfrowanie daty na swój algorytm i taki sam napiszesz w programie.
Pomysł bardzo dobry, jednak wykonanie troszkę mnie przeraża... Bo tak, ktoś kto mieszka w innym państwie będzie miał problem z uruchomieniem aplikacji, bo inna godzina.
Aby uniknąć problemów z synchronizacją czasu należy pobierać czas z jakiegoś niezależnego serwera.
Pobierasz zawsze GMT. Musisz znaleźć sposób pobierania aktualnej daty z sieci albo po prostu skorzystać z tego samego skryptu ;)
<?php // Czas GMT. date_default_timezone_set("Europe/London"); // Pobranie daty oraz godziny. $date = getdate(); $years = $date['year']; $months = $date['mon']; $days = $date['mday']; $hours = $date['hours']; $minutes = $date['minutes']; // Zaokrąglenie minut do dziesiątek (kod będzie unikalny co 10 minut). $minutes = $minutes - $minutes % 10; $date = $years . '-'. $months . '-' . $days . ' ' . $hours . ':' . $minutes; // Wyświetlenie wyniku. echo($date); ?>
Ale za pomysł brawa :)
"pomysł" jest powszechnie wykorzystywany. W niektórych firmach pracownicy muszą dokonywać autoryzacji (np. w celu uzyskania dostępu do urządzenia albo przed wejściem do pomieszczenia). Pracownik ma kartę, która generuje co minutę unikalny kod. Taki sam kod, w takich samych odstępach czasu generuje czytnik kart. Reszty się można domyślać ;)
W twoim przypadku prościej i bezpieczniej jest zrobić hash - np. program losuje wartość liczbową, po czym dopisuje do niej kilka znaków (zawsze takich samych, tzw sól), i robi z tego md5. Na serwer jako parametr get wysyła samą liczbę (http://www.twojastrona.pl/index.php?id=liczba), a skrypt robi to samo co program - dodaje ten sam ciąg znaków i na całości robi md5, po czym zwraca wartość md5. Program ją pobiera i porównuje tą z serwera z samodzielnie wygenerowaną. To, że ktoś może łatwo zauważyć, że przekazujesz wartość liczbową nic nie zmiania, bo bez soli nie da się złamać algorytmu (pod warunkiem, że losujesz z odpowiednio dużego przedziału te liczby - zwykły int powinien wystarczyć, to daje olbrzymia liczbe kombinacji). No i jest niezależny od błędów związanych z datą, i zewnętrznymi serwerami (wystarczy że padnie serw z którego byś pobierał datę i program przestaje działać, tak samo jeśli ktoś go włączy o 23:59:59 to też pewnie się sypnie).
Kod php czegoś takiego jest banalny
echo md5( $_GET['id'] + 'twoj ciag znakow');
i tak samo napisać to w delphi, tu masz unit do md5 http://download.4pro...ers.net/md5.zip
Użytkownik Deadeye edytował ten post 14 luty 2009, 02:52
Dzięki wielkie :) Chyba skorzystam ze sposobu kolegi wyżej :P. A co do md5 w delphi to ja skorzystałem z tej strony. I mi zamiast:
echo md5( $_GET['id'] + 'twoj ciag znakow');
poszło:echo md5($_GET['id'].'twoj ciag znakow');ponieważ w Twoim kodzie miałem cały czas 0.. Wszystkim jeszcze raz dziękuję za pomoc :)
Temat do zamknięcia...
Użytkownik userup edytował ten post 15 luty 2009, 19:48
Ponieważ "+" służy do dodawania liczb, a "." do łączenia ciągów znaków ;)
Ponieważ "+" służy do dodawania liczb, a "." do łączenia ciągów znaków ;)
No tak, przyzwyczajenia z innych języków, gdzie zawsze + służy do łączenia ciągów znaków też.