Ochrona oprogramowania dla małych dostawców

Jest to problem, który wszyscy musimy rozważyć w pewnym momencie.

Po wielu latach i wielu podejściach generalnie zgadzam się ze statystyką: "W przypadku każdego chronionego oprogramowania używanego przez ponad kilkaset osób można znaleźć pękniętą wersję. Do tej pory każdy program ochrony może być manipulowany." Czy twój pracodawca wymusza stosowanie oprogramowania antypirackiego?

Dalej, za każdym razem, gdy piszę o tym temacie, ktoś mi przypomni; "Po pierwsze, bez względu na jakiego rodzaju ochronę zastosujesz, naprawdę oddany krakers, w końcu przejdzie przez wszystkie bariery ochronne." jaki jest najlepszy stosunek jakości do ceny Ochrona kodu c# dla pojedynczego programisty

Więc nie wytrzymać tych dwóch zasadniczo prawdziwe zastrzeżenia, porozmawiajmy o "Ochrona"!

Nadal uważam, że w przypadku mniejszych aplikacji, które raczej nie zakłócają czasu i uwagi wykwalifikowanego crackera, ochrona jest wartościowym ćwiczeniem.

Wydaje się oczywiste, że bez względu na to, co zrobisz, jeśli cracker może zmienić wynik instrukcji IF (JMP) poprzez łatanie aplikacji, wtedy wszystkie hasła i klucze sprzętowe na świecie nie pomogą.

Więc moje podejście polegało na zaciemnianiu kodu za pomocą wirtualizacji przy użyciu takich produktów jak: http://www.oreans.com/codevirtualizer.php Jestem bardzo zadowolony z tego produktu. O ile wiem, nie został pokonany. Mogę nawet skompresować plik wykonywalny za pomocą PEcompact Czy ktoś jeszcze ma doświadczenie z nim?

Miałem tylko problemy z Execryptorem http://www.strongbit.com/news.asp Nawet strona jest ból głowy w użyciu. Skompilowane aplikacje zawieszą się podczas wykonywania połączeń WMI.

Takie podejście pozwala otaczać mniejsze fragmenty kodu zaciemnieniem, a tym samym chronić kontrolę bezpieczeństwa itp.

Używam metody autoryzacji online, ponieważ aplikacja regularnie potrzebuje danych z serwera, więc korzystanie z niej nie ma sensu jest wyłączony przez dłuższy czas. Z definicji aplikacja jest bezwartościowa w tym momencie, nawet jeśli jest pęknięta.

Więc prosty zaszyfrowany uścisk dłoni jest bardzo dobry. Sprawdzam to od czasu do czasu w ramach ochrony zaciemniającej. Jeśli użytkownik zainstaluje aplikację na innym komputerze, po uruchomieniu zostanie przesłany nowy identyfikator, a serwer wyłączy stary identyfikator i zwróci nową autoryzację.

Używam również hash skompilowanej aplikacji i sprawdzam go przy starcie, aby sprawdzić, czy pojedynczy bit się zmienił, a następnie otwórz aplikację jako plik (z blokadą odczytu) z poziomu aplikacji, aby zapobiec jej zmianie po uruchomieniu.

Ponieważ wszystkie ciągi statyczne są wyraźnie widoczne wplik exe, staram się być ogólny z komunikatami o błędach i tak dalej. Nie znajdziesz nigdzie napisu "Authorization failed".

Aby chronić przed zrzutami pamięci, używam prostej techniki zaciemniania tekstu (jak XOR każdy znak) to sprawia, że zwykłe dane tekstowe w pamięci trudniej odróżnić od zmiennych i tak naprzód.

Wtedy oczywiście istnieje AES dla wszelkich danych, które są naprawdę wrażliwe. Lubię tryb licznika dla tekstu, ponieważ nie powoduje to powtarzania sekwencji ujawniających podstawowe dane, jak Sekwencja białych spacji.

Ale przy tych wszystkich technikach, jeśli klucz lub wektor inicjalizacji mogą być zrzucane z pamięci lub Instrukcja IF ominięte, wszystko jest marnowane.

Używam raczej instrukcji switch niż instrukcji warunkowej. Następnie tworzę drugą funkcję, która jest zasadniczo ślepy zaułek zamiast funkcji, która faktycznie wykonuje pożądane zadanie.

Innym pomysłem jest kodowanie wskaźników z dodaną zmienną. Zmienna jest wynikiem autoryzacji (Zwykle zero). To nieuchronnie doprowadzi do GPF w pewnym momencie. Używam tego tylko w ostateczności, gdy kilka autoryzacji niższego poziomu nie powiodło się, w przeciwnym razie prawdziwi użytkownicy mogą go napotkać. Wtedy reputacja Twojego oprogramowania zostanie obniżona.

Jakich technik używasz?

