Zabezpieczenia...



Widzisz wersję archiwalną tematu "Zabezpieczenia..." z forum pl.comp.programming





Patryk Kobierski - 21 Lip 1998, 03:00

Hej :)

Mam zamiar zabezpieczyc troszeczke swoj programik. Jako ze jest on typowo
"sieciowy" myslalem np. o sprawdzaniu numeru karty sieciowej.
Pytanie jest nastepujace: jak ja odczytac pod Win95?

        pozdrawiam



Jacek Szpyrka - 21 Lip 1998, 03:00


Hej :)

Mam zamiar zabezpieczyc troszeczke swoj programik. Jako ze jest on typowo
"sieciowy" myslalem np. o sprawdzaniu numeru karty sieciowej.
Pytanie jest nastepujace: jak ja odczytac pod Win95?



Niestety nie odpowiem na pytanie bo nie wiem.
Chcialem sie jednak podzielic refleksjami na temat zabezpieczania programów.

Swój program zabezpieczylem w ten sposób, ze uzytkownik musi podac imie,
nazwisko, adres i kod. Kod jest obliczany na podstawie imienia, nazwiska i
adresu i sprawdzany z tym co podal uzytkownik. Po jakims czasie dwie osoby
pochwalily mi sie, ze udalo im sie to zlamac. Jedna "rozpracowala" sposób
obliczania kodu. Druga scrackowala program. Przed kolejnymi atakami

taki algorytm przeksztalcania imienia ... na kod, ze jest po prostu
niemozliwe jego odtworzenie - oczywiscie w stosunkowo krótkim czasie, czyli
najblizsze 100 lat.
Niestety ciagle nie mam pomyslu na zabezpieczenie programu przed
scrackowaniem. Wydaje mi sie, ze jest to po prostu niemozliwe, ale moze
jestem w bledzie i ktos wie ze mozna to zrobic. Oczywiscie nie mysle o
zadnych kluczach hardwerowych tylko o metodzie czysto softwerowej.

pozdrawiam
Porkis (Jacek Szpyrka)

http://www.kki.net.pl/porkis, http://polbox.com/p/porkis

Jezeli zabezpieczysz program tak jak wlasnie myslisz to:
1) jezeli program jest slaby to nie ma go po co zabezpieczac bo i tak nikt
go nie bedzie chcial
2) jezeli program jest dobry to ktos szybko zrobi cracka


Baba Naga - 21 Lip 1998, 03:00


Niestety ciagle nie mam pomyslu na zabezpieczenie programu przed
scrackowaniem. Wydaje mi sie, ze jest to po prostu niemozliwe, ale moze
jestem w bledzie i ktos wie ze mozna to zrobic. Oczywiscie nie mysle o
zadnych kluczach hardwerowych tylko o metodzie czysto softwerowej.



Przed skrackowaniem oczywiście trudno, ale można postawić na serwerze
i każdorazowo autoryzować klienta i wykonywać instalację w/g poleceń z
serwera, dla każdego klienta może być własny klucz a także instalator
może być za każdym razem pobierany z serwera.


Łukasz Bromirski - 22 Lip 1998, 03:00


Swój program zabezpieczylem w ten sposób, ze uzytkownik musi
podac imie, nazwisko, adres i kod. Kod jest obliczany na podstawie
imienia, nazwiska i adresu i sprawdzany z tym co podal uzytkownik.
Po jakims czasie dwie osoby pochwalily mi sie, ze udalo im sie to
zlamac. Jedna "rozpracowala" sposób obliczania kodu. Druga
scrackowala program. Przed kolejnymi atakami pierwszej z tych osób

przeksztalcania imienia ... na kod, ze jest po prostu
niemozliwe jego odtworzenie - oczywiscie w stosunkowo krótkim
czasie, czyli najblizsze 100 lat.



Niedlugo ktos znowu pochwali ci sie ze to zlamal. Nawiasem mowiac,
to bardzo "zdrowa" sytuacja - miec kogos, kto napadnie ci na

to mu sie uda, nie rozpowszechni tylko Cie zawiadomi ze zrobil to
tak i tak i to chyba trzeba by poprawic.

Zauwaz, ze wszyscy autorzy twierdza, ze ich zabezpieczenia sa
"nierozpracowywalne przez najblizsze 100 lat"...

Pozdrawiam,
-----------------------------------------------------------------------
Łukasz Bromirski                    || e-mail to:

Dział Telekomunikacji Agora S.A     ||        or:    

               http://er2.topnet.pl || http://www.kki.net.pl/~lbrom/
-----------------------------------------------------------------------



