Obfuskacja kodu, czyli jak utrudnić życie cracker'om
Obfuskacja, jak możemy przeczytać na Wikipedii, to “technika przekształcania programów, która zachowuje ich semantykę, ale znacząco utrudnia zrozumienie.”. Polega ona na takim przetworzeniu kodu lub binariów aplikacji, aby uzyskany po dekompilacji kod był jak najbardziej nieczytelny dla osoby przeprowadzającej analizę działania programu z wykorzystaniem tak zwanej Inżynierii wstecznej.
Obfuskacja objawia się głównie poprzez zmianę nazw pakietów, pól i metod na nazwy nic nie mówiące. Do tego mogą dochodzić również bardziej zaawansowane modyfikacje, takie jak: “rozdzielenie zmiennych, konwersja statycznych danych do procedury, zmiana kodowania, zmiana długości życia zmiennej, łączenie zmiennych skalarnych, zmiana relacji dziedziczenia, rozłam/łączenie tablic, zmiana porządku instancji zmiennych / metod / tablic, rozszerzenie warunków pętli, zmiana kolejności komend / pętli / wyrażeń, metody inline, ogólnikowe wyrażenia, klonowanie metod”.
Często obok obfuskacji biblioteki umożliwiają również przeprowadzenie shrinkowania, czyli usuwania niewykorzystywanych fragmentów kodu lub nawet całych klas, kompresji statycznych zmiennych przechowujących długie ciągi znaków lub bajtów, itp.
W sieci możemy znaleźć wiele bibliotek umożliwiających nam przeprowadzenie takich zabiegów, jednak najczęściej spotykałem się z wykorzystaniem dwóch konkretnych. Są to:
Gdzie ProGuard’a wykorzystuje często w pracy, przy tworzeniu aplikacji dektopowych i apletów, a z yGuarda korzystam pisząc aplikacje dla siebie.