Który dekompilator platformy .NET jest najlepszy
Dekompilacja zestawów platformy .NET to nieoceniona umiejętność dla każdego programisty lub inżyniera bezpieczeństwa, który chce robić inżynierię wsteczną lub odtworzyć czyjś kod (dezasemblacja). Istnieje kilka narzędzi, które mogą okazać się tutaj pomocne, a każde z nich ma swoje unikalne funkcje i dziwactwa. W tym artykule porównane zostaną funkcje najpopularniejszych dekompilatorów, a Ty sam będziesz mógł zdecydować, który z nich jest dla Ciebie odpowiedni.
Czym jest dekompilacja w .NET?
Każdy, kto chciałby zrozumieć czym jest proces dekompilacji w .NET, musi najpierw zrozumieć pojęcie kompilacji.
Zrozumieć, czym jest kompilacja .NET
W tworzeniu oprogramowania, C# jest językiem programowania wysokopoziomowym. Kompilacja w .NET to proces, w którym kod napisany w C# lub zaprogramowany przez programistę (zrozumiały dla człowieka) jest przekształcany w kod zrozumiały dla maszyny lub komputera. Ten kod nazywany jest kodem języka pośredniego. Oznacza to, że kod źródłowy jest konwertowany na plik wykonywalny (może to być plik .dll lub .exe).
Ten proces kompilacji jest niezbędny, aby móc uruchomić kod źródłowy na komputerze lub urządzeniu za pomocą pliku wykonywalnego.
Teraz, gdy rozumiemy już pojęcie kompilacji oraz tego jak działa (bez zbytniego zagłębiania się), zobaczmy, czym jest dekompilacja i co takiego robi.
Zrozumienie czym jest dekompilacja w .NET
Dekompilacja to z kolei przeciwieństwo kompilacji. Dekompilacja odpowiada za przekonwertowanie kodu zrozumiałego dla maszyny (kod języka pośredniego) pliku wykonywalnego (.exe lub .dll) w oryginalny, zrozumiały dla człowieka kod źródłowy (odzyskuje kod źródłowy). Dzięki temu możliwa jest analiza, zrozumienie i modyfikacja działania aplikacji lub programu.
Dekompilacja jest jednym z pierwszych kroków w inżynierii wstecznej i crackingu aplikacji .NET i C#.
Czy dekompilacja w .NET jest nielegalna?
Jeżeli chodzi o legalność dekompilacji aplikacji .NET to wygląda to tak samo jak w przypadku każdego innego typu aplikacji.
Generalnie dekompilacja aplikacji jest legalna. Zgodnie z ustępem 103 ustawy Digital Millennium Copyright Act (dział 17 Kodeksu Stanów Zjednoczonych, § 1201):
„Osoba posiadająca program legalnie może dokonać inżynierii wstecznej i obejść jego zabezpieczenia, jeśli jest to niezbędne do osiągnięcia „interoperacyjności”, terminu który obejmuje w szerokim zakresie inne urządzenia i programy, które mogą z nim współdziałać, wykorzystywać go oraz używać i przesyłać dane do i z niego w sposób użyteczny.”
Dla przykładu, w USA jest to legalne, o ile oprogramowanie lub aplikacja została uzyskana legalnie i o ile nie zabrania tego umowa licencyjna i umowa o użytkowaniu samej aplikacji.
W Unii Europejskiej dekompilacja jest również legalna, o ile służy celom interoperacyjności. Jednak inżynieria wsteczna i dekompilacja nie daje pozwolenia na publikację wyników.
Czym jest dekompilator platformy .NET i jak działa?
Dekompilator platformy .NET jest narzędziem zewnętrznym używanym do dekompilacji wszystkich typów binarnych i bibliotek platformy .NET. Ponieważ aplikacje platformy .NET i pliki wykonywalne są kompilowane w kodzie języka pośredniego, aby odczytać kod i zrozumieć jego działanie, należy przekonwertować (zdekompilować) kod języka pośredniego na kod w języku C#.
Jak dekompilować aplikacje platformy .NET?
Możesz się zastanawiać, dlaczego chciałbyś dekompilować aplikacje platformy .NET. Być może chciałbyś zagłębić się w świat dekompilacji i inżynierii wstecznej?
Jeśli jesteś więc zainteresowany nauką dekompilacji jakiejkolwiek aplikacji .NET (C#, VB, Xamarin, itd...) w kilku krokach i w bardzo prosty sposób, to zostawiam Ci poniżej ten artykuł wyjaśniający krok po kroku różne fazy dekompilacji, w którym szybko, dzięki metodzie obrazków, dowiesz się jak to zrobić.
Zobaczmy więc, jakie są najlepsze dostępne dekompilatory i przeglądarki zestawów dla aplikacji platformy .NET.
Jakie są najlepsze dekompilatory języka C# i platformy .NET?
W dżungli dekompilatorów i dezasemblerów platformy .NET jest wiele rozwiązań, możemy tam znaleźć ogromną różnorodność narzędzi i opcji: darmowe i płatne, open-source i prywatne, online i offline, dla różnych systemów operacyjnych, itd..
W tym zestawieniu zobaczysz listę najpopularniejszych i najczęściej używanych dekompilatorów (zarówno darmowych jak i płatnych).
Dezasembler języka pośredniego Ildasm.exe
Ildasm.exe to pierwszy dekompilator w tym zestawieniu. Jest on darmowy i kiedy instalujesz środowisko Visual Studio, Ildasm.exe jest automatycznie instalowany razem z nim.
Ten darmowy dekompilator platformy .NET jest napisany w języku platformy .NET (C#) poprzez platformę oprogramowania typu open source, sponsorowaną przez Microsoft: Mono-Project.
Dzięki Ildasm możesz dezasemblować dowolny typ plików binarnych i plików .NET. Opcji zawartych w tym dezasemblerze jest wiele, obsługuje on kilka rodzajów rozszerzeń:
- .dll
- .exe
- .obj
- .lib
- .winmd
Jego wielką przewagą nad innymi dekompilatorami jest, jak już wcześniej wyjaśniłem, to, że instaluje się automatycznie wraz z Visual Studio (a wszyscy wiemy, że Visual Studio jest preferowanym IDE w przypadku platformy .NET).
Dzięki automatycznej instalacji obok Visual Studio, Ildasm ma taką samą kompatybilność międzyplatformową jak samo środowisko. Bez problemu wykorzystasz go na wybranym przez siebie systemie operacyjnym (Windows, macOs lub Linux).
Dekompilator IlSpy ze wsparciem dla generowania plików PDB
ILSpy to drugi dekompilator w tym zestawieniu. Podobnie jak poprzednio wspomniany (Ildasm.exe), jest to darmowy i open source’owy dekompilator i przeglądarka zestawów, część jest oparta na Avalonia (AvaloniaSpy).
Ten dezasembler zapewnia nam wiele ciekawych funkcji i dlatego jest na tej liście:
- Dekompilacja aplikacji stworzonych w języku C#.
- Umożliwia dekompilację plików BAML do plików XAML.
- Łatwe wyszukiwanie metod, właściwości lub typów
- Opcja ReadyToRun (RTR) dla aplikacji .NET Core.
Ma również mocne wsparcie dzięki kompatybilności z różnymi wersjami IDE i systemami operacyjnymi:
- Kompatybilność z Visual Studio 2017/2019/2022.
- Wsparcie dla Visual Studio Code
- Kompatybilność z systemem Windows/Mac/Linux
ILSpy może być zainstalowany z rozszerzeniem dla Visual Studio lub poprzez Pakiet NuGet dla Twoich własnych projektów. Posiada również specjalny moduł do uruchamiania dezasemblera C# z poziomu PowerShell.
Jeśli chcesz, możesz zapoznać się z repozytorium ILSpy na GitHubie.
Debugger DnSpy i edytor zestawu
DnSpy to najpopularniejszy darmowy i open source’owy dekompilator platformy .NET? Dekompilator ten charakteryzuje się dużą ilością opcji i narzędzi, a przede wszystkim designem UI. Używanie DnSpy (dla większości programistów platformy .NET) jest łatwiejsze i bardziej intuicyjne niż wspomniane dekompilatory.
DnSpy to bardzo wszechstronny dezasembler, obsługujący kod C#, VB, F# i nie tylko. Posiada również tryb debugowania dla zestawów gier Unity i najwyraźniej .NET Core i .NET Framework. Ma ciemny motyw (oprócz jasnego oczywiście), co naprawdę się ceni, zwłaszcza dla nas, programistów, których można by uznać za nocne stworzenia ;).
Inną funkcją tego dekompilatora jest to, że jest on rozszerzalny, czyli można tworzyć własne rozszerzenia.
Jako ostatnia ciekawostka, obsługuje monitory o wysokiej rozdzielczości (może ktoś chce dekompilować w 4K 60Hz, kto wie).
Dzięki breakpointom możesz debugować, naciskając tylko F9 i F5. Generowanie plików PBD jest szybkie i niejawne
Jako ciekawostka, ten dekompilator jest znany z tego, że jest używany przez hakerów i ekspertów od bezpieczeństwa i inżynierii wstecznej.
Dekompilator Spices.Net
Spices.NET to kolejny znany dekompilator dla aplikacji języka C#, opracowany przez 9Rays. Jego funkcje to odzyskiwanie kodu źródłowego w celu uniknięcia awarii oraz konwersja zestawów i plików wykonywalnych języka pośredniego na czytelny kod.
9Rays kategoryzuje Spices.NET jako elastyczny i wydajny dekompilator. Wyróżnia się również tym, że obsługuje kilka języków programowania. Są to między innymi C#, VB.NET (Visual Basic), MSIL (Microsoft Intermediate Language), Delphi.NET i J#.
Ten dekompilator jest płatny, ale zawiera też wersję próbną.
Jego główne funkcje to:
- Dekompilator Visual
- Aktywne wskazówki
- Integracja z IDE (Visual Studio)
- Złożone zagnieżdżone instrukcje
Ma również możliwość łatwego rozpoznawania i wykrywania niezabezpieczonego lub podatnego na ataki kodu ze wskaźnikami. Można również wyodrębnić informacje z różnych typów atrybutów (obsługuje również atrybuty niestandardowe).
Dekompilator .NET Reflector od Redgate
Następny dekompilator aplikacji .NET jest na tej liście, ponieważ jest dość dobrze znany i używany już wcześniej przez wielu programistów i firm pracujących z .NET. Komercyjny dekompilator i podobnie jak poprzedni (Spices.Net), jest płatny i posiada wersję próbną.
Ten dezasembler należy do firmy RedGate, firmy programistycznej, która oferuje różne narzędzia i rozwiązania zwiększające produktywność w pracy programisty.
Dzięki .NET Reflector w łatwy sposób znajdziesz i naprawisz błędy w kodzie nawet bez dostępu do oryginalnego kodu źródłowego. Możesz również analizować interfejsy API i różne platformy zewnętrzne.
.NET Reflector posiada również skróty Visual Studio, dynamiczną dekompilację, przeglądanie zestawów i łatwe w użyciu filtrowanie wyszukiwania. Kolejną jego zaletą jest kilka dodatków, które pozwalają dodać więcej funkcjonalności do dekompilatora, dzięki czemu w pełni wykorzystasz jego możliwości.
Zbyt piękne by było prawdziwe, prawda? Otóż dużą wadą jest to, że nie jest już obsługiwany. Jego jedyne wsparcie ogranicza się do jego forum i dokumentacji.
Dekompilator i przeglądarka zestawów JustDecompile od Telerik
Dekompilator platformy .NET, JustDecompile, został opublikowany przez Telerik. Telerik to firma, która oferuje różne produkty i rozwiązania UI dla programistów, służące między innymi do testowania, raportowania i debugowania. JustDecompile jest kolejnym darmowym dezasemblerem platformy .NET i jak podano na stronie internetowej Telerik, jest on „10 razy szybszy od konkurencji.
Pod względem funkcji nie wypada wcale słabo:
- Jest rozszerzalny tak jak Ildasm.exe (pozwala na tworzenie własnych rozszerzeń dekompilatora dzięki publicznemu i widocznemu dla wszystkich API).
- Szybka i łatwa nawigacja dzięki różnym widokom w zakładkach w jednej instancji.
- Obsługuje działania za pośrednictwem wiersza poleceń.
- Wyodrębnianie i zapisywanie zasobów za pomocą Eksploratora Windows.
Ten open source’owy silnik dekompilacji posiada dobre wsparcie, ponieważ Telerik posiada bardzo aktywną społeczność programistów a także dobrą dokumentację i zasoby wsparcia.
Dekompilator i przeglądarka zestawów dotPeek od JetBrains
dotPeek to kolejny samodzielny dekompilator, który również integruje się z Visual Studio. Należy do JetBrains, firmy oferującej narzędzia dla programistów i zespołów programistycznych.
Jest to darmowy i dość kompletny dekompilator platformy .NET i obsługuje różne formaty:
- pliki wykonywalne (pliki .exe)
- biblioteki (pliki .dll)
- Pliki metadanych systemu Windows(pliki .winmd)
Jedną z głównych funkcji jest to, że umożliwia eksport i zapisanie zdekompilowanego kodu w języku C# do nowego projektu Visual Studio (.csproj). Pozwala również na indeksowanie wszystkich zestawów na własnej liście w celu utrzymania ich w porządku i ułatwienia nawigacji.
Możesz wyszukać i podświetlić dowolny symbol, metodę, zmienną lokalną lub właściwość. Możesz również zobaczyć kod języka pośredniego oddzielony od kodu języka C# w innym widoku. Ma również ciemnoniebieski motyw (chociaż w ustawieniach można go również zsynchronizować ze schematem kolorów Visual Studio).
I wreszcie, ten darmowy dekompilator posiada zakładki: możesz dodać do zakładek ważne części kodu i wrócić do nich później (podobnie jak zakładki przeglądarki internetowej), hierarchiczną nawigację klas i eksplorację łańcuchów dziedziczenia.