Rafal Fagas - 22 Lip 1998, 03:00

Mam zamiar zabezpieczyc troszeczke swoj programik. Jako ze jest on typowo
"sieciowy" myslalem np. o sprawdzaniu numeru karty sieciowej.
Pytanie jest nastepujace: jak ja odczytac pod Win95?



Jest kilka sposobow:

1. Jeden z nich polega na zarejestrowaniu nowego obiektu OLE (wtedy szesc
dolnych bajtow GUID'a zawiera adres karty sieciowej)

2. Mozna sobie rowniez odczytac status adaptera NetBIOS. W jednym z pol
zwracanej struktury znajduje sie adres karty.

3. Albo uruchomic WINIPCFG z opcja BATCH i przetworzyc uzyskany plik
tekstowy.

Pozdrowienia
Rafal Fagas

http://www.lfnetworks.com


Ultor - 22 Lip 1998, 03:00

Moglbys udzielic troche dokladniejszych informacji
na temat tego algorytmu ? Co on wykorzystuje ?
Czy do tworzenia klucza wykorzystales one-time pada ?
Masz tam wlasny generator liczb losowych itp. ?

Jacek Szpyrka - 22 Lip 1998, 03:00


Moglbys udzielic troche dokladniejszych informacji
na temat tego algorytmu ? Co on wykorzystuje ?



Oczywiście. Nawiasem mówiąc wiele osób go zna, choć być może o tym nie
wiedzą.

Czy do tworzenia klucza wykorzystales one-time pada ?



A co to jest "one-time pad"?

Masz tam wlasny generator liczb losowych itp. ?



Algorytm jest następujący:

Bierzemy (implementujemy) algorytm szyfrowania danych RSA.
Generujemy sobie (np. programem "derive") dwa zestawy kluczy.
Mamy więc dwie funkcje szyfrujące i dwie deszyfrujące.
Charakteryzują się one tym, że znając funkcję szyfrującą nie można otrzymać
funkcji deszyfrującej i na odwrót.
Poza tym E(D(W)) = W i D(E(W)) = W czyli są to funkcje nawzajem odwrotne.

Dalej robi się tak:

Klient przysyła pieniądze i swoją nazwę N (imię, nazwisko itd.).
Otrzymuje za to kod K = E1(E2(N)).
Program (u klienta) sprawdza czy E1(N) = D2 (K).

Zauważmy, że ewentualny hacker może poznać tylko E1 i D2. Nie może jednak
poznać E2 i D1.
Nie jest więc w stanie wygenerować własnego zestawu N i K.

pozdrawiam
Porkis (Jacek Szpyrka)

http://www.kki.net.pl/porkis, http://polbox.com/p/porkis


Jacek Szpyrka - 22 Lip 1998, 03:00


Zauwaz, ze wszyscy autorzy twierdza, ze ich zabezpieczenia sa
"nierozpracowywalne przez najblizsze 100 lat"...



Ja swój poprzedni algorytm ocenialem na jakies kilka godzin rozpracowywania
i liczylem na to, ze nikomu nie bedzie chcialo sie rozpracowywac programu za
10 zlotych.

pozdrawiam
Porkis (Jacek Szpyrka)

http://www.kki.net.pl/porkis, http://polbox.com/p/porkis


Ultor - 25 Lip 1998, 03:00

Oczywiście. Nawiasem mówiąc wiele osób go zna, choć być może o tym nie
wiedzą.



:)

| Czy do tworzenia klucza wykorzystales one-time pada ?
A co to jest "one-time pad"?



one-time PAD - raz wystepujacy klucz :). Mniejwiecej tak
to mozna przetlumaczyc. Poniekad systemy cryptujace wykorzystujace
algorytmy pseudo random sa tez typu one-time PAD, ale
ofcos one sa troche zbyt latwe do przewidzenia wiec nie sa
zaliczane do tego typu.

| Masz tam wlasny generator liczb losowych itp. ?
Algorytm jest następujący:

Bierzemy (implementujemy) algorytm szyfrowania danych RSA.




Generujemy sobie (np. programem "derive") dwa zestawy kluczy.
Mamy więc dwie funkcje szyfrujące i dwie deszyfrujące.



spoko

Charakteryzują się one tym, że znając funkcję szyfrującą nie można otrzymać
funkcji deszyfrującej i na odwrót.



przy RSA to chyba oczywiste

Poza tym E(D(W)) = W i D(E(W)) = W czyli są to funkcje nawzajem odwrotne.

Dalej robi się tak:

