Dekompilacja. NET, jakie to proste?

Szukałem najlepszego szyfrowania klucza licencyjnego dla aplikacji i ktoś powiedział, że ktoś może łatwo dekompilować aplikację, a następnie po prostu pominąć test klucza licencyjnego.

Jak ktoś mógłby to zrobić praktycznie mówiąc? Więc mają moje .dll, muszą go jakoś dekompilować, potem skomentować wywołanie funkcji, aby sprawdzić licencję, a następnie przekompilować? Dekompilator musi być naprawdę dobry, tak aby Kod nadal się kompilował!

Author: mdb, 2008-11-05

9 answers

Spróbuj otworzyć aplikację za pomocą Reflector . Pewnie będziesz zaskoczony: -)

I gdy cracker znajdzie właściwą lokalizację w Twoim kodzie, może użyć kombinacji ildasm/ilasm , aby usunąć czek z Twojej aplikacji - nawet jeśli generowany kod nie zostanie skompilowany.

 29
Author: Rasmus Faber,
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-11-05 14:36:00

Jeśli kod źródłowy został normalnie skompilowany, bardzo łatwo jest dekompilować zestawy. NET.

You could use . Net Reflektor, pierwotnie opracowany przez Lutza Roedera, obecnie wspierany przez Redgate Software. Na dole tej odpowiedzi znajduje się zrzut ekranu, który daje wrażenie, co robi Reflektor.

Możesz przeglądać swoje przestrzenie nazw i klasy oraz widzieć kod źródłowy i metody w swoim ulubionym języku. NET. Denis Bauer ' s FileDisassembler pozwoli ci (lub złym hakerom w Twoim przypadku) przekonwertować go na rozwiązanie VS i wprowadzić modyfikacje do programu.

Istnieją pewne środki zaradcze, takie jak użycie code obfuscator , aby uczynić Twój kod praktycznie nieczytelnym.

Jest kilka innych ciekawych pytań na temat StackOverflow:

zrzut ekranu z reflektora:

Alt text http://www.red-gate.com/products/reflector/images/screenshot_full_screen.gif

 14
Author: splattne,
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
2017-05-23 12:16:59

Josh Smith wydał również Crack.NET Ostatnio, który może być użyty do podłączenia do uruchomionego procesu. NET, a następnie otworzyć go w Reflector - więc nawet jeśli zespoły na dysku są jakoś zaszyfrowane (aby uniknąć osób używających Reflector, aby się do nich dostać), nadal będą mogli używać wersji w pamięci

 5
Author: Wilka,
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-11-05 15:14:32

. NET jest bardzo łatwy do dekompilacji. Zaciemnienie sprawi, że trochę trudniej będzie zrozumieć, co się dzieje, ale ktoś dekompilujący Twój kod nadal może to rozgryźć, jeśli jest wytrwały.

Oto kilka rad na temat ochrony Twojego kodu. NET, które znalazłem w Internecie:

Http://blogs.msdn.com/ericgu/archive/2004/02/24/79236.aspx

Tylko zauważ, że żadna z omawianych technik nie jest w 100% skuteczna, to tylko pytanie, ile obręczy zrobisz cracker przeskocz.

 2
Author: Giovanni Galbo,
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-11-05 14:38:21

Kompilacja.NET w ogóle jest dość łatwa: aby poczuć to samemu, po prostu chwyć kopię . NET Reflector i spróbuj.

W większości przypadków nie będzie potrzeby rekompilowania kodu w celu usunięcia prostej kontroli licencji: wystarczy łatanie MSIL załatwi sprawę.

Ochrona się przed tym scenariuszem daje szybko malejące zwroty: zawsze będzie zawsze ktoś na tyle sprytny, aby ominąć wszelkie dodatkowe kontrole Dodaj do swojego kodu. Na przykład można dodać podpis cyfrowy do kodu i odmówić uruchomienia podpisu nie pasuje (wskazując, że kod został zmodyfikowany, na przykład w celu usunięcia sprawdzenia licencji).

