Chronić kod .NET przed inżynierią wsteczną?

491

Zaciemnianie jest jednym ze sposobów, ale nie może chronić przed złamaniem bezpieczeństwa ochrony przed piractwem aplikacji. Jak upewnić się, że aplikacja nie jest modyfikowana, i jak upewnić się, że mechanizm rejestracji nie może być poddany inżynierii wstecznej?

Możliwe jest również przekonwertowanie aplikacji C # na kod macierzysty, a Xenocode jest zbyt kosztowny.

C # zapewnia wiele funkcji i jest idealnym językiem dla mojego kodu, więc ponowne napisanie całej bazy kodu w C ++ nie wchodzi w rachubę.

Bezpieczne certyfikaty można łatwo usunąć z podpisanych zestawów w .NET.

Peter Mortensen
źródło
8
blogs.msdn.com/b/dotnet/archive/2014/04/02/… Rzeczy się zmieniają!
Andreas
@Andreas: To jest niesamowite !! Idę spróbować. Ktoś go używa?
Jack
1
@Jack to tylko aplikacje sklepu z oknami. Nie ma osi czasu dla aplikacji komputerowych (o ile wiem).
Tyler Long,
Jeśli chcesz natywny bez archaicznego C ++, użyj Delphi. Łatwość .Net pochodzi od Delphi.
William Egge,

Odpowiedzi:

671

Nie możesz

Istnieją kroki, które możesz podjąć, aby uczynić to nieco trudniejszym, ale ostatecznie każdy plik wykonywalny na komputerze lokalnym jest podatny na pękanie. Ostatecznie kod ten musi zostać przekonwertowany na natywny kod maszynowy, a każda uruchamiana aplikacja jest podatna na ataki.

To, co chcesz zrobić, to po prostu utrudnić włamanie, aby nie było warte kłopotów ludzi.

Mam kilka sugestii, które pomogą ci chronić twoją aplikację:

  • Ukryj kod. Dotfuscator ma bezpłatną edycję i jest dostarczany z Visual Studio.
  • Użyj klucza publicznego / prywatnego lub szyfrowania asymetrycznego do wygenerowania licencji produktu. Zapewnia to, że tylko Ty możesz wygenerować kody licencji. Nawet jeśli twoja aplikacja jest pęknięta, możesz być pewien, że nie zwolni ona generatora kluczy dla twojej aplikacji, ponieważ nie jest możliwe odwrócenie algorytmu generowania klucza.
  • Użyj pakera innej firmy, aby spakować plik wykonywalny .NET w zaszyfrowanej aplikacji opakowania Win32. Themida jest jedną z lepszych. To powstrzymuje ludzi przed odbijaniem twojej aplikacji w .NET Reflector i sprawia, że ​​rozpakowanie do cofania jest uciążliwe.
  • Napisz własny niestandardowy program pakujący . Jeśli programy pakujące innych firm są zbyt drogie, rozważ napisanie własnego. Czasami niestandardowe programy pakujące mogą być bardzo skuteczne, ponieważ nie ma dobrze opublikowanych metod ich rozpakowywania. Samouczek Jak napisać własny program pakujący zawiera mnóstwo dobrych informacji na temat pisania własnego programu pakującego Win32.

Ostatecznie jednak, jeśli ludzie chcą złamać twoją aplikację, zrobią to. Spójrz na całe oprogramowanie komercyjne, które ma ogromną ilość zasobów do ochrony swoich aplikacji, a jednak są one łamane, zanim aplikacje zostaną udostępnione publicznie.

Wykwalifikowany inżynier wsteczny może odpalić IDA-Pro i pokroić twoją aplikację jak masło, bez względu na to, co robisz. Spakowaną aplikację można rozpakować, a zaciemnienie nie pozwala jej na spacer po parku. Całą ciężką pracę ze złożonym kodem licencyjnym można cofnąć za pomocą łatki o jednym bajcie.

Musisz tylko zaakceptować fakt, że istnieje bardzo realna szansa, że ​​ludzie będą pirować twoje oprogramowanie. Są ludzie, którzy nigdy nie zapłacą za twoje podanie, bez względu na wszystko i są to ludzie, o których nie musisz się martwić.

Istnieje jednak wiele firm, które nigdy nie ryzykowałyby procesu i chętnie kupiłyby licencje na oprogramowanie, oraz wielu użytkowników komputerów, którzy albo nie chcą ryzykować, uznają to za niewłaściwe, albo nie mają wystarczającej wiedzy technicznej na piractwo. To są Twoi prawdziwi klienci i powinieneś skoncentrować swoje wysiłki na zapewnieniu im dobrej obsługi użytkowników i zignorować osoby, które łamią twoje oprogramowanie.

Moja aplikacja była już piracka i wziąłem ją za osobistą afront. Oto ja, mały programista, wlewając moje serce i duszę do aplikacji, a ci ludzie mieli ochotę mnie pirować ?! Brali pieniądze bezpośrednio z mojej kieszeni!

Natychmiast dodałem paczkę drakońskiego kodu DRM i próbowałem sabotować każdą osobę przy użyciu nielegalnej lub pękniętej kopii. Powinienem oczywiście pracować nad ulepszeniem mojej aplikacji, zamiast próbować powstrzymać nieuniknione. Mało tego, ale krzywdziłem moich prawdziwych klientów, że zapewnią mi wszystkie te dodatkowe zabezpieczenia.

Po długiej walce zdałem sobie sprawę, że walczę z przypływami i cały ten czas zmarnowany był na nic. Wyjąłem cały domowy kod telefonu, z wyjątkiem funkcji licencyjnych, i nigdy nie oglądałem się za siebie.

Simucal
źródło
67
Więc +1, że to prawie +2. Chciałbym, aby więcej osób w końcu zrozumiało, że po prostu nie możesz chronić swojego oprogramowania przed zdeterminowanym atakującym.
Bombe
102
Osiągnąłeś nirwanę ochrony oprogramowania: nie chodzi o dodanie dodatkowej ochrony, ale o skupienie się na produkcie i uczynienie go tak dobrym, aby ludzie CHCĘ za to zapłacić. A dla piratów nigdy nie zapłaciliby i tak, jakby nigdy nie istnieli.
Arthur Chaparyan
6
@Arthur Chaparyan, zgadzam się. Dotarcie tutaj zajęło mi dużo czasu, ale w końcu zobaczyłem światło. Poszedłem drogą bardziej restrykcyjnych zabezpieczeń i walczyłem z krakersami. Nauczyłem się wszystkiego, co mogłem, o inżynierii odwrotnej, próbując zapobiec własnej. W końcu wymyśliłem właściwą ideologię
mmcdole
50
Piekło Byłbym zaszczycony, aby dowiedzieć się ktoś, że moje oprogramowanie było warto piractwo ...
Erik Forbes
10
Kiedy zaczniesz polegać na sprzedaży oprogramowania przez większą część swoich dochodów, zmienia się to. Wydaje się, że ktoś cię okrada. Rozumiem jednak, co mówisz. Byłem zszokowany, kiedy po raz pierwszy znalazłem pęknięcia dla mojego oprogramowania na stronach z torrentami.
mmcdole
265

