stworzono przede wszystkim dla administratorów, choć jest
wykorzystywany także przez programistów.
Ngen.exe Kompiluje język pośredni zestawu do postaci odpowiedniego kodu
maszynowego. Generowany w ten sposób obraz jest następnie
Native Image Generator
umieszczany w pamięci podręcznej rdzennych obrazów.
Sn.exe Generuje klucze, które są następnie wykorzystywane do tworzenia
silnie nazwanych (podpisanych) zestawów.
Narzędzie Strong Name
wincv.exe Interfejs graficzny wyświetlający i umożliwiający przeszukiwanie
informacji o klasie.
Windows Forms Class Viewer
Wsdl.exe Generuje opisowe informacje o usłudze sieciowej (Web Service)
informacje mogą być wykorzystywane przez klienta uzyskującego
Narzędzie Web Services
dostęp do danej usługi.
Description Language
Jeśli masz zainstalowane środowisko Visual Studio, dużo prostszym rozwiązaniem będzie
użycie prekonfigurowanego wiersza poleceń tego środowiska. Wiersz poleceń środowiska
VS.NET automatycznie inicjalizuje informacje o ścieżkach, które są niezbędne do uzyskiwa-
nia dostępu do narzędzi wiersza poleceń.
Ildasm.exe
Narzędzie Intermediate Language Disassembler (Ildasm), które jest częścią zestawu narzę-
dzi .NET Framework SDK, zwykle znajduje się w podkatalogu Bin w katalogu, w którym
zainstalowano ten zestaw narzędzi. Narzędzie Ildasm jest bezcenną pomocą podczas anali-
zy środowiska zestawów platformy .NET i jako takie będzie jednym z pierwszych narzędzi,
z którym będziesz się musiał zaznajomić już na początku swojej przygody z zestawami .NET.
48 Część I Podstawy programowania w języku C# i wprowadzenie do technologii .NET
Najprostszym sposobem użycia narzędzia Intermediate Language Disassembler jest wpisa-
nie w wierszu poleceń następującego wyrażenia:
C:\>Ildasm /adv
Opcjonalny przełącznik /adv powoduje, że będą dostępne zaawansowane opcje wyświetla-
nia. Wykonanie tego polecenia wywoła graficzny interfejs użytkownika (GUI) z menu File,
w którym będziemy mogli wybrać interesujący nas zestaw. Warto pamiętać, że narzędzie
Ildasm nie otwiera plików składowanych w pamięci podręcznej zestawów (GAC).
Na rysunku 1.9 przedstawiono przykład danych wyjściowych wyświetlonych przez narzę-
dzie Ildasm po wybraniu jednego z zestawów. Zawartość zestawu jest prezentowana w czy-
telnym, hierarchicznym formacie zawierającym nazwę zestawu, w tym przypadku corecsharp1,
oraz wszystkie jego składniki.
Rysunek 1.9.
Zawartość
wybranego zestawu
wyświetlona
przez narzędzie
Ildasm.exe
Użytkownik narzędzia może wejść w głąb tej hierarchii, aby zapoznać się z reprezentowa-
nym przez poszczególne składniki kodem języka pośredniego IL (lub wspólnego języka
pośredniego CIL). Z rysunku 1.9 wynika, że zestaw corecsharp1 składa się z trzech
metod: Metric, conversion i metric. Potwierdza to oryginalny kod klasy Conversion napi-
sany w języku C#:
public class Conversion
{
public double Metric( double inches)
{ return (2.54 * inches); }
[CLSCompliantAttribute(false)]
public double metric( double miles)
{ return (miles / 0.62); }
public double conversion( double pounds)
{ return (pounds * 454); }
}
Dwukrotne kliknięcie metody Metric spowoduje wyświetlenie ekranu z kodem języka po-
średniego (IL) tej metody patrz rysunek 1.10.
Narzędzie Ildasm może być wykorzystywane do nauki i eksperymentowania z koncepcją
języka pośredniego i zestawów. Program znajduje też ważne zastosowania praktyczne.
Przypuśćmy, że dysponujemy komponentem (zestawem .NET) opracowanym przez kogoś
Rozdział 1. Wprowadzenie do technologii .NET i języka C# 49
Rysunek 1.10.
Widok kodu języka
pośredniego (IL)
innego, i że nie posiadamy żadnej dokumentacji na jego temat. W takich przypadkach po-
szukiwanie szczegółów na temat interfejsu tego zestawu powinniśmy rozpocząć właśnie od
jego otwarcia w narzędziu Ildasm.
Narzędzie Ildasm zawiera w menu File opcję Dump, za pomocą której możemy zapisać
dokumentację programu w pliku tekstowym. Aby utworzyć długi, ale czytelny dokument
o metadanych danego zestawu, wybierz opcję Dump Metainfo; aby zapoznać się z pro-
filem zestawu włącznie z liczbą bajtów wykorzystywanych przez poszczególne składniki,
wybierz opcję Dump Statistics.
Narzędzie Ildasm i zaciemnianie kodu
Jednym z naturalnych odruchów programistów aplikacji .NET jest pytanie o sposób ochro-
ny ich własności intelektualnej w sytuacji, gdy istnieją takie narzędzia jak Ildasm (i inne
komercyjne programy odwracające kompilację), które mogą być wykorzystywane do od-
twarzania oryginalnego kodu na podstawie skompilowanych zestawów. Jednym z rozwią-
zań jest technika nazywana zaciemnianiem kodu (ang. obfuscation), która polega na zręcz-
nym modyfikowaniu nazw i innych operacjach na kodzie skutecznie uniemożliwiających
jego odczytywanie przez ludzi.
Należy pamiętać, że zaciemnianie kodu nie jest tożsame z jego szyfrowaniem. Szyfrowanie
wymagałoby wykonywania dodatkowego kroku odszyfrowywania przed przetworzeniem
kodu przez kompilator JIT. Zaciemnianie polega na transformacji kodu języka pośredniego
do postaci, w której można go skompilować za pomocą standardowych narzędzi środowisk
wytwarzania oprogramowania (patrz rysunek 1.11).
Rysunek 1.11.
Zaciemnianie
kodu skutecznie
ukrywa oryginalny
kod języka
pośredniego (IL)
50 Część I Podstawy programowania w języku C# i wprowadzenie do technologii .NET
Zaciemniony kod funkcjonalnie nie odbiega od oryginalnego kodu języka pośredniego da-
nego zestawu i podczas wykonywania we wspólnym środowisku uruchomieniowym (CLR)
generuje identyczne wyniki. Jak to możliwe? Otóż typowym działaniem w ramach zaciem-
niania kodu jest zamiana czytelnych nazw typów i składowych na nazwy, które czytelni-
kowi takiego kodu niczego nie mówią. Przykładowo, kiedy zajrzysz do zaciemnionego kodu,
znajdziesz tam mnóstwo typów nazwanych a lub b. Algorytm zaciemniania musi oczywi-
ście być na tyle inteligentny , by nie zmieniać nazw typów wykorzystywanych poza mody-
fikowanym zestawem, ponieważ każda taka zmiana uniemożliwiłaby prawidłowe odwołania
do tych typów. Innym typowym rozwiązaniem jest modyfikowanie przepływu sterowania
(ang. control flow) w sposób, który nie zmienia logiki działania programu. Przykładowo,
wyrażenie while można zastąpić kombinacją wyrażeń goto oraz if.
Zestaw narzędzi .NET Framework SDK nie zawiera własnego mechanizmu zaciemniania
kodu. Zrodowisko programowania Visual Studio .NET jest oferowane wraz z narzędziem
Dotfuscator Community Edition, czyli wersją komercyjnego produktu Dotfuscator z nieco
ograniczoną funkcjonalnością. Chociaż wspomniane narzędzie nie jest specjalnie wyrafino-
wane i działa wyłącznie w środowiskach firmy Microsoft, warto właśnie od niego rozpocząć
poznawanie tego ciekawego procesu. Wielu producentów oferuje bardziej zaawansowane pro-
dukty w tym zakresie.
wincv.exe
WinCV jest przeglądarką klas analogiczną do narzędzia Visual Studio Object Viewer ofe-
rowaną w ramach środowiska VS .NET. Program znajduje się w katalogu Program Files\ [ Pobierz całość w formacie PDF ]