Klient przysyła pieniądze i swoją nazwę N (imię, nazwisko itd.).
Otrzymuje za to kod K = E1(E2(N)).
Program (u klienta) sprawdza czy E1(N) = D2 (K).

Zauważmy, że ewentualny hacker może poznać tylko E1 i D2. Nie może jednak
poznać E2 i D1.
Nie jest więc w stanie wygenerować własnego zestawu N i K.



spoko, tylko ze algorytm RSA juz byl wczesniej wymyslony :)

Moj crypter dziala mniejwiecej tak:
1:
Pobiera 20000 bajtow z pliku
2:
Teraz generuje 3 zmienne. Wykorzystujac do tego 3 fajne
funkcje z ktorych obliczenia nie mozna odwrocic :).
Np. jedna zmienna jest generowana przez
 sin(literka_hasa^3) pozniej dodatkowe pokrecone
funkcje.
3:
Ustawia Pascalowe RandomSeed na podstawie jednej takiej zmiennej.
4:
Przeprowadza operacje matematyczne na kazdym bajcie ( z tych 20000 ).
Sa to np. dodawanie dwoch wczesniej utworzonych zmiennych do bajtu.
Przexorowanie przez pseudo losowana liczbe.
Przexorowanie przez liczbe wylosowana z juz wylosowanej :).
5:
Generowanie klucza oparte na wlasnym generatorze liczb pseudo
losowych. Generowanie jest w sumie proste. Klucz ma tyle samo
ile dane z pliku czyli 20000 b, to zapewnia podstawowe
bespieczenstwo klucza, a generowanie polega na przexorowaniu
kazdego bajtu klucza przez wylosowana litere z hasla :)+drobne
dodatki.
6:
Przexorowanie tych 20000 bajtow jeszcze przez klucz.
7:
Dodawanie smiecia zeby wielkosc pliku nie byla taka sama ( jeszcze
nie zrobilem )
8:
Zapisanie 20000 bajtow i sprawdzenie czy sa nastepne ... jesli
tak to znowu pobiera sie 20000 bajtow i tak w kolko.

Mysle ze to calkiem bezpieczny algorytm, ale zaloze sie, ze ludzie
ktorzy sie na tym znaja zcrackowali by plik zakodowany przy jego
uzyciu w jeden dzien :).

Jesli chodzi o bezpieczne zacryptowanie czegos, to niech ktos sprobuje
mi cos takiego zcrackowac. Cryptujemy cos za pomoca PGP ... teraz
to juz zacryptowane cryptujemy jakims algorytmem DESo podobnym,
nastepnie obrabiamy to jakims algorytmem typu RSA i na koniec jakims
exotycznym crypterem z Rosji :). No, jesli uwazamy ze to jeszcze za
malo to przerabiamy wszystko wlasnym prymitywnym algorytmem. Niech
mi teraz ktos powie jak cos takiego mozna zlamac ? Jak dla mnie
to takie zabespieczenie w zupelnosci wystarczy hehe i eleeta
rzadowa raczej tego nie ruszy :). Po pierwsze nawet nie dojda do tego
czym to bylo cryptowane ... po drugie nie potrafia zlamac PGP i musza
rozpracowywac exotycznego cryptera z Rosji o ile w ogule wpadna
na to, ze to bylo cryptowane tym crypterem. Jeszcze jedno,
jesli mamy dobra i pewna pamiec, to mozemy to wszystko zacryptowac
za kazdym razem zmieniajac haslo :). Po prostu zycze powodzenia :)))
w crackowaniu.


Mariusz Drozdziel - 25 Lip 1998, 03:00


 jestem w bledzie i ktos wie ze mozna to zrobic. Oczywiscie nie mysle o
 zadnych kluczach hardwerowych tylko o metodzie czysto softwerowej.

        Jeżeli grzebiemy w kodzie programu, to klucze hardwarowe można tak
samo prosto obejść jak softwarowe.


Jacek Szpyrka - 26 Lip 1998, 03:00


| Charakteryzują się one tym, że znając funkcję szyfrującą nie można
otrzymać
| funkcji deszyfrującej i na odwrót.

przy RSA to chyba oczywiste



Dla tych, którzy znają RSA rzeczywiście jest to oczywiste.

spoko, tylko ze algorytm RSA juz byl wczesniej wymyslony :)



Koło też wymyślono już dawno, a deskorolkę... :)

Moj crypter dziala mniejwiecej tak:



No tak, ale do szyfrowania danych można użyć po prostu PGP i już.

pozdrawiam
Porkis (Jacek Szpyrka)

http://www.kki.net.pl/porkis, http://polbox.com/p/porkis