Nie można w pełni zabezpieczyć żadnej aplikacji (zarządzanej lub nie). Jeśli systemy takie jak Playstation i iPad mogą zostać złamane - gdzie sprzedawca nawet kontroluje sprzęt - jaka jest nadzieja Twojej aplikacji? Na szczęście tak naprawdę nie chcesz. Moim zdaniem, musisz zabezpieczyć swoją aplikację na tyle, aby ktoś nie mógł przypadkowo pirować twojego produktu i nie więcej.

Na przykład, jeśli używasz licencji na jeden komputer, nie powinna ona działać tylko podczas instalacji na nowym drugim komputerze. Będziesz potrzebować dobrego komunikatu o błędzie, aby zapobiec dodatkowym połączeniom z pomocą techniczną, ale nie spiesz się, utrudniając obejście i nie uderzając w niego użytkownikami.

Innym przykładem jest ograniczony czasowo proces. Nie martw się nawet o proste rzeczy, takie jak to, że użytkownicy mogą po prostu cofnąć zegar systemowy. Ktoś, kto to robi, wie, że łamie twoją licencję, i dopóki użytkownik wie, kiedy narusza prawo, zrobiłeś wystarczająco dużo.

Musisz to zrobić dużo, ponieważ użytkownicy nie dbają o twoją licencję. Licencje są wymyślonymi rzeczami, o których nikt nie dba, dopóki nie będą musieli. Nikt ich nie czyta i naprawdę nie powinien. Dlatego najlepszym sposobem, aby powiedzieć użytkownikowi, gdzie są granice, jest to, czy gotowe działanie aplikacji jest zgodne z licencją. W tym pierwszym przypadku oznacza to albo nieudaną instalację, albo instalację w trybie próbnym drugi raz. W tym drugim przypadku może to po prostu oznaczać sprawdzenie zwykłego tekstu w pliku konfiguracyjnym. Tak czy inaczej, upewnij się, że postępujesz z nim w elegancki, pomocny i pełen szacunku sposób.

To tłumaczy, co to znaczy tyle robić. Ale dlaczego nie pójść dalej? Dlaczego nie zatkać każdej małej dziury, którą możesz znaleźć? Odpowiedź składa się z dwóch części. Po pierwsze, jeśli ktoś przekroczy etyczny próg świadomego łamania warunków licencji - nawet w prosty sposób - będzie również gotów zrobić coś trudniejszego lub bardziej niebezpiecznego, jak wyciągnięcie aplikacji z torrentawitryna - a uruchamianie aplikacji pobranych z niezaufanych źródeł wiąże się z pewnym ryzykiem. Utrudnianie pracy jest tylko niewielką uciążliwością dla tych użytkowników i grozi problemami z płatnymi klientami. Uproszczenie może uniemożliwić komuś wkopanie się w twoją aplikację i wydanie bardziej kompleksowego cracku. Po drugie, masz niewiele oczu, aby szukać wad; hakerzy mają ich wielu i więcej praktyki w ich znajdowaniu. Musisz tylko przegapić jedną małą wadę, a Twoja aplikacja będzie miała taką samą dystrybucję na stronach pirackich, jakbyś nic nie zrobił. Musisz mieć rację za każdym razem; muszą mieć szczęście tylko raz. Wymagany wysiłek jest więc bardzo wysoki, a prawdopodobieństwo jakiejkolwiek miary sukcesu bardzo małe.

Ostatecznie, jeśli ktoś chce pirować twoją aplikację (a nie tylko jej używać), a to jest ich główny cel, zrobią to. Nic nie możesz zrobić, aby ich powstrzymać. Taka jest natura oprogramowania; gdy pliki tworzące produkt znajdą się na komputerze użytkownika, będą mogły z nimi zrobić, co zechcą. Jest to szczególnie istotne w środowiskach zarządzanych, takich jak Java lub .NET , ale zdecydowanie dotyczy to również kodu natywnego. Czas jest po ich stronie, a przy wystarczającej ilości czasu wszelkie cyfrowe zabezpieczenia mogą zostać złamane.

Ponieważ nie możesz powstrzymać użytkowników przed piractwem Twojego produktu, najlepszym rozwiązaniem jest zaangażowanie tej klasy użytkowników w taki sposób, aby wykorzystali ich na Twoją korzyść. Często można sprawić, aby działali dla ciebie, a nie przeciwko tobie. Mając to na uwadze, bez względu na to, jaka jest twoja aplikacja, prawdopodobnie warto zachować bezpłatną wersję, która jest prawie całkowicie funkcjonalna i nie wygasa. Różnica między ceną nawet 1 USD a darmową jest ogromna, jeśli tylko z tego powodu klient nie musi ufać Ci swoją kartą kredytową. Darmowa edycja Twojego produktu nie tylko skutecznie zabije piracką dystrybucję (po co ryzykować piracką wersję, skoro możesz być uprawniony za tę samą cenę?), Ale może znacznie zwiększyć twoją publiczność.

W rezultacie może być konieczne podniesienie ceny wersji płatnej, aby ostatecznie zamiast 2000 użytkowników za 20 USD każdy miał 100 000 bezpłatnych użytkowników, z czego 500 jest gotowych zapłacić 99 USD za edycję „profesjonalną” . Dzięki temu zyskujesz więcej pieniędzy, niż gdybyś spędził mnóstwo czasu na zamykaniu swojego produktu. Co więcej, możesz zaangażować tych bezpłatnych użytkowników i wykorzystać związek na kilka ważnych sposobów.

Jednym z nich jest wsparcie. Pesymista skorzystałby z tej okazji, aby narzekać na wzrost kosztów obsługi 100 000 bezpłatnych użytkowników, ale zamiast tego dzieje się coś niesamowitego: twój produkt staje się w dużej mierze samowystarczalny. Widać to cały czas w dużych projektach open source, które nie mają pieniędzy na koszty wsparcia. Użytkownicy przyspieszą i sprawią, że to się stanie.

Bezpłatni użytkownicy generalnie zmniejszyli oczekiwania dotyczące wsparcia na początek i nie bez powodu. Wszystko, co musisz zrobić, to oznaczyć bezpłatną edycję jako kwalifikującą się tylko do wsparcia społeczności i założyć moderowane przez użytkowników forum online w tym celu. Twoja baza wiedzy wsparcia generuje się samodzielnie, a zaawansowani użytkownicy będą opiekować się tymi, którzy potrzebują dodatkowego trzymania ręki w Twoim imieniu. Co ważniejsze, pozwoli to szybciej zidentyfikować i poprawić błędy, ostatecznie poprawiając jakość produktu i obniżając całkowite koszty wsparcia. Nie było to wcześniej możliwe, ponieważ baza użytkowników nie była wystarczająco duża, ale jeśli traktujesz bezpłatnych użytkowników jako klientów, może to działać bardzo dobrze.

Kolejnym jest informacja zwrotna. Oglądając forum, poznajesz ważne pomysły na ulepszenia, których być może nigdy nie pomyślałeś inaczej. Dzięki temu możesz ostatecznie przekształcić więcej bezpłatnych użytkowników w płatnych użytkowników i stworzyć bardziej atrakcyjny produkt, który przyciągnie jeszcze większą liczbę odbiorców.

