2008-12-05 10 views
17

Jest to problem, który wszyscy musimy rozważyć w pewnym momencie.Ochrona oprogramowania dla małych dostawców

Po wielu latach i wielu podejściach zgadzam się ogólnie z określeniem: "W przypadku każdego oprogramowania chronionego używanego przez więcej niż kilkaset osób, można znaleźć wersję pękniętą. naruszone." Does your employer enforce the use of anti-piracy software?

Co więcej, za każdym razem, gdy piszę o tym temacie, ktoś mi przypomni; "Przede wszystkim, bez względu na rodzaj ochrony, którą zatrudniasz, prawdziwie zaangażowany kraker przeżyje w końcu wszystkie bariery ochronne." What's the best value for money c# code protection for a single developer

Tak więc, nie znosząc tych dwóch, ogólnie rzecz biorąc, prawdziwych zrzeczeń, porozmawiajmy o "ochronie"!

Wciąż uważam, że w przypadku mniejszych aplikacji, które raczej nie będą przesłuchiwać czasu i uwagi wykwalifikowanego dziadka, ochrona JEST warta wysiłku.

Wydaje się oczywiste, że bez względu na to, co zrobisz, jeśli cracker może zmienić wynik instrukcji JEFF (jmp), łatając aplikację, wtedy wszystkie hasła i klucze na świecie nie pomogą.

Moje podejście polegało na zaciemnianiu kodu przy użyciu wirtualizacji za pomocą produktów takich jak: http://www.oreans.com/codevirtualizer.php Jestem bardzo zadowolony z tego produktu. Według mojej wiedzy nie został on pokonany. Mogę nawet skompresować plik wykonywalny z PEcompact Czy ktoś inny ma z tym doświadczenie?

Miał tylko problemy z EXEcryptor http://www.strongbit.com/news.asp Nawet strona jest ból głowy. Skompilowane aplikacje ulegają awarii podczas wykonywania jakichkolwiek wywołań WMI.

Takie podejście pozwala otoczyć mniejsze fragmenty kodu z zaciemniania, a tym samym chronić bezpieczeństwo sprawdzanie itp

używam metody autoryzacji online, aplikacja potrzebuje danych z serwera regularnie, tak nie ma sensu aby użytkownik mógł korzystać z niego poza linią przez dłuższy czas. Z definicji aplikacja jest bezwartościowa, nawet jeśli jest pęknięta.

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

Używam również skrótu do skompilowanej aplikacji i sprawdzam ją podczas uruchamiania, aby sprawdzić, czy zmienił się pojedynczy bit, a następnie otwórz aplikację jako plik (z odczytem LOCK) z poziomu aplikacji, aby nikt nie mógł go zmienić. uruchomiona.

Ponieważ wszystkie ciągi statyczne są wyraźnie widoczne w pliku .exe, staram się być ogólny z komunikatami o błędach i tak dalej. Nie znajdziesz nigdzie hasła "Autoryzacja nie powiodło się".

Aby zabezpieczyć się przed zrzutami pamięci, używam prostej techniki zaciemniania tekstu (takiej jak XOR każdy znak) Powoduje to, że dane tekstowe w pamięci są trudniejsze do odróżnienia od zmiennych i tak dalej.

To oczywiście jest AES dla wszelkich danych, które są naprawdę wrażliwe.Lubię tryb licznika dla tekstu, ponieważ powoduje to brak powtarzających się sekwencji ujawniających podstawowe dane, takie jak sekwencja białych spacji.

Jednak przy wszystkich tych technikach, jeśli klucz lub wektor inicjalizacyjny może zostać zrzucony z pamięci lub instrukcja obejścia instrukcji IF, wszystko jest zmarnowane.

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

Inną ideą jest kodowanie wskaźników ze zmienną dodaną. Zmienna jest wynikiem autoryzacji (zwykle zero). To nieuchronnie doprowadzi do GPF w pewnym momencie. Używam tego tylko w ostateczności po tym, jak kilka autoryzacji niższego poziomu zakończyło się niepowodzeniem, inaczej prawdziwi użytkownicy mogą go spotkać. Wtedy obniża się reputacja oprogramowania.

Jakich technik używasz?

(To nie jest wątek debaty zasadność wykonania czegoś. Jest on przeznaczony dla tych, którzy zdecydowali się zrobić coś)

+0

Właściwie, kiedy postawiłem pytanie na forum hakerów o niektórych dostępnych obecnie narzędziach ochrony oprogramowania, powiedział: "O Code Virtualizer, stworzyłem CodeUnvirtualizer do pełnej konwersji Virtual Opcodes na język Assembler". Tak więc Code Virtualizer rzeczywiście został pokonany. Ale powiedziawszy to, to narzędzie, które wybiorę, aby zastąpić ASProtect. Większość innych programów po prostu dodaje wiele do exe i znacznie zwiększa prawdopodobieństwo fałszywych alarmów antywirusowych i antyspyware. – smartins

