Zaciemnianie i dekompilacja programów C#

Bartosz Szewczyk

Zaciemnianie i dekompilacja programów C#
Sierpień 18, 2017 Katarzyna Sobczak

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:

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.

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.

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.

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

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

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

Build Finished.
Build Statistics Total Renamed Percent Renamed
Types 6 6 100%
Methods 14 3 21,43%
Fields 6 6 100%

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.

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

Podziel się

Autor: Bartosz Szewczyk

Bartosz Szewczyk

Bartosz Szewczyk

Zespół: Apps

Ostatnie artykuły autora

Rozliczanie przebiegów aut w przedsiębiorstwie w 5 minut

Rozliczanie przebiegów aut w przedsiębiorstwie w 5 minut

Bartosz Szewczyk przedstawia rozwiązanie, które pomaga zarządzać w samochodami w przedsiębiorstwie, zapewniając komfort i szybkość pracy użytkowników.

Synchronizator poczty z Exchange do SharePoint

Synchronizator poczty z Exchange do SharePoint

W artykule przedstawiono rozwiązanie pozwalające na synchronizację wiadomości w czasie rzeczywistym z Exchange do SharePoint w celu dostarczenia użytkownikowi dodatkowych, niedostępnych w programie Outlook możliwości pracy nad załącznikami oraz przyspieszenie dostępu do danych.

Routing w Angular

Routing w Angular

Routing umożliwia nawigowanie między komponentami w aplikacji bez jej przeładowywania. W artykule przestawiam, jak we frameworku Angular4 zaimplementować przykładowy routing.

Skontaktuj się z Bartoszem

 

Administratorem danych gromadzonych z wykorzystaniem formularza jest A.P.N. Promise S.A. Podane przez Ciebie dane będą przetwarzane w zakresie niezbędnym do podjęcia kontaktu lub realizacji określonego żądania zgodnie z art. 6 ust. 1 lit. b RODO przez okres niezbędny dla realizacji Twojego zgłoszenia. Wszelkie informacje w zakresie przetwarzania podanych przez Ciebie w formularzu danych oraz posiadanych uprawnieniach znajdziesz w Polityce prywatności. Kliknij i dowiedz się więcej jeżeli informacje podane powyżej nie są dostatecznie jasne!