Wreszcie musisz rozważyć marketing. Wszyscy ci darmowi użytkownicy są teraz fanami, a nie przeciwnikami, i będą działać odpowiednio. Co więcej, jeśli przyjdzie czas na wydanie następnej wersji, wszyscy użytkownicy przejdą przez zatwierdzony kanał dystrybucji, a nie jakiś inny nieznany mechanizm. Oznacza to, że w kolejnej wersji zaczniesz od większej, bardzo zainteresowanej i wspierającej publiczności.

Najlepsze funkcje, które można zarezerwować w wersji profesjonalnej, to narzędzia mające na celu ułatwienie wdrożenia i zarządzania w firmie. Łamacz nie uzna tego za wystarczający powód, aby włamać się do niego na własny użytek, ale dla firmy, która chce kupić 300 licencji i wypchnąć go z całej firmy, jest to konieczność. Oczywiście profesjonalna edycja i tak będzie piracka, ale znowu: nie przejmuj się, ponieważ prawdopodobnie nie będziesz w stanie sprzedać produktu piratom bez względu na to, co zrobiłeś, więc nie kosztuje to żadnego przychodu.

Chociaż psychologicznie może być tak trudno rozdać swój produkt, mam nadzieję, że zrozumiesz, jak to naprawdę jest najlepsza droga. Co więcej, jest to jedyna droga na dłuższą metę. Wiem, że ktoś tam jest i myśli, że nie chce tego robić w ten sposób. W końcu dobrze sprzedają swój zablokowany produkt za 20 USD od lat. Ale to szkoda, ponieważ jeśli nie zrobisz tego w ten sposób, w końcu zrobi to ktoś inny . A ich produkt będzie tak samo dobry, jak twój, lub wystarczająco blisko, by uciec od tego. Nagle ceny wyglądają oburzająco, sprzedaż gwałtownie spada i nie można nic więcej zrobić. Jeśli chcesz, możesz wybrać dodatkowy środkowy poziom, ale raczej nie pomoże ci to.

Joel Coehoorn
źródło
1
@Learning: z czasem rosło i przeszło automatyczną konwersję do progu CW.
Joel Coehoorn,
1
+1 Lepsze niż odpowiedź, którą dałem na poprzednią wersję tego pytania. @Joel Nie wiedziałem, że istnieje limit.
pipTheGeek
1
Nie zgadzam się całkowicie ze wszystkim tutaj, a i tak jest to łatwa +1 dla wyjątkowo przemyślanej prezentacji i argumentów.
Beska,
2
Dobry argument, ale nie rozumie kwestii ochrony własności intelektualnej. Jeśli Twoja aplikacja zawiera kod, który robi coś, co jest nieco skomplikowane, zaciemnianie może zapewnić różnicę między prostym kopiowaniem i wklejaniem kodu, a próbą interpretacji i zmiany kodu, aby działał. Jest to szczególnie ważne w przypadku aktualizacji: jeśli ktoś skopiował twój zaciemniony kod, po wydaniu aktualizacji musi to zrobić od nowa - a przynajmniej powoduje to więcej bólu / wydatków / czasu. Jeśli nie masz go w jakiś sposób zabezpieczony, po prostu skopiuj / wklej ponownie i działa.
gregmac,
4
Świetny post - naprawdę zawiera wszystkie właściwe szczegóły dotyczące powodów, dla których nie warto zawracać sobie głowy pisaniem złożonej ochrony przed kopiowaniem. Chociaż pytanie jest duplikatem, warto je ponownie otworzyć tylko dla tej odpowiedzi. Może mod może to scalić?
EMP
45

Z mojego doświadczenia wynika, że ​​utrudnienie złamania twojej aplikacji lub biblioteki szkodzi uczciwym klientom, a jedynie nieznacznie opóźnia nieuczciwych. Skoncentruj się na stworzeniu świetnego produktu o niskim tarciu zamiast wkładać wiele wysiłku w opóźnianie nieuniknionego.

Kent Boogaart
źródło
38

Sekret, który dzielisz z wieloma ludźmi, nie jest tajemnicą. Jeśli masz w kodzie tajne rzeczy, zaciemnianie go nie stanowi ochrony; należy go odszyfrować tylko raz . Jeśli masz sekret, którego nie chcesz udostępniać klientom, nie udostępniaj go swoim klientom . Napisz swój kod jako usługę internetową i przechowuj swój super tajny kod na własnym serwerze, gdzie tylko Ty go widzisz.

Eric Lippert
źródło
1
Przy okazji robię projekt, w którym chcę również aktywować produkt „offline” (stworzyłem usługę WCF, aby aktywować online). W takim przypadku w jaki sposób będziesz manipulował kodem? czy możesz dać mi trochę hitów?
Piyush
1
Ciekawy pomysł, ale jaki kierunek działania poleciłbyś komuś opracowującemu aplikację, która musi działać bez połączenia danych, na przykład grę WP7?
Charlie Skilbeck,
23

Ogólnie rzecz biorąc, są tam trzy grupy ludzi.

  • Ci, którzy nie kupią twojego oprogramowania i nie uciekną się do pęknięć, lub jeśli go nie znajdą, w ogóle nie używają twojego oprogramowania. Nie spodziewaj się zarabiać na tej grupie. Opierają się albo na własnych umiejętnościach, albo na crackerach (którzy zwykle ustalają priorytet czasu w zależności od twojego przydatności i tego, jak duża jest twoja publiczność. Im bardziej przydatne, tym szybciej dostępny będzie crack).

  • Grupa legalnych użytkowników, którzy kupią (zapłacą) za twoje oprogramowanie, niezależnie od używanego mechanizmu ochrony. Nie utrudniaj życia swoim legalnym użytkownikom, stosując skomplikowany mechanizm ochronny, ponieważ i tak za to zapłacą. Złożony mechanizm ochronny może łatwo zepsuć wrażenia użytkownika i nie chcesz, aby stało się tak w tej grupie. Osobiście głosowałbym przeciwko dowolnemu rozwiązaniu sprzętowemu, które zwiększa koszt twojego oprogramowania.

  • Mniejszość, która ucieknie się do „nieetycznego” włamania i zapłaci tylko za twoje oprogramowanie, ponieważ jego funkcje są chronione przez mechanizm licencjonowania. Prawdopodobnie nie chcesz, aby ta grupa bardzo łatwo obchodziła twoją ochronę. Jednak cały wysiłek włożony w ochronę twojego oprogramowania zwróci się, w zależności od tego, jak duża jest ta grupa ludzi. Zależy to całkowicie od rodzaju tworzonego oprogramowania.

Biorąc pod uwagę to, co powiedziałeś, jeśli uważasz, że istnieje wystarczająco duża mniejszość, której można zmusić do zakupu twojego oprogramowania, śmiało i zaimplementuj jakąś formę ochrony. Zastanów się, ile pieniędzy możesz zarobić na tej mniejszości w porównaniu do czasu spędzonego na pracy nad ochroną lub kwoty, jaką wydajesz na interfejs API / narzędzie ochrony innej firmy.

