Zabezpieczanie aplikacji .NET a licencjonowanie

0

Zapewne juz padly na forum pytania o obfuscatory ja chcialem sie zapytac jak to sie ma do
tworzenia licencji (numerow seryjnych etc).

Przeciez nawet jesli program zostanie zaciemniony, to i tak daje sie go zdekompilowac do formy dosc czytelnej (zmienne ponazywane w dziwny sposob, przynajmnie tak dzialaja te darmowe obfuscatory - a przynajmniej takie trafilem).
Wiadomo, kazde zabezpieczenie da sie obejsci, jednak rozgryzienie .NET wydaje sie o wiele prostsze niz kodu maszynowego.

Zatem pytanie: Z jakimi sposobami spotkaliscie sie przy zabezpieczaniu aplikacji .NET?
(chodzi tu zarowno o ukrycie kodu, jak i tworzenie wersji trial w miare zabezpieczonych)

(pomijam wszystkie platne aplikacje wyskakujace po wpisani paru hasel w google - one nie zawieraja wyjasnienia - mozna je co najwyzej kupic)

ps. mam wrazenie, ze tu tylko klucze USB, LPT maja jakis sens. Jednak moze sie myle ... i tak pewnie jest

0

Mimo zaciemniaczy to i tak dostaje ładny kodzik, a bez nich to już w ogóle czysty C# jak był pisany (za wyjątkiem nazw zmiennych). Cieżka sprawa z tymi numerami seryjnymi - może umieścić w kodzie skrót numeru seryjnego i funkcje hashu SHA-1. Użytkownik będzie musiał wpisać numer seryjny, którego nie ma nigdzie, a w kodzie jedynie skrót.

Co prawda nie mam pojęcia czy to jest rozwiązanie profesjonalne - ale jedyne co przychodzi do głowy.

0

Tak istotnie, podobnie mozna zrobic z unikalnym numerem (bazujac np na sprzecie).
Mozna tez umiescic funkcje w dll skompilowanym w kodzie maszynowym a nie msmil.

Jednka zawsze zostaje w kodzie linijka typu

if (RejestracjaSiePowiodla) 
{
  wpusc_dalej();
}
else
{
  dowidzenia();
}

zatem kazdy, w banalny spsob moze to obejsc (nie musi szukac jmp, adresow w pamieci etc.) i zastanawiam sie jak to najlepiej ugryzc.

Widzialem ciekawy (niestety platny) zaciemniacz, ktory powodowal calkowite znikniecie kodu wewnatrz funkcji. Ciekawi mnie jak zaciemnic/ukryc kod jednej z funkcji ... nie chce tez zaciemniac pozostalych.

0

też mnie kiedyś podobny problem zabezpieczania aplikacji .NETowych zastanawiał. Nie znalazłem dobrej recepty wykorzystującej czysto .NETowe rozwiązania, ale zapewne nie szukałem wystarczająco długo i dogłębnie.

Wydaje mi się, że przed reverse engineeringiem zabezpieczyć mogą w jakimś stopniu chyba tylko obfuscatory i kod niezarządzany, tak jak pisaliście; tak więc algorytm w jakiś sposób można ukryć.
Jeśli chodzi o problem assembly tampering - wydaje się, że mechanizmy CAS (code access security) wbudowane w runtime, np. assembly signing, identities i permissions mogą go rozwiązać.

Jestem ciekaw rozwiązań innych. Piszcie :)

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