23.04.2001

Watermarki w keygenach
~~~~~~~~~~~~~~~~~~~~~~
bart

Watermarki czyli inaczej znaki wodne, znacie je z tych fajnych banknotow
z dwoma zerami, tak wiem, ja tez je lubie :).Znaki wodne maja swiadczyc,
o autentycznosci takiego papirusa, ale ta technike tzn. nie w doslownym
tego slowa znaczeniu, mozna zastosowac w keygenach.

Czasami siedzi sie godzinami nad jakims keygenem, pelni dumy wypuszczamy
nasze "dziecko" na ten okrutny swiat, az tu nagle okazuje sie, ze 2 dni
po wypuszczeniu keygena jakis kolo z konkurencyjnej grupy robi serial
do tego samego programu i zastanawiamy sie nieraz czy on rzeczywiscie
jest takie dobry(no bo generacja kluczy to nie byla kaszka z mleczkiem)
czy czasem nie "zwalil" sobie numerka korzystajac z naszego keygena a
potem zbieral laury.Jak wiec zabezpieczyc swojego keygena przed takimi
lamiastymi zagraniami?Sa 2 wyjscia z sytuacji, zalezne od rodzaju
algorytmu uzytego w programie.Nie bede tu przytaczal zadnych kodowych
rozwiazan a jedynie idee takiego zabezpieczenia.Mamy jakis tam program,
ktory podczas rejestracji prosi nas o imie i sn.Serial ma np. postac:

WWWW-xxxx-YYYY-zzzz

i tak 2 i 4 czesc seriala zalezna jest od name, 3 np. jest zalezna od
2 i 1 czesci.Normalnie piszac keygena zazwyczaj robilem tak, generowalem
sobie 2 i 4 czesc na podstawie name, nastepnie 1 czesc byla generowana
przy uzyciu jakichs pseudo-losowych procek i z tego byla liczona ostatnia,
czyli 3 czesc seriala.Przy takim postepowaniu nie ma mozliwosci
zweryfikowania czy jakis znaleziony w sieci serial pochodzi z naszego
keygena.Aby w jakims stopniu zostawic jakies slady mozna przyjac, ze
1 czesc bedzie jakas stala wartoscia np. zeby serial wygladal tak

LAME-xxxx-YYYY-zzzz

takie rozwiazanie jest dobre, ale potencjalni zlodzieje seriali chyba
sie kapna, ze te pierwsze 4 bajty to sygnaturka i raczej nie
skorzystaja z takiego seriala, to dobra metoda bo odstrasza, ale zeby
byl fun najlepiej zrobic nieco inaczej.Generujemy sobie 2 i 4 czesc
seriala, wsadzamy je do jakiegos bufora i np. liczymy z nich sume
CRC32, CRC16 w zaleznosci ile mamy miejsca dla 1 czesci seriala, jesli
jest 8 bajtow do wykorzystania to CRC32 jesli 4 to CRC16, jesli jeszcze
wiecej to mozna pokusic sie o uzycie np. md5, gdy wyliczymy ta unikalna
sume wstawiamy ja jako 1 czesc seriala.Jesli teraz jakis kolo pusci na
net serial do tego proga, z latwoscia bedziemy w stanie zweryfikowac
czy pochodzi on z naszego keygena, liczymy sobie sume CRC32(czy czego tam
uzylismy) z 2 i 4 czesci seriala i jesli okaze sie, ze jest ona rowna
1 czesci seriala to mozemy miec na 99% pewnosc, ze taki serial zostal
wygenerowany naszym keygenem.Co zrobic z takim delikwentem, kiedy
odkryjemy, ze opublikowal serial korzystajac z naszej roboty?Najlepiej,
jesli wyjdzie nowsza wersja programu dla ktorego robilismy keygena,
zrobic do niego keygena ofcoz :) i zamiescic w nfo odpowiednia notke
z nickiem takiej osoby, serialem i grupa do ktorej nalezy, to starcza.