Jeśli chcesz wdrożyć własne rozwiązanie, dobrym rozwiązaniem jest (w przeciwieństwie do algorytmów symetrycznych) szyfrowanie z kluczem publicznym, aby zapobiec łatwym włamaniom. Możesz na przykład podpisać cyfrowo swoją licencję (nr seryjny lub plik licencji). Jedynym sposobem na obejście tego byłoby dekompilacja, modyfikacja i rekompilacja kodu (co mogłoby być trudniejsze przy użyciu technik takich jak te sugerowane w odpowiedzi Simucala).

Mystic
źródło
Używanie silnej kryptografii do ochrony / weryfikacji licencji jest całkowicie bezużyteczne, jeśli ktoś zgubi kod przerywający działanie aplikacji, jeśli licencja nie zostanie wypisana. :)
Bombe
Zgadzam się, ale jak mówiłem, ochrona nie jest dla tych grup użytkowników, którzy uciekną się do korzystania z pęknięć (założenie, które stworzyłem, będzie istnieć).
Mystic
kryptografia z kluczem publicznym = kryptografia asymetryczna. Myślę, że miałeś na myśli symetryczny.
mmcdole,
1
Szczerze mówiąc, trzeci punkt jest stronniczy, ponieważ zakłada, że ​​część ludzi jest zawsze mniejszością. Jestem pewien, że w pewnych ramach jest to zdecydowana większość. Mam na myśli gry online z wieloma funkcjami dla wielu graczy, ponieważ a) większość użytkowników to dzieci o bardzo niskich standardach etycznych b) koszty mogą być znaczące dla tych użytkowników, jeśli miesięczna opłata przeciąga się miesiącami itp.
jr
19

Nie możesz zapobiec łamaniu oprogramowania przez ludzi.

Możesz jednak sprawić, by tworzyły pęknięcia, które mniej zaszkodzą twojej sprzedaży. Generatory kluczy, które mogą wydawać prawidłowy kod rejestracyjny dla twojego oprogramowania, są znacznie gorsze niż proste łaty, które usuwają zachęty rejestracyjne z twojego oprogramowania. Wynika to z faktu, że crack będzie działał tylko dla jednej wersji oprogramowania i przestanie działać z następną wydaną aktualizacją oprogramowania. Generator kluczy będzie działał, dopóki nie zmienisz algorytmu klucza rejestracyjnego, a tego nie chcesz robić często, ponieważ zniechęci to uczciwych klientów.

Tak więc, jeśli szukasz metody walki z nielegalnymi generatorami kluczy dla swojego oprogramowania i nie chcesz używać szyfrowania asymetrycznego z powodu generowania długich kodów rejestracyjnych, możesz rzucić okiem na Częściową weryfikację klucza.

Częściowa weryfikacja klucza gwarantuje, że każdy nielegalny generator klucza działa tylko dla jednej konkretnej wersji oprogramowania. Zasadniczo musisz upewnić się, że każda wersja oprogramowania łączy się tylko z kodem do sprawdzania NIEKTÓRYCH cyfr kodu rejestracyjnego. Które cyfry są dokładnie losowe, więc crackerzy musieliby dokonać inżynierii wstecznej wielu różnych wersji oprogramowania i połączyć to wszystko w jeden generator klucza, aby zwolnić generator klucza, który działa dla wszystkich wersji oprogramowania.

Jeśli regularnie wydajesz nowe wersje oprogramowania, prowadzi to do powstania wielu generatorów kluczy rozpowszechnianych na wszelkiego rodzaju archiwach piractwa komputerowego, które już nie działają. Potencjalni piraci komputerowi zwykle szukają pęknięcia lub keygen dla najnowszej wersji, więc prawdopodobnie spróbują kilku z nich i ostatecznie się poddadzą.

Używałem Częściowej Weryfikacji w moich nowszych (C ++) grach shareware i było bardzo skuteczne. Wcześniej mieliśmy wiele problemów z generatorami kluczy, z którymi nie mogliśmy walczyć. Następnie pojawiło się wiele pęknięć i kilka generatorów kluczy, które działały tylko dla tej konkretnej wersji gry, ale brak generatora kluczy, który działałby ze wszystkimi wersjami. Regularnie wypuszczaliśmy bardzo niewielkie aktualizacje gry, aby wszystkie wcześniejsze pęknięcia były bezużyteczne.

Wygląda na to, że istnieje platforma .NET o otwartym kodzie źródłowym do częściowej weryfikacji klucza , chociaż jej nie próbowałem.

Adrian Grigore
źródło
1
podobnie jak pomysł, możesz także używać różnych haseł do szyfrowania asymetrycznego w różnych wersjach.
Priyank Bolia,
Ciekawy pomysł, ale na czym właściwie polega problem z długim kodem rejestracyjnym? W dzisiejszych czasach nikt i tak nie wprowadziłby go ręcznie - każdy skopiowałby go i wkleił, więc nie ma znaczenia, czy to 10, czy 100 znaków.
EMP
4
@Evgeny: Dotyczy to tylko użytkowników zaawansowanych. Od wielu lat tworzymy gry typu shareware / casual i mogę powiedzieć, że większość naszych użytkowników nie może kopiować i wklejać. Okno rejestracji zawiera nawet instrukcję kopiowania i wklejania, a niektórzy nawet tego nie czytają po przeczytaniu.
Adrian Grigore
Łał! OK, oczywiście masz w tym więcej doświadczenia niż ja, więc nie mogę się kłócić, mogę tylko powiedzieć, że jestem zaskoczony. Powiedziałbym jednak, że jeśli nie wiedzą, jak kopiować i wklejać, należy ułożyć kod o długości 200 znaków, aby nauczyli się bardzo przydatnej ogólnej umiejętności obsługi komputera. :)
EMP
1
@Evgeny: Nawet przy krótkich kodach rejestracyjnych wciąż otrzymujemy wiele e-maili od osób, które błędnie wpisały swoje kody i dlatego uważały, że kod nie może być prawidłowy, ponieważ nigdy nie popełniłyby takiego błędu kilka razy rząd. Wolę pozostawić nauczanie informatyki innym firmom ... :-)
Adrian Grigore,
16
  • Użyj aktualizacji online, aby zablokować te nielicencjonowane kopie.

  • Sprawdź numer seryjny z różnych modułów aplikacji i nie używaj pojedynczego wywołania funkcji do weryfikacji (aby crackerzy nie mogli łatwo ominąć weryfikacji).

  • Nie tylko sprawdzaj numer seryjny podczas uruchamiania, wykonaj weryfikację podczas zapisywania danych, rób to w każdy piątek wieczorem, rób to, gdy użytkownik jest bezczynny ...

  • Sprawdź sumę kontrolną pliku aplikacji, przechowuj sumę kontroli bezpieczeństwa w różnych miejscach.

  • Nie sięgaj zbyt daleko w takie sztuczki, upewnij się, że twoja aplikacja nigdy nie ulega awarii / awarii podczas weryfikacji kodu rejestracyjnego.

  • Zbudowanie użytecznej aplikacji dla użytkowników jest o wiele ważniejsze niż stworzenie
    niezniszczalnego pliku binarnego dla crackerów.

RIPPER
źródło
14

Możesz..

Usługi Microsoft SLP Potencjał oprogramowania InishTech oferuje możliwość ochrony kodu bez wpływu na funkcjonalność aplikacji.