(to jest Nie wątek debatujący o zaletach realizacji czegoś. Jest przeznaczony dla tych, którzy zdecydowali się coś zrobić)

Author: Community, 2008-12-05

7 answers

Nie zgadzam się xsl.

Chronimy nasz kod, nie dlatego, że chcemy chronić nasze dochody - akceptujemy, że ci, którzy by go używali bez licencji, prawdopodobnie nigdy by za niego nie zapłacili.

Zamiast tego robimy to, aby chronić inwestycję nasi klienci dokonali w naszym oprogramowaniu . Uważamy, że korzystanie z naszego oprogramowania czyni je bardziej konkurencyjnymi na rynku i że jeśli inne firmy mają do niego dostęp bez płacenia, mają nieuczciwą przewagę - oznacza to, że stają się one jako konkurencyjne bez kosztów ogólnych licencji.

Jesteśmy bardzo ostrożni, aby zapewnić, że ochrona-która jest uprawiana w domu-jest tak Dyskretna, jak to możliwe dla ważnych użytkowników, i w tym celu nigdy nie rozważymy "zakupu" rozwiązania z półki, które może mieć na to wpływ.

 12
Author: Martin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-05 12:21:13

Nie potrzebujesz kilkuset użytkowników, aby uzyskać pęknięcie oprogramowania. Wkurzyło mnie, że mój shareware pękł tak wiele razy, więc jako eksperyment stworzyłem program o nazwie Magic Textbox (który był tylko formą z textbox na nim) i wydał go do witryn shareware(miał swój własny plik PAD i wszystko). Dzień później dostępna była pęknięta wersja Magic Textbox.

To doświadczenie sprawiło, że przestałem próbować chronić moje oprogramowanie czymś więcej niż podstawowe zabezpieczenie przed kopiowaniem.

 12
Author: MusiGenesis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-05 14:07:40

Osobiście korzystam z technik kodowania omówionych tutaj. Te sztuczki mają tę zaletę, że niedogodności dla piratów nie utrudniają życia Twoim legalnym użytkownikom końcowym]}

Ale bardziej interesujące pytanie nie brzmi "co", ale "dlaczego". Zanim Sprzedawca oprogramowania podejmie się tego typu ćwiczeń, naprawdę ważne jest zbudowanie modelu zagrożeń. Na przykład zagrożenia dla tanich gier B2C są zupełnie inne niż dla aplikacji B2B o wysokiej wartości.

Patryk Mackenzie ma dobry esej, w którym On omawia niektóre zagrożenia , w tym analizę 4 rodzajów potencjalnych klientów. Zalecam przeprowadzenie analizy zagrożeń dla własnej aplikacji przed podjęciem decyzji o ochronie modelu biznesowego.

 9
Author: RoadWarrior,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-05 12:08:53

Zaimplementowałem hardware keying (Dongle) przed sobą, więc nie jestem całkowicie obeznany z problemami. Właściwie, dużo o tym myślałem. Nie zgadzam się z nikim, kto łamie prawo autorskie, tak jak to robią twoje krakersy. Każdy, kto nie chce legalnie uzyskać kopii Twojego oprogramowania, powinien się bez niego obejść. Nigdy nie naruszam praw autorskich do oprogramowania. Skoro tak mówisz...

Naprawdę, naprawdę nie podoba mi się słowo "chronić" używane tutaj. Jedyną rzeczą, którą próbujesz chronić jest Twoją kontrolą . Nie chronisz oprogramowania. Oprogramowanie jest w porządku tak czy inaczej, tak jak Twoi użytkownicy.

Powodem, dla którego powstrzymywanie ludzi przed kopiowaniem i udostępnianiem Twojego oprogramowania jest tak bezbożne, jest to, że zapobieganie takim czynnościom jest nienaturalne. Cała koncepcja komputera obraca się wokół kopiowania danych, i to jest prosta ludzka natura, aby chcieć dzielić się przydatnymi rzeczami. Możesz walczyć z tymi faktami, jeśli naprawdę nalegasz, ale będzie to walka na całe życie. Bóg nie jest zmienianie ludzi w inny sposób, a ja nie kupuję komputera, który nie potrafi kopiować rzeczy. Może lepiej byłoby znaleźć sposób na pracęz komputerami i ludźmi, zamiast walczyć z nimi cały czas?

Ja, wraz z większością profesjonalnych programistów, jestem zatrudniony na pełny etat przez firmę, która potrzebuje oprogramowania opracowanego po to, aby mogła prowadzić swoją działalność, a nie po to, aby mogła mieć "oprogramowanie" ze sztucznym niedoborem do "sprzedaży" użytkownikom. Jeśli napiszę coś ogólnie użytecznego (co nie jest tutaj uważane za "przewagę konkurencyjną"), możemy wydać to jako wolne oprogramowanie. Nie jest potrzebna" Ochrona".

 7