Odpowiedz

11

Nie zgadzam się z XSL.

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

Zamiast tego, możemy zrobić, aby chronić inwestycje nasi klienci wykonany w naszego oprogramowania. Uważamy, że korzystanie z naszego oprogramowania sprawia, że ​​są bardziej konkurencyjne na swoim rynku, a jeśli inne firmy mają do niego dostęp bez płacenia, mają nieuczciwą przewagę - tj. Stają się konkurencyjni, nie ponosząc kosztów licencji.

Bardzo dbamy o to, aby ochrona - która jest domowa - była jak najbardziej dyskretna dla ważnych użytkowników iw tym celu nigdy nie rozważalibyśmy "kupowania" rozwiązania z półki, które może mieć wpływ na to. .

+1

To tylko racjonalizacja. Jeśli naprawdę martwisz się niekorzystnym wpływem na konkurencję, wysokie koszty oprogramowania obciążają klientów, możesz łatwiej rozwiązać problem, obniżając koszty. –

+2

Nie zgadzam się. Nasze oprogramowanie jest bardzo niszowe, firma nie byłaby w stanie utrzymać się, gdybyśmy mniej płacili. Z mniej niż setkami miejsc, a zbliżając się do nasycenia, obniżenie kosztów spowodowałoby usunięcie produktu z rynku. – Martin

8

ja osobiście używać technik kodu discussed here. Te sztuczki mają tę zaletę, że przeszkadzają piratom, nie utrudniając życia uzasadnionym użytkownikom końcowym. Jednak bardziej interesujące pytanie nie brzmi: "co", ale "dlaczego". Zanim producent oprogramowania podejmie się tego typu ćwiczeń, naprawdę ważne jest zbudowanie modelu zagrożenia. Na przykład zagrożenia związane z niskobudżetową grą B2C są zupełnie inne niż w przypadku aplikacji B2B o wysokiej wartości.

Patrick Mackenzie ma dobry esej, w którym jest discusses some of the threats, w tym analizę 4 rodzajów potencjalnych klientów. Zalecam wykonanie tej analizy zagrożeń dla własnej aplikacji przed podjęciem decyzji o ochronie swojego modelu biznesowego.

+0

+1 za linki - bardzo pouczające! –

11

Nie potrzebujesz kilkuset użytkowników, aby złamać oprogramowanie. Zirytowałem się, że moje shareware pękło tak wiele razy, więc jako eksperyment stworzyłem program o nazwie Magic Textbox (który był tylko formą z polem tekstowym na nim) i udostępnił go stronom shareware (miał własny plik PAD i wszystko). Dzień później dostępna była popękana wersja Magic Textbox.

To doświadczenie spowodowało, że zrezygnowałem z prób ochrony mojego oprogramowania za pomocą czegoś więcej niż podstawowej ochrony przed kopiowaniem.

+0

Założę się, że gdzieś jest torrent oryginalnego magicznego pola tekstowego :) –

+0

Jeśli nie, nie byłoby to zbyt trudne do przepisania, może w .NET tym razem. :) – MusiGenesis

1

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

To, co podoba mi się w tym produkcie, to to, że nie wymagało ono zaciemniania kodu w celu zapewnienia całkiem dobrej ochrony.

+1

.NET Reactor jest często rozpakowywany przez crackerów. – mmcdole

+0

Ich obsługa nie jest wspierana przez tę firmę, wszystkie wiadomości e-mail dotyczące pomocy technicznej pozostają bez odpowiedzi. –

6

Wcześniej zaimplementowałem klucz sprzętowy (klucze sprzętowe), więc nie jestem całkowicie obeznany z problemami. W gruncie rzeczy dałem mu dużo do myślenia. Nie zgadzam się z nikim naruszającym prawo autorskie, tak jak robią to twoje krakersy. Każdy, kto nie chce legalnie nabyć kopii oprogramowania, powinien obejść się bez niego. Nigdy nie naruszam praw autorskich do oprogramowania. To powiedziawszy ...

Naprawdę, naprawdę nie podoba mi się słowo "ochrona" użyte tutaj. Jedyną rzeczą, którą próbujesz chronić, jest Twoja kontrola. Jesteś nie ochrona oprogramowania. Oprogramowanie jest w porządku tak czy inaczej, podobnie jak twoi użytkownicy.

Powód, dla którego powstrzymywanie ludzi od kopiowania i udostępniania oprogramowania jest tak bezbożnym PITA polega na tym, że zapobieganie takim działaniom jest nienaturalne. Cała koncepcja komputera obraca się wokół kopiowania danych, a zwykła ludzka natura chce dzielić się użytecznymi rzeczami. Możesz walczyć z tymi faktami, jeśli naprawdę nalegasz, ale to będzie trwająca całe życie walka. Bóg nie czyni człowieka inaczej, i nie kupuję komputera, który nie może kopiować rzeczy. Być może lepiej byłoby znaleźć sposób na pracę z komputerami i ludźmi, niż walczyć z nimi przez cały czas?