AKTUALIZACJA: (Ujawnienie: Pracuję na Eazfuscator.NET) To, co wyróżnia potencjał oprogramowania Microsoft SLP Services, to możliwość wirtualizacji kodu, więc zdecydowanie możesz . Minęło kilka lat od pierwszego pytania; dziś dostępnych jest więcej produktów, które działają na podobnych zasadach, takich jak:

ogggre
źródło
2
wycenianie mojego przyjaciela, zakup oprogramowania licencyjnego od Microsoft jest zbyt kosztowny dla normalnego
niezależnego dostawcy
Próbowałem, działa bardzo dobrze, ale szyfruje tylko kod wewnątrz metody, a nie cały zestaw lub projekt, więc cracker może łatwo zmienić przepływ programu za pomocą wstrzyknięcia IL
Mohsen Afshin
@ogggre Jeśli dodajesz linki dostawców, naprawdę musisz ujawnić swoje połączenia w poście. Również obecnie dostępna wersja SLP (co ja pracować: D) czyni rodzajowych wsparcia. Oczywiście wszystkie rozwiązania mają swoje zalety i wady, które tylko eval może właściwie kontekstualizować dla ludzi
Ruben Bartelink,
@MohsenAfshin Nie rozumiem, co mówisz - chodzi o to, że musisz chronić wszelkie metody, w których dodanie / usunięcie / zmiana IL stanowiłaby naruszenie licencji. Ponieważ wirtualizacja rzeczy nie może być darmowa, po prostu nie ma sensu „magicznie chronić wszystko”, jak sugerujesz. Wróć do kluczowej kwestii: Celem ochrony SP jest zapobieganie zmianom IL w metodach wybranych na podstawie ich wrażliwości (plus ogólnie niektóre inne jako hałas, aby uniknąć zasadzenia , musisz złamać ten fragment tutaj -> znak )
Ruben Bartelink,
1
@RubenBartelink Zgadzam się z tobą. Niestety ten wątek jest zbyt duży i zawiera kilka stron treści. Na początku chciałem dodać nową odpowiedź, ale StackOverflow zasugerował, że lepiej jest rozszerzyć istniejącą. Więc zrobiłem. Mam nadzieję, że moja mała informacja jest przydatna. Dziękujemy za aktualizację ogólnej obsługi SLPS i poprawek.
ogggre
10

.NET Reflector może otwierać tylko „kod zarządzany”, co w zasadzie oznacza „kod .NET”. Dlatego nie można go używać do dezasemblacji plików COM DLL, natywnego C ++, klasycznego kodu Visual Basic 6.0 itp. Struktura skompilowanego kodu .NET sprawia, że ​​jest on bardzo wygodny, przenośny, wykrywalny, weryfikowalny itp. .NET Reflector wykorzystuje pozwala to zajrzeć do skompilowanych zestawów, ale dekompilatory i deasemblery w żadnym wypadku nie są specyficzne dla platformy .NET i są dostępne tak długo, jak istnieją kompilatory.

Możesz użyć obfuscatorów, aby uczynić kod trudniejszym do odczytania, ale nie możesz dokładnie zapobiec jego dekompilacji bez spowodowania, że ​​będzie nieczytelny dla .NET. Istnieje kilka produktów (zwykle drogich), które twierdzą, że „łączą” aplikację kodu zarządzanego z aplikacją kodu natywnego, ale nawet jeśli faktycznie działają, zdeterminowana osoba zawsze znajdzie sposób.

Jeśli jednak chodzi o zaciemnianie, dostajesz za co płacisz. Więc jeśli twój kod jest tak zastrzeżony, że musisz dołożyć wszelkich starań, aby go chronić, powinieneś być gotów zainwestować pieniądze w dobry zaciemniacz.

Jednak w ciągu 15 lat pisania kodu zdałem sobie sprawę, że nadmierna ochrona kodu źródłowego jest stratą czasu i ma niewielkie zalety. Próba odczytania oryginalnego kodu źródłowego bez poparcia dokumentacji, komentarzy itp. Może być bardzo trudna do zrozumienia. Dodaj do tego bezsensowne nazwy zmiennych, które wymyślają dekompilatory, oraz kod spaghetti tworzony przez współczesne zaciemniacze - prawdopodobnie nie musisz się zbytnio martwić o ludzi kradnących twoją własność intelektualną.

Josh Einstein
źródło
9

Czy to naprawdę jest tego warte? Każdy mechanizm ochronny można złamać z wystarczającą determinacją. Weź pod uwagę rynek, cenę produktu, liczbę klientów itp.

Jeśli chcesz czegoś bardziej niezawodnego, przejdź ścieżką kluczy sprzętowych, ale jest to raczej kłopotliwe (dla użytkownika) i droższe. Rozwiązania programowe byłyby prawdopodobnie stratą czasu i zasobów, a jedyne, co by ci dały, to fałszywe poczucie „bezpieczeństwa”.

Jeszcze kilka pomysłów (żaden nie jest idealny, ponieważ nie ma jednego idealnego).

  • AntiDuplicate
  • Zmień język, korzystaj z fajnych sztuczek, których używali autorzy Skype
  • Serwer licencji

I nie marnuj na to zbyt wiele czasu, ponieważ crackerzy mają duże doświadczenie z typowymi technikami i są o kilka kroków przed tobą. O ile nie chcesz używać wielu zasobów, prawdopodobnie zmień język programowania (zrób to na Skype).

Jeff Atwood
źródło
Nie zapominaj, że całkiem możliwe jest zaatakowanie części oprogramowania zamka sprzętowego.
Magnus Hoff
Tak, to prawda, jedyną realną opcją byłoby częściowe zaimplementowanie aplikacji w sprzęcie (na przykład dziwne połączenie aplikacji i oprogramowania VHDL). Byłoby to również możliwe do zgryzienia ...
Anonimowy
Co z kluczami sprzętowymi, które implementują strategię klucza publicznego / prywatnego. Tylko klucz prywatny klucza sprzętowego może odszyfrować aplikację i uruchomić ją.
mmcdole,
Tak zwykle działa klucz sprzętowy. Możesz jednak zaatakować klucz sprzętowy - sklonować go lub oprogramowanie odpowiedzialne za rozmowę z kluczem sprzętowym (obejście, wyłączenie itp.).
Anonimowy
1
W moim przypadku naprawdę było warto. Po wdrożeniu Częściowej weryfikacji klucza i zmianie schematu klucza rejestracyjnego dla istniejącego produktu, sprzedaż znacząco wzrosła. Całe oprogramowanie może zostać złamane, pytanie brzmi, jak wysoko podnosisz poprzeczkę dla zwykłego pirata oprogramowania.
Adrian Grigore
9

Jeśli chcesz, aby ludzie mogli uruchomić Twój kod (a jeśli nie, to dlaczego go napisałeś?), To jego procesor musi być w stanie wykonać Twój kod. Aby móc wykonać kod, CPU musi być w stanie go zrozumieć .

Ponieważ procesory są głupie, a ludzie nie, oznacza to, że ludzie również mogą zrozumieć kod.

Jest tylko jeden sposób, aby upewnić się, że Twoi użytkownicy nie dostają Twojego kodu: nie dawaj mu swojego kodu.