Author: T.E.D.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-05 15:08:06

Z niektórych linków:

Koncept, który próbowałem wyjaśnić, to coś, co nazywam "rozprzestrzenianiem się pęknięć". Nie ma znaczenia, że crack (lub keygen, lub piracki serial, lub cokolwiek) istnieje dla Twojej aplikacji. Liczy się to, ile osób ma dostęp do cracku.

Gdzie / Kiedy sprawdzić numer seryjny: sprawdzam raz przy starcie. Wiele osób mówi "sprawdź w różnych miejscach", aby utrudnić komuś złamanie przez rozebranie czeku. Jeśli chcesz być szczególnie przykre dla crackera, sprawdzić w różnych miejscach za pomocą kodu inlined (tzn. nie zewnętrznie to wszystko do SerialNumberVerifier.klasy) i jeśli w ogóle możliwe, aby wielowątkowe i trudne do rozpoznania, gdy zawiedzie, zbyt. Ale to po prostu sprawia, że trudniej zrobić crack, nie niemożliwe, i pamiętaj, że twoim celem jest na ogół nie pokonać cracker. Pokonanie krakera nie czyni cię znaczącą kwotą pieniędzy. Wystarczy pokonać przypadkowego użytkownika w większości przypadków, a przypadkowy użytkownik nie ma dostępu do debuggera ani nie wie, jak go używać.

Jeśli zamierzasz zadzwonić do domu, powinieneś zadzwonić do domu z informacjami o użytkowniku i zaakceptować numer seryjny jako wyjście skryptu serwera, a nie zadzwonić do domu z numerem seryjnym i zaakceptować boolean itp. jako wyjście. tj. powinieneś wykonywać wstrzykiwanie klucza, a nie weryfikację klucza. Weryfikacja klucza musi ostatecznie nastąpić w aplikacji, dlatego krypto klucza publicznego jest najlepszym sposobem na to to. Powodem jest to, że połączenie z Internetem jest również w rękach przeciwnika :) jesteś hosts file change away from a break-once, break-everywhere exploit jeśli twoje oprogramowanie oczekuje tylko odczytu boolean z Internetu.

Nie rób "interesującej" lub "wymagającej" ochrony. Wiele krakersy pękają na wyzwanie intelektualne sam. Spraw, aby Twoja ochrona była trudna do złamania, ale tak nudna, jak to możliwe.

Istnieją pewne pęknięcia, które szukają wzorców bajtów w poszukiwaniu miejsce do łatania. Zazwyczaj nie są pokonane przez przekompilowanie, ale jeśli .EXE jest pakowany (przez ASProtect, Armadillo, itp) tego rodzaju pęknięcia muszą najpierw rozpakować .EXE.. a jeśli używasz dobrego pakowacza, takiego jak ASProtect, cracker będzie w stanie rozpakować EXE ręcznie za pomocą debugera poziomu montażu, takiego jak SoftICE, ale nie będzie w stanie stworzyć narzędzia, które rozpakuje .EXE automatycznie (aby później zastosować łatki bajtowe).

 4
Author: Mike Trader,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-06 16:29:00

Xsl, to bardzo wąski punkt widzenia z wieloma wbudowanymi założeniami.

Wydaje mi się oczywiste, że każda aplikacja, która polega na dostarczaniu czegoś z serwera pod twoją kontrolą, powinna być w stanie wykonać dość dobrą robotę, zastanawiając się, kto ma ważne konto!

Jestem również przekonany, że regularne aktualizacje (czyli nowo skompilowana aplikacja z kodem w różnych lokalizacjach) sprawią, że pęknięte wezriony szybko staną się przestarzałe. Jeśli aplikacja komunikuje się z serwerem, uruchomienie wtórny proces wymiany głównego pliku wykonywalnego co tydzień to bułka z masłem.

Więc tak, nic nie jest nie do złamania, ale z jakimś sprytnym wewnętrznym projektem, staje się kwestią sporną. Jedynym czynnikiem, który jest znaczący jest to, ile czasu są krakersy skłonni wydać na to, i ile wysiłku są Twoi potencjalni klienci skłonni wywierać próbując znaleźć produkt swoich wysiłków na tydzień lub nawet codziennie!

Podejrzewam, że jeśli Twoja aplikacja dostarcza użytecznej wartości funkcja wtedy będą gotowi zapłacić za to uczciwą cenę. Jeśli nie, konkurencyjne produkty wejdą na rynek, a twój problem sam się rozwiązał.

 3
Author: Mike Trader,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-06 15:41:50

Używałem. NET Reactor w przeszłości z dobrymi wynikami - http://www.eziriz.com/

To, co mi się podobało w tym produkcie, to to, że nie wymagało od Ciebie zaciemniania kodu, aby mieć całkiem dobrą ochronę.

 2
Author: Sam Schutte,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-05 14:23:17