Temat: Zabezpieczenie aplikacji
Zmieniając odrobinę temat..
Czy naprawdę potrzebujesz takich zabezpieczeń? ostatnio celem przekonania się i sprawdzenia na ile skuteczne metody licencjonowania w .NET-cie są dla sportu i w celach edukacyjnych starałem się obejść zabezpieczenia w: NHProf i RedGate SQL Data Generator... z powodzeniem.
Złamanie tego zajęło mi 15 minut: Reflector + Reflexi. Szukasz Main() programu i idziesz do momentu aż znajdziesz:
if(!LicencjaJestOK())
i w MSIL zmieniasz instrukcję skoku albo ją całkiem wywalasz i program działa.
Jak widać jakiekolwiek zabezpieczenie jest bez sensu, klucze, web service, moc enkrypcji.. jak najsłabszym ogniwem jak Twój kod.
Tak długo jak system wykonuję się po stronie klienta, kod wykonuję się na jego maszynie tak długo można to złamać. Łamane są gry napisane w C++ (trochę trudniej się to dekompiluje), systemu operacyjne, telefony komórkowe, dekodery satelitarne, wszytko.
W momencie kiedy ktoś w googlach wpisuję: "[twoj system] crack" albo "[twoj system] rapidshare" to już wiesz, że taka osoba w życiu nie zapłaci za Twój system. Już prędzej poszuka jakiegoś zamiennika, innego skrakowanego podobnego systemu albo jak ma skill to sama to złamie (mało prawdopodbne, ale prawdopodobne, że ktoś już to złamał i umieścił w sieci).
Dlatego musisz bardziej dbać o tą część która faktycznie ma zamiar za Twój system zapłacić.
W taki sposób jak komplikujesz życie użytkownikom, zmuszając ich do weryfikacji na podstawie sprzętu, łączenia z web servicem jest z góry traktowaniem Twoich klientów jak potencjalnych złodziei. Zły PR.
Celem mechanizmów licencyjnych jest to, żeby jak to się mów: "Keeping the honest clients honest".
Czyli jak ktoś ma do wyboru:
- Kupić Twój system
- Ukraść go
to druga opcja była dla niego trudniejsza i żeby wiedział, że łamie prawo, żeby ściągając go z jakiegoś źródła nie pomyślał, że to jest freeware, żeby wiedział że kiedyś będzie trzeba zapłacić za ten system.
O takich ludzi dbaj, o tych co są gotowi zapłacić. Walcz o nich tak, że jedyne co będziesz wymagał to jakiś prosty klucz licencyjny którego nie trzeba onlinowo weryfikować, nie będzie łączył się z niczym itd..
Przykład: kiedyś pamiętam, za czasów kiedy miałem więcej czasu na granie kupowałem gry które były zabezpieczone securom.
Kilka razy miałem taki przypadek że ten securom tak cwaniaczył, że musiałem po prostu ściągnąć do zakupionej gry cracka i dopiero odpalić - inaczej nie ruszyła.
Nigdy nie jest tak, że ktoś widzi jakiś system płatny, stara się złamać a jak się nie uda to go kupi. Takie rzeczy dzieją się tylko w umysłach programistów ;)