Troche klopotow zaczyna sie robic gdy np. mamy do wykorzystania tylko
2 bajty w serialu, ktore nie sa nijak wykorzystywane przez program, ani
nie sa sprawdzane.Przyznam sie, ze tu nie mozemy miec 99% pewnosci, ze
jak damy tu jakies zaleznosci to potem bedziemy w stanie wykryc taki
sfejkowany serial.Jesli juz bedziemy chcieli sie jakos ustrzec to warto
zastosowac taki trick, zastosujmy stale wartosci 2 bajtow np. 'A' i 'X'
i dodatkowo piszac keygena zrobmy go tak zeby pracowal pod konsola, chodzi
tu o to, ze jesli jakis lama-zlodziej bedzie generowal sobie numerki spod
gui to po nacisnieciu magicznego "generate" bedzie widzial, ze pewne literki
ciagle sa takie same, chyba, ze prog bedzie sie zamykal po wygenerowaniu
1 seriala, a pod konsola generacja bedzie nastepowala tylko raz i byebye.
Watpie czy ktos sie zorientuje, ze 5 generowanych numerow ma w 2 miejscach
ciagle takie same wartosci, no chyba, ze bedzie sprawdzal wszystkie 5
numerkow, ale takich maniakow chyba nie ma ;).Jesli serial ma np. 3 wolne
miejsca, ale nie sa ulozone jeden za drugim, zamiast wstawiac tam stale
wartosci bajtow, lepiej przekopiowac bajty juz wygenerowane w serialu
w miejsce tych dziur, to tez w pewnym stopniu pozwoli zweryfikowac
serial(nie wierze w przypadki), jesli natomiast te 3 bajty uzlozone sa
jeden za drugim, zamiast cudowac najlepiej wstawic tam stala sygnature,
jakis skrot grupy np. CPL.

Jesli prog wymaga przy rejestracji name, ale serial nie ma zadnych luk,
zeby mozna bylo wrzucic tam jakies sygnaturki, mozna zrobic tak, przy
wpisywaniu name prosimy uzytkownika, aby do name na koncu dopisal np.
spacje, to w pewien sposob pozwoli nam wykryc wykradziony serial, bo
jesli prog tego nie wymagal, a ktos puscil serial, zaznaczajac jednoczesnie,
ze na koncu name jest spacja, to chyba bedzie podejrzane.Zamiast dopraszac
sie usera aby wpisal na koncu spacje, mozna ten proces zautomatyzowac,
zeby keygen automatycznie dodawal spacje do name a potem informowal
uzytkownika, ze jego name musi byc w takie postaci ze wzgledu na jakies
tak warunki jakie stawia program.

Najgorszy przypadek to wlasnie kiedy progs nie daje mozliwosci ingerencji
w postac seriala, ktora wylacznie jest zalezna od name.Jesli serial jest
zalezny od name to mozna postapic jak to wyzej napisalem, jesli jest
dodatkowo zalezy od firmy, a nam az tak zalezy na zabezpieczeniu to zawsze
mozna pocisnac kit, ze nazwa firmy jest generowana na podstawie seriala
i nie moze byl dowolna, wtedy wystarczy np. zaszyfrowac name np. jakims
DESem,Blowfishem,TEA itp. zamienic na postac czytelna i wyswietlic jako nazwa
firmy, a serial wygenerowac z name i szyfrogramu.Jesli nazwa firmy nie jest
wykorzystywana podczas generowania seriala(a jest to dosyc czesto spotykane)
mozna postapic podobnie tylko, ze zaszyfrowac wygenerowany serial, albo
zahashowac serial i wynik wyswietlic jako nazwa firmy(a userowi napisac, ze
sa to jakies tajne checki programu, najlepiej jeszcze dodac anty-hakerskie ;)

Apropos company, prostym acz skutecznym sposobem blokujacym mozliwosc
"wykradniecia" seriala przez inna grupe jest shitlista, o tak, shitlista
z nazwami grup, gdy jakis kolo bedzie chcial zarejestrowac prog, a bedzie
pole company, zazwyczaj wpisuje sie tam nazwe swojego teamu, jesli wiec
nasz bambus bezczelnie wpisze nazwe swojej grupki mozemy zrobic np. taki
bajer zeby keygen wywalal windowsa w kosmos, albo "przypadkowo" kasowal
pare plikow np. win.ini etc.Dobrym choc z leksza drastycznym rozwiazaniem
jest zastosowanie shitlisty, ale z nickami osob, ktore naleza do naszych
rodzimych zespolow(a nie jest tego zbyt duzo).Zamiast wieszania windowsa
po wykryciu takiego szwindla mozna np. zrobic tak, zeby wygenerowany serial
byl specjalnie bledny.

Jesli nie zalezy wam na zabezpieczeniach albo sadzicie, ze sa one zbyteczne
bo wszyscy na naszej pl scenie sa tacy ql i ogolnie panuje przyjazn to po kiego
grzyba to czytacie ;).W kazdym razie zycze wam, aby takie incydenty was omijaly,
a jesli juz sie zdarza to nalezy porzadnie zweryfikowac fakty, zanim bedzie
mozna postawic jakies zarzuty.

Swiat jest wielki, ale jeszcze sie spotkamy, cu.

bart^CrackPl
cryogen@poland.com || cryogen@box43.pl || http://www.ctrl-d.prv.pl