Można to osiągnąć na dwa sposoby: oprogramowanie jako usługa (SaaS), to znaczy, należy uruchomić oprogramowanie na swoim serwerze, a jedynie pozwolić użytkownikom dostęp zdalnie. Jest to model, na przykład używany przez przepełnienie stosu. Jestem pewien, że Stack Overflow nie zaciemnia ich kodu, ale nie można go zdekompilować.

Innym sposobem jest model urządzenia: zamiast dawać swoim użytkownikom kod, dajesz komputer zawierający ten kod. Jest to model, z którego korzystają konsole do gier, większość telefonów komórkowych i TiVo . Pamiętaj, że działa to tylko wtedy, gdy „posiadasz” całą ścieżkę wykonania: musisz zbudować własny procesor, własny komputer, napisać własny system operacyjny i własny implementację interfejsu CLI . Wtedy i tylko wtedy można chronić swój kod. (Pamiętaj jednak, że nawet najmniejszy błąd sprawi, że wszystkie twoje zabezpieczenia będą bezużyteczne. Microsoft, Apple, Sony, przemysł muzyczny i przemysł filmowy mogą to potwierdzić.)

Możesz też nic nie robić, co oznacza, że ​​Twój kod będzie automatycznie chroniony prawem autorskim.

Jörg W Mittag
źródło
8

Niestety nie uciekniesz od tego. Najlepiej jest napisać kod w C i P / Invoke go.

Jest mały catch-22, ktoś mógłby po prostu zdekompilować twoją aplikację do CIL i zabić dowolny kod weryfikacyjny / aktywacyjny (na przykład wywołanie twojej biblioteki C). Pamiętaj, że aplikacje napisane w C są również poddawane inżynierii wstecznej przez bardziej wytrwałych hakerów (wystarczy spojrzeć na to, jak szybko gry są obecnie łamane). Nic nie ochroni twojej aplikacji.

W końcu działa bardzo podobnie do twojego domu, chroń go wystarczająco dobrze, aby był zbyt duży wysiłek (tutaj pomoże kod spaghetti) i aby napastnik po prostu przeniósł się na sąsiada (konkurencja :)). Spójrz na Windows Vista, musi istnieć 10 różnych sposobów na złamanie go.

Istnieją pakiety, które zaszyfrują plik EXE i odszyfrują go, gdy użytkownik będzie mógł go użyć, ale jeszcze raz, używając ogólnego rozwiązania, które bez wątpienia zostało złamane.

Mechanizmy aktywacji i rejestracji są skierowane do „przeciętnego Joe:” ludzi, którzy nie mają wystarczającej wiedzy technicznej, aby to ominąć (lub, jeśli o to chodzi, wiedzą, że mogą to ominąć). Nie zawracaj sobie głowy krakersami, mają o wiele za dużo czasu.

Jonathan C Dickinson
źródło
1
Jeśli naprawdę przeszkadzasz w outsourcingu kodu rejestracyjnego do biblioteki DLL, upewnij się, że biblioteka DLL musi być inna w przypadku każdej nowej wersji oprogramowania. W przeciwnym razie ułatwisz ludziom złamanie twojego oprogramowania. Wszystko, co musieliby zrobić, to złamać bibliotekę DLL raz i użyć jej we wszystkich późniejszych wersjach. Nawet użytkownicy końcowi mogą to zrobić, gdy znajdą starą pękniętą bibliotekę DLL, a jest to nawet gorsze niż umieszczenie mechanizmu rejestracji w zarządzanym kodzie.
Adrian Grigore,
8

Oprócz ochrony zakupu, Ty (lub Twoi programiści) możesz nauczyć się ochrony przed kopiowaniem.

Oto pomysły:

Najpierw spróbuj napisać program, który zapisuje się na konsoli. To znany problem. Podstawowym celem tego zadania jest ćwiczenie pisania kodu, do którego odwołuje się sam.

Po drugie, musisz opracować technologię, która przepisze kod w sposób zależny od CIL innych metod .

Możesz napisać maszynę wirtualną (jeszcze w .NET ). I wstaw tam trochę kodu. Ostatecznie maszyna wirtualna uruchamia inną maszynę wirtualną, która uruchamia kod. Dotyczy to części rzadko wywoływanych funkcji, aby nie spowalniać zbytnio wydajności.

Przepisz trochę logiki do C ++ / CLI i mieszaj zarządzany kod z niezarządzanym. Utrudni to demontaż. W takim przypadku nie zapomnij również podać plików binarnych x64 .

modosansreves
źródło
nie udało się wyjaśnić szczegółowo.
Priyank Bolia
7

Tak. To prawda. Kod .NET jest wyjątkowo łatwy do odtworzenia, jeśli kod nie jest zaciemniony.

Obfuscation doda warstwę irytacji osobom próbującym odtworzyć oprogramowanie. W zależności od wybranej wersji otrzymasz różne poziomy ochrony.

Visual Studio zawiera wersję Dotfuscator . Ponieważ jest to wersja dołączona, zdecydowanie nie otrzymujesz najsilniejszego możliwego zaciemnienia. Jeśli spojrzysz na ich listę funkcji, zobaczysz dokładnie to, czego brakuje (i dokładnie to, co zrobi aplikacja, aby twój kod był bezpieczniejszy).

Istnieje kilka innych darmowych lub open source'owych obfuscatorów .NET (ale nie mogę wypowiedzieć się na temat jakości ani różnych metod, których używają):

W końcu nic nie jest idealne. Jeśli ktoś naprawdę chce zobaczyć, jak działa twoje oprogramowanie, to zrobi to.

Justin Niessner
źródło
11
To nie tylko „jeśli naprawdę chcą zobaczyć, jak działa twoje oprogramowanie, to zrobią”. Jeśli im zależy, zapewne zgadną bez patrzenia. 99,9% + oprogramowania nie ma żadnych algorytmów magicznego pyłu pixie. Trudna część programowania nie jest jakąś specjalną tajną techniką. Po prostu sprawia, że ​​wszystkie części stają w kolejce i działają.
Ken
9
@Ken - Ciii! Nie możesz poinformować reszty świata, że ​​przez większość czasu nie używamy algorytmów magicznego pyłu pixie.
Justin Niessner
9
Justin: Czy miłość liczy się jako magiczny algorytm? Miłość jest tym, co czyni moje programy wyjątkowymi. Nie sądzę, że możesz rozłożyć Miłość.
Ken
Babel.NET nie jest już darmowy. Listę najczęstszych zaciemniaczy (darmowych i komercyjnych) znajdziesz tutaj .
InputOutput
6

Cóż, nie możesz W PEŁNI chronić swojego produktu przed pękaniem, ale możesz zmaksymalizować / poprawić poziomy bezpieczeństwa i sprawić, że będzie trochę trudniejszy do złamania przez początkujących i pośrednich crackerów.