Ja, wraz z większością profesjonalnych programistów, jestem zatrudniony na pełen etat przez firmę, która potrzebuje oprogramowania opracowanego w taki sposób, aby mogła wykonywać swoją działalność, a nie dlatego, że może mieć "oprogramowanie" ze sztucznym niedoborem, aby "sprzedawać". "do użytkowników. Jeśli napiszę coś ogólnie użytecznego (co nie jest tutaj uważane za "przewagę konkurencyjną"), możemy wydać ją jako Wolne Oprogramowanie. Nie jest wymagana "ochrona".

3

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

Wydaje mi się oczywiste, że każda aplikacja, która polega na dostarczaniu czegoś z serwera kontrolowanego, powinna być w stanie wykonać dość dobrą robotę, aby dowiedzieć 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 pamięci przestaną być szybko przestarzałe. Jeśli twoja aplikacja komunikuje się z serwerem, uruchomienie drugiego procesu, aby zastąpić główny plik wykonywalny co tydzień, jest bułka z masłem.

Tak, nic nie jest nieskrępowane, ale dzięki sprytnemu wewnętrznemu projektowi staje się punktem spornym. Jedynym ważnym czynnikiem jest to, ile czasu chcą wydać krakersy i ile wysiłku włożyli w to potencjalni klienci, chcąc znaleźć produkt ich wysiłków tygodniowo lub nawet codziennie!

Podejrzewam, że jeśli twoja aplikacja zapewnia przydatną cenną funkcję, będą skłonni zapłacić za nią uczciwą cenę. Jeśli nie, konkurencyjne produkty wejdą na rynek, a Twoja problme sama się rozwiąże.

4

Od niektórych linków:

Koncepcja starałem się wyjaśnić to, co ja nazywam „rozprzestrzenianie 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 pęknięcia.

Gdzie/kiedy sprawdzić numer seryjny: Raz sprawdzam przy starcie.Wiele osób mówi "Sprawdź w różnych miejscach", aby utrudnić komuś załamanie się poprzez usunięcie czeku. Jeśli chcesz być szczególnie nieprzyjemny dla crackera, sprawdź wszystkie rodzaje miejsc używając kodu inlined (tj. NIE zamieniaj go na SerialNumberVerifier.class) i jeśli to możliwe, spraw, aby był wielowątkowy i trudny do rozpoznania, gdy zawiedzie , także. Ale to sprawia, że ​​trudniej jest zrobić cracka, nie jest to niemożliwe, i pamiętaj, że twoim celem nie jest ogólnie pokonanie krakera. Pokonanie krakera nie czyni cię znaczącą ilością pieniędzy. Po prostu trzeba pokonać zwykłego użytkownika w większości przypadków, a zwykły 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 twojego serwera, nie dzwoniąc do domu z numerem seryjnym i akceptując wartość boolowską, itp. wyjście. tj. powinieneś robić kluczowy zastrzyk, a nie kluczową weryfikację. Kluczowa weryfikacja musi w końcu nastąpić w aplikacji, dlatego klucz publiczny kryptograficzny jest najlepszym sposobem na to. Powodem jest to, że połączenie z Internetem jest również w rękach przeciwnika :) Jesteś plikiem hosta zmieniającym się z break-once, break-everywhere exploit, jeśli twoje oprogramowanie spodziewa się po prostu przeczytać boolean z Internetu.

Nie należy wykonywać "interesujących" lub "wymagających" zabezpieczeń. Wiele krakersów łamie jedynie intelektualne wyzwanie. Spraw, aby twoja ochrona była trudna do złamania, ale nudna jak to tylko możliwe.

Istnieje kilka pęknięć, które szukają wzorów bajtów w poszukiwaniu miejsca do poprawienia. Zazwyczaj nie są pokonani przez rekompilację, ale jeśli twój .EXE jest spakowany (przez ASProtect, Armadillo, itp.), Tego rodzaju pęknięcia muszą najpierw rozpakować .EXE .. i jeśli używasz dobrego pakera, takiego jak ASProtect, cracker będzie mógł rozpakować EXE ręcznie przy użyciu debuggera na poziomie zespołu, takiego jak SoftICE, ale nie będzie w stanie stworzyć narzędzia, które rozpakuje .EXE automatycznie (aby później zastosować poprawki bajtów).

+3

Mniejszy fakt, że odnosisz się do użytkowników jako "przeciwnik", powinien wskazywać, jak daleko odszedłeś na tej ścieżce. :-( –

+4

Użytkownicy, którzy ukradli oprogramowanie, z definicji są przeciwnikami ... –