Silne nazewnictwo jest używane wraz z "tokenem klucza publicznego" do utworzenia pełnej nazwy wyświetlania (mscorlib, version=2.0.0.0, Culture=neutral, PublicKeyToken=b4778,.....
). Dzięki temu możemy mieć wiele wersji tego samego zestawu obok siebie w tym samym katalogu aplikacji.
Token klucza publicznego (a tym samym technika określania ciągów znaków) pozwala również programowi ładującemu .NET wykryć, czy ktoś zmodyfikował zawartość złożenia od czasu jego rozprowadzenia. Jest to prawdą, ponieważ gdy podpisujesz zestaw za pomocą "tokena prywatnego", kompilator wygeneruje wartość skrótu, którą osadza w metadanych zestawu, która opisuje publiczną część twojego "tokena prywatnego". Program ładujący może następnie użyć tej wartości, aby określić, czy zestaw został zmodyfikowany.
Odnośnie zespoły rozdzielające, istnieje kilka podstawowych rzeczy do rozważenia:
Sondowanie Ładowarka próbuje zlokalizować zespoły wykorzystaniem podstawowego katalogu „sondowanie” techniki. Oznacza to, że spróbuje zlokalizować "MyAssembly.dll
" (na przykład) w katalogu startowym aplikacji, jeśli nie, to w podkatalogach poniżej. Jeśli sondowanie nie uda się zlokalizować "MyAssembly.dll
", zdarzenie AppDomain
'AssemblyResolve
zostanie wyrzucone.
Konfiguracja maszyny/Użytkownik/systemu machine.config
, user.config
i system.config
są pliki konfiguracyjne przechowywane lokalnie w systemie, który można wykorzystać do zmiany zachowania rezolwerem montażu na „maszyna”, „user” lub ustawienie "system" w całym systemie.
Polityka Wydawca Można użyć „<assemblyIdentity>
” xml token w pliku konfiguracyjnego aplikacji (na przykład „MyApp.exe.config
”), aby wskazać rezolwer do pewnej wersji zespołu lub załadować montaż od A inna lokalizacja.
rozdzielczości niestandardowe chwytać "AssemblyResolve
" wydarzenie AppDomain
. To zdarzenie jest wywoływane, gdy zespół nie może być rozwiązany przez „tradycyjnych” metod
zdecydowanie najmniej skomplikowany mechanizm jest obsłużyć „AssemblyResolve” zdarzenie.
Podsumowując, program rozpoznawania nazw wygląda w bieżącym katalogu lub pamięci podręcznej zespołu globalnego, przetwarza zasady, a następnie w końcu umożliwia niestandardową rozdzielczość.
"pozwala programowi ładującemu .NET wykryć, czy ktoś zmodyfikował zawartość zespołu ...". –
Pewnie. Zasadniczo podczas kompilowania zestawu z silną nazwą wartości skrótu (można również użyć narzędzia wiersza poleceń sn.exe), wartość mieszania zostanie zapisana w metadanych zespołu, który opisuje jego wersję, kulturę, nazwę i wartość tokena. Po załadowaniu zestawu przez moduł ładujący sprawdza on, czy w zespole znajduje się token klucza publicznego, a jeśli tak, uruchamia ten sam algorytm mieszania w zespole, porównuje go z tym, co znajduje się w metadanych zestawu, i odmawia załadowania złożenia, jeśli się różnią. W ten sposób załadowany wykrywa "manipulowanie". Jest bardzo ograniczony, jak widać, ale na razie wystarczający. –
Na pierwszy rzut oka wygląda to na sposób ochrony naszego kodu .NET. Ale, niestety, podniecenie szybko mija i wkrótce uświadomicie sobie, że obfuskacja to kolejna najlepsza rzecz. –