Ale pamiętaj, że nic nie jest niemożliwe do wykrycia, tylko oprogramowanie po stronie serwera jest dobrze chronione i nie można go złamać. W każdym razie, aby podnieść poziom bezpieczeństwa aplikacji, możesz wykonać kilka prostych kroków, aby zapobiec łamaniu aplikacji przez niektórych crackerów. Te kroki sprawią, że te krakersy oszaleją i być może będą desperackie:

  • Ukryj kod źródłowy, oczywiście spowoduje to, że kod źródłowy będzie wyglądał na bałagan i będzie nieczytelny.
  • Uruchom kilka losowych procedur sprawdzania w aplikacji, np. Co dwie godziny, 24 godziny, jeden dzień, tydzień itp., A może po każdym działaniu użytkownika.
  • Zapisz wydaną aplikację MD5 sumę kontrolną na serwerze i zaimplementuj procedurę, która może sprawdzić bieżącą sumę kontrolną MD5 pliku z rzeczywistą sumą kontrolną po stronie serwera i sprawić, że zostanie ona losowo uruchomiona. Jeśli suma kontrolna MD5 została zmieniona, oznacza to, że ta kopia została piracka. Teraz możesz go po prostu zablokować lub wydać aktualizację, aby go zablokować itp.
  • Spróbuj stworzyć procedurę, która sprawdzi, czy niektóre kody (funkcje, klasy lub określone procedury) zostały faktycznie zmodyfikowane, zmienione, a nawet usunięte. Nazywam to (sprawdzanie integralności kodu).
  • Użyj darmowych nieznanych programów pakujących do spakowania aplikacji. Lub, jeśli masz pieniądze, wybierz rozwiązania komercyjne, takie jak Thamida lub .NET Reactor . Aplikacje te są regularnie aktualizowane, a gdy cracker rozpakuje aplikację, możesz po prostu pobrać nową aktualizację od tych firm, a gdy ją otrzymasz, po prostu spakuj swój program i wydaj nową.
  • Regularnie wypuszczaj aktualizacje i zmuszaj klienta do pobrania najnowszej aktualizacji.
  • Na koniec spraw, aby Twoja aplikacja była bardzo tania. Nie rób tego zbyt drogo. Uwierz mi, zyskasz więcej zadowolonych klientów, a crackerzy po prostu opuszczą twoją aplikację, ponieważ nie warto poświęcać czasu na bardzo tanią aplikację.

To tylko proste metody zapobiegania pękaniu aplikacji przez początkujących i pośrednich crackerów. Jeśli masz więcej pomysłów na ochronę aplikacji, nie wahaj się ich wdrożyć. To tylko utrudni krakersom życie, a oni sfrustrują się, a ostatecznie porzucą twoją aplikację, ponieważ to po prostu nie jest warte ich czasu.

Na koniec należy również rozważyć poświęcenie czasu na kodowanie dobrej jakości aplikacji. Nie trać czasu na kodowanie skomplikowanych warstw zabezpieczeń. Jeśli dobry cracker chce złamać twoją aplikację, zrobi to bez względu na to, co zrobisz ...

Teraz idź i zaimplementuj zabawki dla krakersów ...

Robin Van Persi
źródło
5

Istnieje Salamander , który jest natywnym kompilatorem .NET i linkerem firmy Remotesoft, który może wdrażać aplikacje bez frameworku .NET. Nie wiem, jak dobrze spełnia swoje roszczenia.

Matthew Olenik
źródło
Odpowiedź jest dość prosta: szkoda, że ​​większość odpowiedzi mówi o zaciemnieniu. Zaciemnianie jest dobre do zatrzymania pierwszej (przypominającej odbłyśnik) próby sprawdzenia kodu, to wszystko. To nie jest złe. I oczywiście nie ma nic, co powstrzymałoby prawdziwych hakerów, którzy rozumieją kod asemblera, oprócz pisania aplikacji SAAS (nawet wtedy mogą próbować włamać się na twój serwer). Ale jest jeszcze więcej, istnieją narzędzia takie jak Salamander, .NET Reactor i inni wspomniani, którzy zapewniają (być może) prawie taką samą formę bezpieczeństwa dekompilującą jak skompilowany w C ++ Win32 .exe. Które z tych narzędzi jest najlepsze, nie mogę jeszcze ocenić.
Philm,
5

Jeśli Microsoft mógłby wymyślić rozwiązanie, nie mielibyśmy pirackich wersji systemu Windows, więc nic nie jest bardzo bezpieczne. Oto kilka podobnych pytań z Przepełnienia stosu i możesz wdrożyć własny sposób ich ochrony. Jeśli wydajesz różne wersje, możesz zastosować różne techniki dla różnych wersji, więc zanim pierwsza zostanie złamana, druga może przejąć kontrolę.

Shoban
źródło
5

Reaktor .NET

Aktualizacja

Jared zwrócił uwagę, że de4dot twierdzi, że jest w stanie go zdekompilować .

.NET Reactor zapewnia pełną ochronę wrażliwej własności intelektualnej poprzez konwersję zestawów .NET w niezarządzane procesy, których nie można rozumieć jako CIL i których żadne istniejące narzędzie nie może dekompilować. Hakerzy nie mają dostępu do żadnej zrozumiałej formy Twojego źródła.

Wydajne i elastyczne funkcje licencjonowania .NET Reactor umożliwiają egzekwowanie warunków licencji i ochronę strumienia przychodów za pomocą blokad sprzętowych i programowych. Menedżer licencji może zbudować licencje próbne lub stałe w ciągu kilku sekund. W pełni udokumentowany zestaw programistyczny (SDK), wraz z przykładami, pozwala na wywołanie systemu licencyjnego bezpośrednio z kodu, umożliwiając tworzenie niestandardowych rozszerzeń systemu licencyjnego.

loraderon
źródło
3
Próbowałem skontaktować się z tymi facetami z jakimś pytaniem, miałem o ich produkcie, ale nigdy nie odpowiedzieli. Czy wypróbowałeś ich produkt? Poszedłem z inteligentnym montażem i zarówno ich produkt, jak i wsparcie są bardzo dobre. Ale jak już powiedziałem w pytaniu, zaciemnianie jest jednym ze sposobów, ale nie pełnym dowodem.
Priyank Bolia
1
Wcześniej miałem problemy z ich produktem, a następnie zadałem pytanie dotyczące ikon wysokiej rozdzielczości w grupach.google.se/group/net-reactor-users i otrzymałem odpowiedź i poprawkę, ale teraz wydaje się, że trudno jest złapać. Szkoda - to świetny produkt i wciąż go
używam
2
Jeśli „żadne istniejące narzędzie nie może się dekompilować”, dlaczego jest wymienione jako obsługiwany obfuscator / paker na stronie funkcji de4dot ?
Jared Thirsk
Prawdopodobnie dlatego, że jest to stare oświadczenie i nie zaktualizowali swojej strony internetowej. Nie jestem już użytkownikiem żadnego narzędzia zaciemniającego.
loraderon,
de4dot to bardzo potężne narzędzie. Próbowałem tego przeciwko kilku zaciemniaczom i to świetna robota. Jednak nie był w stanie obsłużyć plików chronionych .NET Reactor (v6.0). Może de4dot jest nieaktualny.
InputOutput
4