Gra staje się następnie usuwać sprawdzanie podpisu (oprócz sprawdzania klucza licencyjnego). Więc dodajesz kolejny czek, który można ominąć, itd., ad infinitum.

Istnieje cała branża kod obfuscatation i ochrona przed kopiowaniem narzędzia, które pomogą Ci chronić oprogramowanie przed takimi problemami. To do ciebie należy decyzja, czy dodatkowy wysiłek po twojej stronie i irytacja, którą spowodujesz swoim legalnym klientom, jest warta zakupu tych rozwiązań...

 2
Author: mdb,
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-11-05 14:46:35

Jeśli chcesz się przed tym bronić, możesz przeczytać, Jak to zaatakować.

Wykorzystanie oprogramowania Greg Holland & Gary McGraw jest doskonałym wprowadzeniem.

 2
Author: Gavin Miller,
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-11-05 14:53:57

Najlepiej nie przesadzać z technologią klucza licencyjnego. Cokolwiek zrobisz, może zostać zhakowane przez zdeterminowanego użytkownika i narażasz się na większe ryzyko dodania problemów, które zatrzymają legalnych użytkowników korzystających z Twojej aplikacji. Widziałem nawet kod, który był chroniony za pomocą Hasp Dongle został złamany. Szyfrowanie klucza licencyjnego i zaciemnianie kodu powinno wystarczyć, aby zapobiec atakom oportunistycznym, nie ma sensu wykraczać poza to.

Eric Sink napisał dobry artykuł ten punkt patrz sekcja "4. Nie drażnij uczciwych ludzi" z "zasady przejrzystości"

 2
Author: Martin Brown,
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-11-17 21:19:32

Nawet bez reflektora, ludzie robią to od wieków. Zasadniczo oglądasz aplikację za pomocą debugera - coś takiego jak WinDBG zrobi - a następnie dowiadujesz się, kiedy nastąpi sprawdzenie licencji. Obserwujesz wartość zwracaną, a następnie po prostu łatasz aplikację, aby przejść bezpośrednio do sprawdzenia "wszystko dobrze".

Polecam wszystko co ludzie zamieścili powyżej. Po prostu trzeba zdać sobie sprawę, że jest to gra kot i mysz, a jeśli zwrot z inwestycji będzie warto. Jeśli masz użytkowników, którzy nie próbują grać w system, to może zrobić coś prostego. Jeśli masz coś, gdzie pękanie jest szalejąca, następnie trzeba będzie spojrzeć na różne strategie i przejść stamtąd.

Nie musisz przekompilowywać aplikacji, aby ją łatać - istnieje wiele binarnych narzędzi do łatania. I to nie zatrzyma najbardziej zdeterminowanych krakersów, jeśli jest wystarczająco dużo pieniędzy, aby być.

 1
Author: Cory Foy,
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-11-05 15:55:06

" Too "

Każdy rodzaj"standardowego" /zwykłego mechanizmu sprawdzania licencji jest celem automatycznego narzędzia do usuwania. A w kilku komercyjnych aplikacjach. NET, które przemyślałem, te" zbyt trywialne " kontrole wydają się powszechne.

Najlepiej chronić poprzez uzależnienie części programu od serwisu www. Nie powinno to być zbyt gadatliwy interfejs, aby uniknąć spowolnienia wykonania, ale nie powinno być również bardzo grube, ponieważ te kawałki mogą być po prostu pobrane i buforowane lokalnie w " cracked wersja", chyba że aplikacja zależy od nich często zmienia.

Jeśli chcesz uniknąć połączenia z siecią (niektóre zastosowania lub użytkownicy mogą uznać, że problematyczne/wątpliwe w zależności od aplikacji, chyba że jest to coś, co opisujesz i podajesz wartość), a następnie podział niektórych programów na natywną bibliotekę dll lub dwa i posiadanie kontroli licencji we wszystkich częściach aplikacji i mniej oczywiście tak w natywnych bibliotekach dll, prawdopodobnie wystarczy, aby odstraszyć większość.

 1
Author: Anonymous Coward,
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
2011-12-10 10:46:46