Baza Wiedzy

Zaciemnianie i dekompilacja programów C#

Zaciemnianie kodu to metody odpowiedzialne za przekształcanie programów komputerowych w taki sposób, aby utrudnić zrozumienie zasad ich działania. Program po zaciemnieniu musi mieć taką samą funkcjonalność.

Dekompilacja to proces przekształcania kodu maszynowego/bajtowego do języka wyższego poziomu.

Aplikacja napisana w języku C# podczas procesu kompilacji jest kompilowana do kodu pośredniego – języka CLI. Common Intermediate Language jest językiem najniższego poziomu dla platformy Microsoft .NET, jest on w pełni zrozumiały dla człowieka. Podczas uruchomienia programu kod CLI jest kompilowany przez maszynę wirtualną bezpośrednio do kodu bajtowego.

Dzięki temu w stosunkowo łatwy sposób można podejrzeć kod źródłowy napisanej aplikacji.

Wymagania

Do zaciemniania i dekompilacji kodu potrzebujemy następujących programów:

  • Visual Studio 2017 Community (pobierz program)
  • Dotfuscator Community Edition – darmowe narzędzie do zaciemniania kodu .NET zintegrowane z Visual Studio.
  • Telerik JustDecompile – darmowe narzędzie do dekompilacji aplikacji pisanych w frameworku .NET (pobierz program)

Dekompilacja kodu

Aby dokonać procesu dekompilacji, należy uruchomić Telerik JustDecompile.
Następnie klikamy na Open -> File(s) i wybieramy plik wykonawczy (rozszerzenie exe) programu napisanego w C# i klikamy Otwórz.

Otrzymujemy podgląd kodu CLI:

zaciemnienie kodu

Jak widać, kod CLI jest bardzo podobny do kodu C#. Bez trudu możemy podejrzeć jak działa program i zrozumieć logikę biznesową i sposób działania.

Eksport kodu CLI do C#

Jeżeli klikniemy prawym klawiszem myszki na nasz program, możemy stworzyć projekt Visual Studio. Telerik JustDecompile wyeksportuje nasz program i stworzy kod C# na podstawie kodu CLI. Jest to proces odwrotny do kompilacji, czyli dekompilacja.

Eksport kodu CLI do C#

Po wyeksportowaniu możemy otworzyć projekt przy pomocy Visual Studio. Przekonwertowany kod będzie się trochę różnił od oryginalnego kodu C#, ale cała semantyka zostanie zachowana.

tworzenie projektu

Otworzony projekt można skompilować ponownie, otrzymując plik wykonawczy exe. Oczywiście można edytować kod C# przed kompilacją i wprowadzać zmiany w działaniu programu.

projekt w Visual Studio

Zaciemnianie kodu

Do zaciemniania kodu będziemy używać Dotfuscator, który jest dostępny dla programistów korzystających z Visual Studio. Aby go uruchomić, należy wpisać w polu Quick Launch w Visual Studio dotfuscator

narzędzie do zaciemniania kodu

Po uruchomieniu musimy ustawić w zakładce Properties gdzie ma zapisać się plik po zaciemnieniu. Następnie, w zakładce Inputs dodajemy pliki exe, które chcemy zaciemnić. W dalszej kolejności klikamy Build -> Build Project

zaciemnianie kodu

Po zaciemnieniu kodu dostajemy prosty raport z zaciemniania naszej aplikacji. Przykładowy raport wygląda następująco:

Build Finished.
Build StatisticsTotalRenamedPercent Renamed
Types66100%
Methods14321,43%
Fields66100%

Jak widać, wszystkie nazwy metod, klas i zmiennych zostały zmienione na litery np. a, b, c. Przy dużych projektach w znaczący sposób utrudnia to zrozumienie, co w programie dzieje się „pod spodem”. Kod CLI stał się zupełnie nieczytelny i nie da się w łatwy i przystępny sposób przywrócić niezaciemnionego kodu.

efekt zaciemnienia kodu

Podsumowanie

W artykule opisane zostały podstawy korzystania z Dotfuscator’a i JustDecompile. Nauczyliśmy się:

  • Trochę o kompilacji programów C#
  • Jak dekompilować program napisany w frameworku .Net i wyeksportować projekt Visual Studio
  • Podstaw zaciemniania kodu .Net

Leave a comment