Oto jeden pomysł: możesz mieć serwer obsługiwany przez Twoją firmę, z którym muszą się łączyć wszystkie wystąpienia oprogramowania. Samo połączenie i zweryfikowanie klucza rejestracyjnego nie jest wystarczające - po prostu usuną czek. Oprócz sprawdzania klucza musisz także zlecić serwerowi wykonanie ważnego zadania, którego klient nie może sam wykonać, więc nie można go usunąć. Prawdopodobnie oznaczałoby to dużo intensywnego przetwarzania po stronie serwera, ale utrudniłoby to kradzież oprogramowania i przy założeniu, że masz dobry schemat kluczy (sprawdź własność itp.), Klucze będą również trudne do zdobycia skraść. Jest to prawdopodobnie bardziej inwazyjne niż chcesz, ponieważ będzie wymagać od użytkowników połączenia z Internetem w celu korzystania z oprogramowania.

rmeador
źródło
5
co jeśli serwer jest wyłączony lub użytkownicy nie zawsze mają dostęp do Internetu, twoja metoda po prostu frustruje klientów, ponieważ często odwiedzają serwery internetowe w obie strony tylko po to, aby korzystać z aplikacji.
Priyank Bolia
Zgadzam się całkowicie. Dlatego powiedziałem „to jest prawdopodobnie bardziej inwazyjne niż chcesz ...” w mojej ostatniej linii. Właśnie oferowałem OP najlepsze rozwiązanie, które moim zdaniem było technicznie wykonalne, a nie najlepsze podejście do zadowolenia klientów :)
rmeador,
W pierwszym kwartale 2010 r. (Kilka miesięcy po napisaniu tej odpowiedzi) firma zajmująca się tworzeniem gier, Ubisoft, próbowała tego i najwyraźniej obciążenie komponentów po stronie serwera było tak duże, że nie można było w nie grać. Ogólne wrażenie SW: „kłopotliwy w instalacji, nie można go używać w trybie offline, inwazyjny i zawodny ”. Tak więc, jeśli zdecydujesz, że najlepszym rozwiązaniem jest przetwarzanie po stronie serwera, upewnij się, że możesz skalować do popytu.
Piskvor opuścił budynek
3

Wszystko, co działa na kliencie, można zdekompilować i złamać. Zmarnowanie tylko utrudnia. Nie znam twojej aplikacji, ale 99% czasu po prostu nie uważam, że warto.

Kendrick
źródło
3

Przykro nam, nie można w pełni zabezpieczyć aplikacji.

Fredou
źródło
2

Pamiętaj, że ponad 99% użytkowników nie będzie zainteresowanych badaniem pliku wykonywalnego, aby zobaczyć, jak to działa.

Biorąc pod uwagę, że tak niewielu ludzi będzie nawet męczyć się z próbowaniem i że większość zaciemniaczy można obejść, czy warto poświęcić swój czas i wysiłek?

Lepiej zainwestuj czas w ulepszanie produktu, aby więcej osób chciało z niego korzystać.

ChrisF
źródło
2

Wystarczy dodać ostrzeżenie: jeśli zamierzasz użyć zaciemnienia, sprawdź, czy wszystko nadal działa! Zaciemnianie może zmienić takie rzeczy, jak nazwy klas i metod. Jeśli więc używasz refleksji do wywoływania określonych metod i / lub klas (jak w architekturze wtyczek), aplikacja może przestać działać po zaciemnieniu. Również Stacktrace mogą być bezużyteczne do śledzenia błędów.

Hans Keinging
źródło
2

Jeśli jest napisany w .NET i skompilowany do CIL , może zostać odzwierciedlony. Jeśli chodzi o bezpieczeństwo i należy unikać zaciemniania, zalecamy napisanie aplikacji w języku innym niż zarządzany, co z natury jest trudniejsze do odtworzenia.

Peter Mortensen
źródło
2

Jak upewnić się, że aplikacja nie jest modyfikowana, i jak upewnić się, że mechanizm rejestracji nie może być poddany inżynierii wstecznej.

Oba mają tę samą bardzo prostą odpowiedź: nie rozdawaj kodu obiektowego niezaufanym podmiotom, takim jak (najwyraźniej) Twoi klienci. To, czy możliwe jest hostowanie aplikacji na twoich komputerach, zależy tylko od tego, co ona robi.

Jeśli nie jest to aplikacja internetowa , być może możesz zezwolić na logowanie SSH z X przekierowaniem na serwer aplikacji (lub , jak sądzę, w przypadku Windows Remote Connection Connection Remote Desktop ).

Jeśli podasz kod obiektowy osobom typu nerdy, a oni myślą, że twój program może być fajny do złamania, zostanie złamany. Nie da się tego obejść.

Jeśli mi nie wierzysz, wskaż głośną aplikację, która nie została złamana i piracka.

Jeśli użyjesz kluczy sprzętowych, spowoduje to, że produkcja będzie droższa, a twoi użytkownicy będą cię za to nienawidzić. To prawdziwa dziwka, czołgać się po podłodze, podłączając i odłączając 27 różnych urządzeń USB, ponieważ twórcy oprogramowania ci nie ufają (wyobrażam sobie).

Istnieją pakiety, które będą szyfrować plik EXE i odszyfrować go, gdy użytkownik będzie mógł go używać

Oczywiście istnieje sposób, aby złamać test „can-I-use-it”, aby zawsze zwracał wartość true.

Paskudną sztuczką może być użycie wartości bajtowych kodów operacyjnych, które przeprowadzają test gdzieś indziej w programie, w nieprzyzwoity sposób, który spowoduje awarię programu z dużym prawdopodobieństwem, chyba że wartość jest właściwa. To jednak powoduje, że jesteś powiązany z określoną architekturą :-(

Jonas Kölker
źródło
nie powoduje awarii łatwo debugować i zastąpić kod w .NET, aby pominąć to sprawdzenie. Również w jaki sposób zmienisz kody operacyjne w .NET, czy możesz rozwinąć tę kwestię?
Priyank Bolia
O. Miałem na myśli sztuczki C; powiedzmy, weź adres funkcji sprawdzania poprawności, dodaj 10 pierwszych bajtów w tej tablicy char (rzut wskaźnikiem funkcji); wybierz dowolną funkcję f i zapisz [adres f minus poprzednia suma] w fptr. Zawsze nazywaj f as * (fptr + ta suma). Wstępnie oblicz „sumę”
Jonas Kölker
2

Uczyń dobrą aplikację i kod prostym systemem ochrony. Nie ma znaczenia, jaką ochronę wybierzesz, zostanie ona odwrócona ... Więc nie marnuj zbyt wiele czasu / pieniędzy.

knowopx
źródło
2

Jeśli chodzi o .NET, jeśli wypuszczasz aplikację Windows Forms (lub dowolną aplikację, w której klient ma przenośny plik wykonywalny), można ją złamać.

Jeśli chcesz pozostać przy .NET i zminimalizować szansę na pobranie kodu źródłowego, możesz rozważyć wdrożenie go jako aplikacji ASP.NET na serwerze WWW, zamiast uczynić go aplikacją Windows Forms.

Peter Mortensen
źródło
2

Szczerze mówiąc, czasami musimy zaciemnić kod (na przykład zarejestrować klasy licencji i tak dalej). W takim przypadku twój projekt nie jest darmowy. IMO, powinieneś zapłacić za dobrego obfucatora.

Dotfuscator ukrywa twój kod, a .NET Reflector wyświetla błąd podczas próby jego dekompilacji.

Peter Mortensen
źródło