Rafał Czeczótka - 27 Lip 1998, 03:00

Przydlądałem się tej dyskusji z daleka, ale wydaje mi się, że pewne
rzeczy wymagają wyjaśnienia:

[...]
: one-time PAD - raz wystepujacy klucz :). Mniejwiecej tak
: to mozna przetlumaczyc. Poniekad systemy cryptujace wykorzystujace
: algorytmy pseudo random sa tez typu one-time PAD, ale
: ofcos one sa troche zbyt latwe do przewidzenia wiec nie sa
: zaliczane do tego typu.

Co do tego, że "One time PAD" to jest system z jednokrotnym kluczem
zgoda. Cała reszta jednak nie jest prawdą. Dziś jedynym sensownym

szpiegowskich (jeden klucz--jedna wiadomość który jest niszczony
zaraz po jej wysłaniu). Poza tym wszelkie zastosowania tego protokołu
są piekielnie niepraktyczne (lub nie są OTPAD).

[...]
:Charakteryzują się one tym, że znając funkcję szyfrującą nie można otrzymać
:funkcji deszyfrującej i na odwrót.

: przy RSA to chyba oczywiste

Przy RSA jedyną oczywistą rzeczą jest, że dla każdego klucza _można_
znaleźć jego drugą połowę. Cała moc RSA polega na tym, że dla niektórych
kluczy jest to (jeszcze) technicznie niewykonalne (ponieważ _znane_
nam sposoby wymagają _dużych_ mocy obliczeniowych dla _dużych_ liczb).
Jednak klucze o długości poniżej 150bitów podejrzewam, że są łamliwe
na zwykłym pececie w ciągu co najwyżej paru godzin (pomijam już
całkowicie sprawę losowości czynników i ich pierszeństwa). Jeśli
więc używane czynniki są zbyt małe to złamanie takiego RSA może
być trywialne.

Poza tym, przecież chyba wszystkie podane tu sposoby "zabezpieczania"
typu:

if(bardzo_skomplikowane_testy_anty_crackerskie()) {
  mój_genialny_program();

}



można złamać w prosty sposób, wstawiając jedno asemblerowe "jmp":

goto zawsze_w_porządku;
if(bardzo_skomplikowane_testy_anty_crackerskie()) {
zawsze_w_porządku:
  mój_genialny_program();

}



Oczywiście żadnego programu nie da się zabezpieczyć całkowicie
(patrz polonizacja bodaj PCWrite'a naście lat temu, kiedy ktoś
zrobił disasemblację całego programu a następnie dokonał jego
w miarę dobrej (jak na owe czasy) lokalizacji). Jednak dobrze
zaprojektowane, wykonane i używane klucze sprzętowe mogą oczywiście
strasznie zatruć życie człowiekowi, który chciałby ukraść nasz
program (szczególnie, jeśli część funkcji programu jest realizowana
w tym właśnie kluczu).

Co do zabezpieczeń programowych to dobrą praktyką jest, jeśli jakiś
wynik poprawnej autoryzacji brany jest do dalszych obliczeń. Np. jeśli
użytkownik musi przy wejściu do programu podać hasło i jednocześnie
algorytm przy pozytywnym wyniku zwraca nam jeszcze jakąś niejawną
magiczną liczbę (weźmy x=5.4321) która jest później uwzględniania
przy jakichś obliczeniach (np. stawki podatków są w programie postaci
y=stawka/x to dopiero y*x daje nam poprawną wartość). W takiej sytuacji
dopiero bardzo wnikliwa analiza może doprowadzić do złamania programu
(jeśli zrobimy to dobrze, to dla crakera może nizbędna być znajomość
poprawnych danych wejściowych (hasło), co nie zawsze zachodzi).
Oczywiście jeśli zrobimy podobną rzecz z kluczem sprzętowym łamanie
może być piekielnie trudne (np. klucze HASP mają wbudowaną funkcję
haszującą, unikalną dla każdej serii, którą oczywiście można
wykorzystać do powyższego celu).

Filtrowanie pakietow // udostepnianie katalogow98
SSL i certyfikaty
Funkcja process i error. Do czego służą?
DOS..
  • podstrona 24960
  • ban na hosta
  • czeladz siatki ogrodzeniowe
  • sygiet rachow
  • zyczenia na kartki okolicznosciowe
  • ogrody architektura krajobrazu projekty
  • wysoka temperatura i cisnienie w wezach
  • wojna 2008
  • problem z uruchomieniem kompa
  • Katalog wypowiedzi z for internetowych ^^ Strona Główna