Przegląd narzędzi do reverse engineeringu

Narzędzia

Przegląd narzędzi wykorzystywanych w reverse engineeringu (inżynieria wsteczna oprogramowania). Wady, zalety, alternatywne rozwiązania.

Reverse engineering – czyli inżynieria wsteczna, to zbiór technik wykorzystywanych do analizy zamkniętego oprogramowania w celu wydobycia niedostępnych z pozoru informacji jak np. użyte algorytmy, ukryte hasła dostępu (np. do baz danych), informacje o tym jak szyfrowane są jakieś pliki aplikacji itp.

Reverse engineering stosuje się w takich dziedzinach jak analiza oprogramowania w celu odnalezienia potencjalnych luk bezpieczeństwa (exploitacja), analiza złośliwego oprogramowania (firmy antywirusowe) czy np. lokalizacja oprogramowania i gier.

Zaawansowana analiza oprogramowania wymaga znajomości struktury badanych plików, czyli najczęściej wchodzi w grę znajomość formatów plików wykonywalnych Portable Executable dla systemu Windows czy formatu ELF dla systemów z rodziny Linux. Należy również znać podstawy assemblera dla platform 32 i 64 bitowych, aby poprawnie zrozumieć skompilowany kod w zamkniętym oprogramowaniu, jego strukturę i powszechnie wykorzystywane koncepcje i konstrukcje programistyczne przełożone na binarne dane.

Nawet posiadając odpowiednią wiedzę nie będziemy w stanie jej wykorzystać bez odpowiednich narzędzi. W tym artykule chciałbym przedstawić dedykowane narzędzia z podziałem na kategorie, wykorzystywane w reverse engineeringu. Większość z przedstawionych narzędzi kwalifikuje się na materiał na całkiem oddzielny artykuł, jednak moim zamysłem było przedstawienie jak największej ilości oprogramowania, aby pokazać ich różnorodne zastosowanie.

Skomplikowany charakter oprogramowania do reverse engineeringu i sam proces jego tworzenia wiąże się często z tym, że oprogramowanie takie jest również drogie, lecz starałem się także pokazać alternatywne i darmowe odpowiedniki do zaprezentowanych przykładów.

Identyfikatory

Języków programowania jak i ich kompilatorów jest cały ogrom. Poza aplikacjami stworzonymi w językach skryptowych, można wyróżnić aplikacje skompilowane do natywnego kodu procesora oraz aplikacje skompilowane do kodu przejściowego. Oprócz tego istnieje szereg metod zabezpieczających aplikacje i ich zasoby – wszystko to wpływa na końcowy efekt w postaci binarnego obrazu pliku na dysku.

Jeśli nie jesteśmy pewni, w czym utworzone zostało oprogramowanie, któremu się przyglądamy, bo nie mamy wprawy w rozpoznawaniu charakterystycznych cech w skompilowanych plikach (nazwy sekcji, importowane biblioteki etc.) – warto skorzystać z identyfikatorów (inaczej detektorów), czyli narzędzi, które posiadają bazę sygnatur popularnych kompilatorów, bibliotek programistycznych, kryptograficznych czy systemów zabezpieczeń aplikacji. Szybka analiza pozwoli nam zdecydować, jaki kolejny krok zostanie podjęty (np. rozpakowanie aplikacji).

Detect It Easy

Detektor DIE posiada bazę danych najpopularniejszych systemów zabezpieczających, w tym exe-packerów, exe-protectorów oraz sygnatury popularnych kompilatorów i linkerów. Do tego posiada wbudowany prosty język skryptowy, który pozwala szybko dodawać nowe definicje sygnatur. Dostępna jest także przeglądarka elementów pliku wykonywalnego PE.

Detektor plików Detect It Easy
Rysunek 1.Detektor plików Detect It Easy
Strona https://horsicq.github.io
Licencja Freeware
Zalety
  • Wbudowany język skryptowy
  • Przeglądarka struktur plików PE
  • System wtyczek
  • Jest na bieżąco aktualizowany
  • Wtyczki dla edytora HIEW i CFF Explorer
  • Wersje dla Windows, Mac OS X i Linux
Wady
  • Niewielka baza sygnatur
Alternatywy

Exeinfo PE

Detektor dla całej masy plików wykonywalnych, exe-pakerów, detektor archiwów oraz wszelkiej maści formatów plików na różne systemy operacyjne.

Detektor plików Exeinfo PE
Rysunek 30.Detektor plików Exeinfo PE
Website https://github.com/ExeinfoASL
Mirror http://exeinfo.booomhost.com/
Licence Freeware
Zalety
  • Często aktualizowany
  • Wykrywa formaty plików Symbian / Android / Linux / Mac OS
  • Detekcja archiwów w formatach .zip, .rar , .zlb , .gz , .7 zip , .tar , .cab, .is
Wady
  • Strona główna projektu nie działa, a mirrory raz działają a raz nie
  • Przestarzały interfejs

ProtectionID

Detektor ProtectionID powstał na potrzeby wykrywania systemów zabezpieczeń gier, posiada ogromną bazę sygnatur wszelkich możliwych systemów zabezpieczeń oraz kompilatorów i linkerów. Mimo, że interfejs użytkownika nie ujmuje elegancją, to spełnia swoją funkcję znakomicie oraz jest bardzo często aktualizowany.

Detektor plików ProtectionID
Rysunek 2.Detektor plików ProtectionID
Strona http://pid.gamecopyworld.com
Licencja Freeware
Zalety
  • Ogromna baza sygnatur
  • Bardzo często aktualizowany
Wady
  • Mało intuicyjny interfejs

YARA GUI

Detektor YARA GUI to okienkowy interfejs dla popularnej biblioteki i formatu sygnatur binarnych o nazwie YARA.

Detektor sygnatur YARA GUI
Rysunek 27.Detektor sygnatur YARA GUI
Strona http://sigint9.github.io/yaragui/
Źródła https://github.com/sigint9/yaragui
Licencja Freeware
Zalety
  • Wsparcie dla popularnego formatu sygnatur YARA
  • Prosty interfejs
  • Generator entropii
Wady
  • Brak
Bazy sygnatur
  • http://sigint9.github.io/yaragui/

Deasemblery i dekompilatory

Posiadając wiedzę, z czym mamy do czynienia lub ściślej – w jakim języku programowania i kompilatorze została stworzona aplikacja, rozpoczynamy analizę w deasemblerze lub dekompilatorze. Ich zadaniem jest analiza skompilowanego, binarnego pliku i przedstawienie jego kodu i struktury w czytelnej dla człowieka postaci.

Dzięki procesowi deasemblacji lub dekompilacji, dowiemy się jak wyglądają wszystkie funkcje aplikacji, jakie ciągi tekstowe znajdują się wewnątrz i które fragmenty kodu się do nich odwołują, z jakich zewnętrznych funkcji systemu operacyjnego korzysta aplikacja lub jakie funkcje są eksportowane (np. w przypadku bibliotek dynamicznych DLL).

Rolą deasemblerów jest przedstawienie kodu aplikacji w postaci kodu niskopoziomowego assemblera, czyli jeśli analizowane oprogramowanie było pisane czy to w C++ , Delphi, Visual Basic czy jakimkolwiek innym języku wysokiego poziomu skompilowanego do natywnego kodu – deasembler pokaże nam jego kod wynikowy w postaci kodu assemblera x86 lub x64.

Dekompilatory potrafią lub bardzo się starają odtworzyć oryginalny kod wysokiego poziomu z kodu skompilowanych aplikacji. Jak się domyślacie odtworzenie kodu np. C++ z rozpoznaniem struktur danych, typów, konstrukcji języka programowania ze skompilowanego kodu assemblera jest bardzo skomplikowanym procesem, dlatego ilość narzędzi pozwalających na takie działanie jest bardzo mała, a jeśli już są w tym dobre to równocześnie są bardzo drogie.

Dekompilatory można podzielić ze względu na kategorię oprogramowania, które potrafią analizować. Kompilatory języków takich jak np. C# (cała rodzina .NET Framework), Visual Basic, Java generują kod wynikowy w postaci przejściowej, tzn. nie jest to kod bezpośrednio wykonywany przez procesor jak kod x86, ale to pseudokod (tzw. P-Code), który wykonywany jest przez wirtualną maszynę tych systemów programowania (czyli przykładowo do uruchomienia potrzebujemy zainstalowany np. .NET Framework lub JVM).

Taki kod wynikowy ze względu na prostotę oraz większą ilość informacji zapisaną w postaci pseudoinstrukcji i metadanych, przyczynił się do tego, że dekompilacja w takich przypadkach jest o wiele prostsza niż dekompilacja kodu x86 lub x64. Pociągnęło to za sobą powstanie wielu dedykowanych dekompilatorów, które stały się prawdziwą zmorą programistów tworzących w tych językach programowania, gdyż bardzo prosto każdy może podejrzeć niezabezpieczone oprogramowanie praktycznie w wersji z pięknie odtworzonym kodem źródłowym.

Krótki wstęp za nami, więc przed nami lista najpopularniejszych deasemblerów i dekompilatorów wraz z ich zastosowaniem.

IDA i Hex-Rays

IDA czyli Interactive DisAssembler to niekwestionowany król wśród narzędzi wykorzystywanych w reverse enigneeringu. IDA to deasembler i debugger z wbudowaną obsługą analizy kodu dla ponad 60 rodzajów procesorów. Posiada własny język skryptowy, bogatą bazę sygnatur najpopularniejszych bibliotek programistycznych oraz obsługę wtyczek, które dodatkowo zwiększają funkcjonalność np. obsługę poprzez skrypty w Pythonie.

Okno deasemblera i dekompilatora IDA
Rysunek 3.Okno deasemblera i dekompilatora IDA

Najbardziej znaną i cenioną wtyczką dla IDA jest dekompilator Hex-Rays, który obsługuje dekompilację kodu x86, x64 i ARM, co jest niezastąpionym narzędziem analizy.

IDA posiada również wbudowane debuggery dla wielu platform sprzętowych, co czyni z tego narzędzia prawdziwy kombajn do analizy wszelkiej maści plików wykonywalnych.

Strona https://hex-rays.com
Licencja Komercyjna od 449 EUR oraz darmowa wersja demonstracyjna.
Zalety
  • Obsługa ogromnej ilości typów procesorów
  • Wbudowane sygnatury popularnych bibliotek programistycznych
  • Spore możliwości konfiguracji
  • Wbudowane debuggery
  • System wtyczek
  • Język skryptowy
  • Wersje dla Windows, Mac OS X i Linux
Wady
  • Cena
  • Brak dobrych, darmowych alternatywnych rozwiązań
Wtyczki

Ghidra nowość

Ghidra to nowe i darmowe narzędzie wprost z amerykańskiej agencji wywiadowczej NSA do deasemblacji i dekompilacji binarnych aplikacji.

Jedną z najbardziej wyróżniających się cech Ghidry jest wbudowany dekompilator, który w niektórych przypadkach jak np. analiza kodu ARM potrafi poradzić sobie z rekonstrukcją kodu znacznie lepiej niż dekompilator HexRays.

Okno deasemblera i dekompilatora Ghidra
Rysunek 28.Okno deasemblera i dekompilatora Ghidra

Być może obecnie nie dorównuje całkowicie funkcjonalnościa HexRays (należy pamiętać, że Ghidra to nowy projekt), jednak narzędzia takie jak dekompilatory wymagają ogromu pracy i rzadko się zdarza pojawienie produktu, który ktoś oferuje zupełnie za darmo.

Strona https://ghidra-sre.org/
Licencja Apache License 2.0
Zalety
  • Darmowa licencja!
  • Obsługa wielu rodzajów procesorów
  • Dekompilator, który czasami radzi sobie znacznie lepiej niż ten z HexRays
  • Możliwość kolaboracji wielu osób przy tym samym projekcie
  • System wtyczek i własny interfejs API
  • Wersje dla Windows, Mac OS X i Linux
Wady
  • Nieco przestarzały interfejs
  • Kontrowersje związane z samym faktem, że wydała to agencja NSA (niektórzy wszędzie będą węszyć spisek)
Wtyczki

.NET Reflector

Jeśli przyjdzie nam się zmierzyć z analizą oprogramowania stworzonego w języku programowania opartym o .NET Framework czyli np. C# lub VB#, niezastąpiony okaże się dekompilator .NET Reflector. Dzięki niemu łatwo i sprawnie będzie można podejrzeć strukturę aplikacji i kod.

Ogromną zaletą Reflectora jest to, że posiada małą, lecz bardzo użyteczną bazę wtyczek, dostępna jest przykładowo wtyczka pozwalająca na odtworzenie całego projektu dla Visual Studio ze zdekompilowanej aplikacji. Dodatkowo integracja z Microsoft Visual Studio pozwala na jednoczesne debugowanie własnego kodu oraz kodu zamkniętych bibliotek.

Ze względu na łatwość dekompilacji programów stworzonych dla .NET Framework, powstało wiele narzędzi zabezpieczających, mowa oczywiście o obfuscatorach, które ze skompilowanych programów usuwają metadane, potrafią zmodyfikować kod IL, szyfrują ciągi tekstowe etc. Jeśli natrafimy na taki program, warto zapoznać się z deobfuscatorem de4dot, który automatycznie potrafi usunąć metody zabezpieczeń kilkudziesięciu typów obfuscatorów.

Okno dekompilatora .NET Reflector
Rysunek 4.Okno dekompilatora .NET Reflector
Strona https://www.red-gate.com/products/dotnet-development/reflector/
Licencja Komercyjna od 99 USD oraz darmowa wersja czasowa.
Zalety
  • Znakomita prezentacja i nawigacja po zdekompilowanym kodzie
  • Dekompilacja do wielu wyjściowych języków C#, VB#, IL
  • Dekompilacja i debugowanie wprost z Microsoft Visual Studio
  • Wiele przydatnych wtyczek jak np. patcher Reflexil
Wady
  • Brak obsługi zabezpieczonych aplikacji (brak deobfuscatora)
  • Powolne uruchamianie (sprawdzanie online licencji)
Wtyczki
  • Reflexil – edytor kodu .NET - http://reflexil.net
  • Deblector – debugger - https://deblector.codeplex.com
  • ReflectionEmitLanguage – generator kodu IL - http://reflectoraddins.codeplex.com/wikipage?title=ReflectionEmitLanguage
  • Baza wtyczekhttps://archive.codeplex.com/?p=reflectoraddins

dnSpy porzucony

Prawdziwy kombajn do dekompilacji, edycji pseudokodu IL i debuggowania aplikacji napisanych w .NET. Do tego darmowy i z intuicyjnym oraz nowoczesnym interfejsem graficznym.

Okno dekompilatora i debuggera dnSpy
Rysunek 25.Okno dekompilatora i debuggera dnSpy
Strona https://github.com/dnSpy/dnSpy
Licencja GNU GPL v3
Zalety
  • Szybkość działania
  • Prosta edycja kodu IL
  • Wbudowany debugger
  • Nowoczesny wygląd
Wady
  • Brak
  • Oryginalny projekt został porzucony

dnSpyEx nowość

Reinkarnacja znakomitego dnSpy opisanego powyżej, której dokonał Polak ElektroKill. Zaktualizowane biblioteki do obsługi najnowszych wersji .NET, poprawione błędy. Tylko pobierać i testować.

Okno dekompilatora i debuggera dnSpyEx
Rysunek 29.Okno dekompilatora i debuggera dnSpyEx
Strona https://github.com/dnSpyEx/dnSpy
Licencja GNU GPL v3
Zalety
  • Szybkość działania
  • Prosta edycja kodu IL
  • Wbudowany debugger
  • Nowoczesny wygląd
  • Aktualizacje i bugfixy
Wady
  • Brak

JEB Decompiler nowość

Dekompilator JEBDEC dla platform Android Dalvik, Intel x86, ARM, MIPS, RISC-V, S7 PLC, Java, WebAssembly i Ethereum.

JEB wypełnił lukę, której brakowało w IDA, głównie wspierając dekompilację aplikacji na Androida. Robi to tak doskonale, że jest obecnie standardem przy analizie tychże aplikacji.

Jedno z najlepszych narzędzi do reverse engineeringu z wbudowaną funkcją deobfuskacji wielu strategii wykorzystywanych przez obfuscatory nie tylko na Androida. Tematy deobfuskacji z technicznymi detalami często poruszane są na ich świetnym blogu technicznym i to prawdziwa żyła złota dla ludzi, którzy interesują się modyfikacją, zabezpieczaniem i odbezpieczaniem zmutowanego kodu.

Dekompilator JEB Decompiler
Rysunek 33.Dekompilator JEB Decompiler (aka JEBDEC)
Strona https://www.pnfsoftware.com
Znakomity blog techniczny https://www.pnfsoftware.com/blog/
Licencja Komercyjna i darmowa community edition
Zalety
  • Deobfuskacja - bez tego nie ma co analizować aplikacji na Androida
  • Rozbudowana liczba wspieranych platform, nawet takich jak WebAssembly czy Ethereum
  • Obsługa wtyczek i skryptów
  • Częste aktualizacje
  • Darmowa wersja Community Edition
Wady
  • Można by się przyczepić, że cena, jednak oprogramowanie jest tak zaawansowane i rozbudowane, że usprawiedliwia to.
  • Interfejs użytkownika mógłby być bardziej interaktywny, zwłaszcza w przeglądarce kodu

Java Decompiler

JD-GUI czy też Java Decompiler to dekompilator jak nazwa wskazuje dla aplikacji Java. Pozwala na przeglądanie kodu skompilowanych unitów *.class lub całych paczek *.jar.

Posiada bardzo użyteczną wyszukiwarkę z filtrowaniem pozwalającą na wyszukiwanie po nazwach typów, konstruktorów, polach, metodach i stałych ciągach tekstowych.

Oprócz samodzielnej aplikacji istnieją również wtyczki dla środowiska programistycznego Eclipse oraz IntelliJ IDEA, które pozwalają na przeglądanie kodu skompilowanych modułów.

Jeśli kiedyś korzystałeś lub nadal korzystasz ze znanego dekompilatora JAD (który przestał być rozwijany w 2001 roku) to najwyższa pora na aktualizację, nie dość, że JD-GUI wspiera nowe elementy języka Java to nawigacja po zdekompilowanym projekcie jest bardzo prosta i przyjemna.

Należy tutaj wspomnieć, że tak samo jak w przypadku aplikacji .NET, które zostały zabezpieczone obfuscatorami, tak samo aplikacje w Java mogą być zabezpieczane i wtedy działanie dekompilatora jest ograniczone lub wręcz niemożliwe.

Dekompilator Java Decompiler (aka JD-GUI)
Rysunek 5.Dekompilator Java Decompiler (aka JD-GUI)
Strona http://java-decompiler.github.io
Licencja Freeware
Zalety
  • Intuicyjna nawigacja po zdekompilowanym kodzie
  • Wtyczki dla środowiska Eclipse oraz IntelliJ IDEA
Wady
  • Brak obsługi zabezpieczonych aplikacji (brak deobfuscatora)
  • Brak deasemblacji do IL w przypadku wykrytych błędów

JustDecompile

Darmowa alternatywa dla komercyjnego .NET Reflector od firmy Telerik znanej z komponentów UI. Darmowa nie znaczy gorsza, posiada wbudowaną wyszukiwarkę referencji, generowanie projektu ze zdekompilowanych źródeł oraz obsługę wtyczek, w tym wtyczkę deobfuscatora de4dot.

Dekompilator Just Decompile
Rysunek 6.Dekompilator Just Decompile
Strona https://www.telerik.com/products/decompiler.aspx
Licencja Freeware
Zalety
  • Obsługa własnych wtyczek
  • Generowanie wyjściowego kodu w C#, VB# i IL
  • Wtyczka dla Visual Studio
Wady
  • Jest trochę toporny w obsłudze w porównaniu do .NET Reflectora
Alternatywy

ReFox

Dekompilator dla aplikacji stworzonych w bazodanowym środowisku programowania Visual FoxPro od firmy Microsoft. Jest to bardzo niszowe rozwiązanie do równie niszowego środowiska, jednak nie istnieją alternatywne rozwiązania pozwalające na analizę takich aplikacji, a te które są dostępne przestały być rozwijane i nie wspierają najnowszych wersji aplikacji VFP. ReFox pozwala na dekompilację klas, podgląd form oraz wbudowanych danych.

Dekompilator ReFox
Rysunek 7.Dekompilator ReFox
Strona

http://www.refox.net

Licencja Komercyjna od 290 EUR oraz wersja demonstracyjna.
Zalety
  • Dekompilacja klas
  • Podgląd form
  • Odtwarzanie projektów Visual FoxPro
Wady
  • Trochę przestarzały interfejs
  • Czasami nie radzi sobie z dekompilacją kodu

VB Decompiler

Aplikacje stworzone w Visual Basic 5 oraz 6 należą już do przeszłości, jednak wewnętrzna struktura kodu bazująca na P-Code była zalążkiem technologii .NET i od samego początku sprawiała problemy przy analizie kodu, gdyż nie istniały dedykowane narzędzia do jej analizy. Można powiedzieć, że VB Decompiler powstał odrobinę za późno jak na potrzeby rynku, jednak jest niezastąpiony przy analizie aplikacji Visual Basic (EXE, DLL oraz kontrolek OCX) skompilowanych do P-Code (Visual Basic umożliwiał również kompilację do kodu x86).

Dekompilator VB Decompiler
Rysunek 8.Dekompilator VB Decompiler
Strona https://www.vb-decompiler.org
Licencja Komercyjna od 99 EUR oraz wersja lite.
Zalety
  • Podgląd kodu form i eventów
  • System wtyczek
  • Deasemblacja natywnego kodu x86
Wady
  • Ograniczona nawigacja po zdekompilowanym kodzie
Alternatywy

IDR

Deasembler i dekompilator IDR czyli Interactive Delphi Reconstructor służy jedynie do analizy aplikacji stworzonych w popularnym środowisku Delphi. Jest to narzędzie bardzo przydatne w porównaniu np. do IDA z tego względu, że potrafi przeanalizować wewnętrzne struktury aplikacji Delphi, posiada wbudowaną przeglądarkę form, która w łatwy sposób pozwala na szybkie i łatwe odnalezienie przypisanych zdarzeń do kontrolek znajdujących się na formie (np. button1.OnClick). IDR posiada bogate bazy sygnatur standardowych bibliotek środowiska Delphi we wszystkich znanych wersjach, dzięki czemu w wyjściowym deadlistingu zobaczymy przyjazne nazwy funkcji.

Deasembler i dekompilator dla Delphi - IDR
Rysunek 9.Deasembler i dekompilator dla Delphi - IDR
Strona http://kpnc.org/idr32/en/
Licencja Wersja darmowa z opcją zakupu bardziej aktualnej kopii (jednak na niewiadomych zasadach, gdyż próby kontaktu z autorem się nie powiodły).
Zalety
  • Podgląd form Delphi i eventów kontrolek
  • Eksport mapy z nazwami funkcji i zmiennych (np. dla IDA lub debuggera)
  • Wbudowane sygnatury wszystkich wersji środowiska Delphi
Wady
  • Nieregularne aktualizacje
  • Niejasne zasady dostępu do najnowszych wersji

Debuggery

Każdy programista prędzej czy później poznaje funkcjonowanie debuggera w swoim ulubionym środowisku programowania. Dzięki debuggerowi prześledzimy na żywo działanie aplikacji, zobaczymy jak instrukcje wpływają na zawartość pamięci czy zmiennych oraz będziemy w stanie wyłapać potencjalne błędy. Jednak debugowanie własnego oprogramowania, gdy mamy dostępne informacje o kodzie źródłowym i debugujemy najczęściej kod wysokiego poziomu, wprost ze środowiska programistycznego, jest prostą i przyjemną igraszką w porównania do debugowania aplikacji bez dostępu do kodu źródłowego. W tym miejscu przychodzą z pomocą dedykowane debuggery z zaawansowaną analizą binarnych struktur aplikacji, gdzie do ich poprawnej obsługi wymagana jest już znajomość języków niskiego poziomu oraz podstaw funkcjonowania procesora, dla którego skompilowana została aplikacja.

OllyDbg

Jest to de facto standardowy debugger dla Windows w świecie reverse engineeringu (zaraz obok debuggera wbudowanego w deasembler IDA). Posiada zaawansowaną analizę kodu aplikacji oraz umożliwia ingerencję w niemal każdy aspekt funkcjonowania aplikacji.

Z bardziej ciekawych funkcji, OllyDbg umożliwia warunkowy tracing kodu, posiada ogromną bazę wtyczek np. ukrywających jego obecność przed metodami antydebug (wtyczka Phant0m), czy wtyczki pozwalające na sterowanie działaniem debuggera z poziomu skryptów (wtyczka ODbgScript), a samych skryptów, najczęściej stosowanych do rozpakowywania zabezpieczonych aplikacji znajdziemy setki.

O popularności OllyDbg niech świadczy fakt, że żaden inny popularny debugger łącznie z legendarnym debuggerem systemowym SoftICE nie doczekał tylu wtyczek i zmodyfikowanych wersji jak OllyDbg. Jako ciekawostkę można podać fakt, że powstała specjalna wersja OllyDbg pod nazwą Immunity Debugger z wbudowaną obsługą skryptów Python-a, przeznaczona do analizy malware oraz tworzenia exploitów.

Istnieją obecnie dwie wersje OllyDbg, stara numerowana 1.10, do której powstało najwięcej rozszerzeń oraz nowa wersja 2.01, która po mału zyskuje na popularności. Dobrą wiadomością jest również to, że w produkcji znajduje się 64 bitowa wersja debuggera, której po prostu brakowało w związku z coraz większą popularnością 64 bitowych systemów operacyjnych.

Debugger OllyDbg v1.10
Rysunek 10.Debugger OllyDbg v1.10
Ten sam kod w debuggerze OllyDbg 2.01
Rysunek 11.Ten sam kod w debuggerze OllyDbg 2.01
Strona http://www.ollydbg.de
Licencja Według strony shareware za darmo (wychodzi freeware?)
Zalety
  • Znakomita analiza kodu aplikacji
  • Bogate opcje konfiguracyjne
  • Ogromna baza wtyczek i skryptów
Wady
  • 64 bitowa wersja ciągle w rozwoju
Wtyczki
Alternatywy

x64dbg nowość

x64dbg to w zasadzie dwa debuggery, jeden przeznaczony dla oprogramowania 64 bitowego, a drugi dla 32 bitowego. Nowoczesny interfejs, wiele opcji konfiguracyjnych, wewnętrzne silniki oparte o nowoczesne biblioteki, takie jak TitanEngine, Capstone Engine, Keystone Engine.

Ilość obsługiwanych rzeczy może imponować, system wtyczek, wbudowany język skryptowy, wsparcie dla sygnatur Yara, wbudowany dekompilator. I cały czas jest aktualizowany. W obliczu braku wersji 64 bitowej debuggera OllyDbg, x64dbg stał się de facto standardowym debuggerem, wykorzystywanym w reversingu 64 bitowych aplikacji.

Debugger x64dbg
Rysunek 26.Debugger x64dbg
Strona https://x64dbg.com
Źródła https://github.com/x64dbg/x64dbg
Licencja GNU GPL v3
Zalety
  • Nowoczesny interfejs
  • Silnik debuggera oparty o nowoczesne biblioteki
  • Łatwość konfiguracji
  • System wtyczek
  • Wbudowany język skryptowy
  • Wbudowany dekompilator (Snowman)
Wady
  • Brak wielu wtyczek w porównaniu do OllyDbg
  • Brak wsparcia dla popularnego języka ODBScript (tysiące dostępnych skryptów)
Wtyczki
Alternatywy

DILE

Debugger dla aplikacji napisanych pod .NET Framework. Jest on dość topornym narzędziem, jednak czasami niezastąpiony. Przypomina trochę debugger wbudowany w Visual Studio, wspominam o nim tylko dlatego, że jest jednym z nielicznych debuggerów dla aplikacji .NET bez dostępu do kodów źródłowych, istnieją również wtyczki dla .NET Reflector-a służące debugowaniu (wtyczka Deblector).

Debugger aplikacji dla .NET - DILE
Rysunek 12. Debugger aplikacji dla .NET - DILE
Strona https://sourceforge.net/projects/dile/
Licencja GNU GPL
Zalety
  • Że w ogóle istnieje
Wady
  • Cała masa
  • Skomplikowany interfejs użytkownika

Hex edytory

Jeśli przeanalizowaliśmy naszą aplikację w deasemblerze, prześledziliśmy jej działanie w debuggerze, może zajść potrzeba ingerencji czy to w kod programu w celu wprowadzenia odpowiednich poprawek lub zmiana jakichś ciągów tekstowych, stałych wartości albo innych informacji zawartych w pliku binarnym aplikacji.

Do tego celu wykorzystywane są hex edytory. Z czasów, kiedy czytałem magazyn o grach Top Secret, hex edytory kojarzyły mi się jedynie z modyfikacją savegame’ów, gdzie czytelnicy co miesiąc posyłali offsety (czyli adresy w pliku) oraz wartości jakie należało zmienić w plikach ze stanem gry, aby np. uzyskać określoną ilość gotówki w grze czy zasobów.

Na rynku dostępnych jest wiele hex edytorów z wieloma różnymi funkcjami i zastosowaniami jak np. wbudowany podgląd struktur danych (czyli taki hex edytor jest w stanie wizualnie pokazać dla przykładu elementy bitmapy albo jakiejś wewnętrznej struktury pliku wykonywalnego). Przykładem takiego specjalistycznego hex edytora jest np. znany WinHex, który znajduje zastosowanie w informatyce śledczej czy pracach związanych z odzyskiwaniem danych (posiada wbudowane wsparcie dla wielu systemów plików), jednak moim zdaniem nie nadaje się do prac typowo związanych z przysłowiowym grzebaniem w binarnych plikach aplikacji, mimo, że posiada odpowiednie funkcje.

HIEW

Mój numer jeden, jeśli chodzi o hex edytory, bez którego nie wyobrażam sobie pracy. Z pozoru wygląda jak stara konsolowa aplikacja, jednak to prawdziwa bestia. HIEW (od Hacker’s View) to hexedytor, deasembler obsługujący architektury procesorów x86, x64, ARM V6, posiada obsługę plików NE, LE, PE/PE32+, ELF/ELF64. Program posiada ogromną bazę użytkowników, rozwijany jest od 1991 roku i regularnie jest aktualizowany.

Dzięki HIEW możemy edytować nie tylko dane pliku binarnego, ale jeśli to aplikacja – także jej kod. Wbudowany deasembler pozwala nawigować po kodzie i jego funkcjach oraz w prosty sposób modyfikować istniejące instrukcje z pomocą wbudowanego assemblera, czyli nie trzeba znać na pamięć kodów hex poszczególnych instrukcji, ale można napisać np. mov eax,edx, a HIEW automatycznie skompiluje taką instrukcję i wstawi ją do pliku binarnego.

HIEW niejednokrotnie potrafi zastąpić narzędzia pokroju IDA, jeśli mamy do wykonania jakąś prostą czynność, jego największą zaletą jest szybkość działania oraz wbudowane opcje analizy kodu i jego bezpośrednia modyfikacja.

Hex edytor i deasembler HIEW
Rysunek 13.Hex edytor i deasembler HIEW
Strona https://www.hiew.ru
Mirror https://www.hiew.io
Licencja Komercyjna od 19 USD oraz wersja demonstracyjna.
Zalety
  • Wbudowany deasembler i assembler dla wielu architektur procesorów
  • Obsługa struktur wielu formatów plików wykonywalnych
  • System wtyczek
Wady
  • Brak zakładek
Alternatywy

Hex Workshop

Okienkowy hex edytor z masą przydatnych opcji, porównywaniem plików, operacjach bitowych na blokach kodu, generowaniem sum kontrolnych, posiada podgląd struktur najpopularniejszych typów plików.

Hex edytor Hex Workshop
Rysunek 14.Hex edytor Hex Workshop
Strona http://www.bpsoft.com
Licencja Komercyjna od 89.95 USD oraz wersja ograniczona czasowo.
Zalety
  • Zaawansowane operacje bitowe na blokach danych
  • Możliwość edycji dysków
  • Wbudowane obliczanie sum kontrolnych i skrótów kryptograficznych
  • Automatyczne wyszukiwanie wszystkich ciągów tekstowych
Wady
  • Bałagan w interfejsie graficznym
  • Wygórowana cena w porównaniu do dostępnych alternatyw
Alternatywy

HxD

Darmowy hex edytor ze wszystkimi podstawowymi funkcjami i opcjami jak edycja, wyszukiwanie, porównywanie plików. Pozwala na równoczesną pracę z wieloma plikami, można także otworzyć z jego poziomu pamięć wybranych procesów oraz uzyskać bezpośredni dostęp do danych dysków.

Hex edytor HxD
Rysunek 15.Hex edytor HxD
Strona https://mh-nexus.de/en/hxd/
Licencja Freeware
Zalety
  • Prosta obsługa
  • Edycja wielu plików na raz
  • Możliwość edycji pamięci procesów i danych dysków
  • Eksport danych do formatu danych plików programistycznych
  • Wbudowane obliczanie sum kontrolnych i skrótów kryptograficznych
Wady
  • Brak zaawansowanych opcji modyfikacji (jak np. operacje XOR na blokach danych)
  • Minimalistyczny interfejs
Alternatywy

Edytory zasobów

Charakterystyką aplikacji dla Windows jest to, że zasoby takie jak ikony, grafiki, formy, lokalizowane teksty i inne informacje, mogą być zapisane w strukturze pliku PE w specjalnym obszarze zwanym zasobami. Dane te są zapisywane na etapie linkowania. Dzięki temu wszystkie pliki aplikacji zapisane są w jednym wyjściowym pliku EXE czy DLL. Jeśli zajdzie potrzeba zmiany tych informacji to o ile ich rozmiar nie ulegnie zmianie, będzie można dokonać modyfikacji korzystając z hex edytora, jednak, jeśli chcemy dodać jakieś nowe dane lub ustawić inne, które fizycznie mają większy rozmiar (np. zmienić tekst na dłuższy, podmienić grafikę) – ze względu na strukturę tych danych należy posłużyć się odpowiednim edytorem zasobów.

Oprócz modyfikacji danych w zasobach aplikacji, edytory zasobów są wykorzystywane po prostu do podglądnięcia, jakie dodatkowe dane zapisane są w pliku aplikacji.

Resource Hacker FX

Jedynym z najpopularniejszych edytorów zasobów był swego czasu Resource Hacker, jednak od dawna przestał być rozwijany, ale jego popularność sprawiła, że powstały dedykowane łatki, które dały mu drugie życie.

Edytor zasobów Resource Hacker FX
Rysunek 15.Edytor zasobów Resource Hacker FX
Strona https://ramensoftware.com/resource-hacker-fx
Licencja Freeware
Zalety
  • Szybkość działania
  • Możliwość manipulacji danych na poziomie języka skryptowego zasobów
Wady
  • Łatki dramatycznie nie zmieniają przestarzałych funkcji
  • Brak podglądu form Delphi
  • Brak kolorowania składni dla elementów XML (jak np. manifesty)
Alternatywy

Resource Tuner

Znakomity edytor zasobów od twórców PE Explorer. Posiada wbudowane unpackery np. dla kompresora UPX czy FSG, edycję zasobów można wykonać korzystając z przyjaznych wizardów. Resource Tuner posiada również wbudowany skaner, dzięki któremu można przeskanować dowolny katalog w poszukiwaniu zasobów określonego typu.

Edytor zasobów Resource Tuner
Rysunek 16.Edytor zasobów Resource Tuner
Strona http://www.heaventools.com/resource-tuner.htm
Licencja Komercyjna od 49.95 USD oraz 30 dniowa testowa wersja.
Zalety
  • Przyjazny interfejs użytkownika
  • Wsparcie w postaci wizardów
  • Wbudowane unpacker
Wady
  • Brak niskopoziomowej edycji struktury zasobów (skryptów)
Alternatywy

Edytory i narzędzia pomocnicze

Reverse engineering wymaga wyspecjalizowanych narzędzi do konkretnych celów, oprócz standardowych narzędzi jak deasemblery, dekompilatory czy debuggery – powstało wiele dedykowanych narzędzi, które pomagają w analizie aplikacji oraz edytorów, kilka z nich znajdziecie poniżej.

PE-Bear

Znakomita przeglądarka i edytor struktur plików wykonywalnych z wbudowanym prostym deasemblerem, porównywarką plików PE na podstawie wartości ze wszystkich struktur (unikalne rozwiązanie nawet na skalę światową), detekcją sygnatur popularnych exe-packerów / exe-protectorów, hex edytor i wizualizacja graficzna struktur sekcji.

Narzędzie stworzone przez polską programistkę (tak – dobrze przeczytałeś) idealnie nadaje się do niskopoziomowej analizy plików PE/PE32+, docelowo przeznaczone do analizy złośliwego oprogramowania.

Edytor PE-Bear
Rysunek 18.Edytor PE-Bear
Strona https://hshrzd.wordpress.com/pe-bear/
Licencja Freeware
Zalety
  • Unikalne funkcje
  • Prosta edycja struktur plików PE/PE32+
  • Detekcja popularnych exe-packerów i exe-protectorów na podstawie sygnatur
  • Wersja dla systemu Windows oraz Linux
Wady
  • Prosty deasembler (zbyt prosty)
  • Brak opcji konfiguracyjnych
Alternatywy

PeStudio

Ciekawe narzędzie, które oprócz tego, że wyświetla podstawowe informacje o pliku wykonywalnym, posiada również zbiór reguł, które potrafią wykryć nieprawidłowe elementy w strukturze pliku wykonywalnego (wszelkiego rodzaju anomalie) oraz elementy, które potencjalnie mogą świadczyć o infekcji pliku. Bardzo przydatne narzędzie dla osób, które, na co dzień pracują z plikami PE.

Analizator plików wykonywalnych PeStudio
Rysunek 19.Analizator plików wykonywalnych PeStudio
Strona https://www.winitor.com
Licencja Darmowa do niekomercyjnego użytku.
Zalety
  • Wykrywanie anomalii w plikach wykonywalnych
  • Wygodna przeglądarka struktur plików PE
Wady
  • Niektóre reguły są zbyt wyśrubowane

PEAnatomist nowość

Przeglądarka wewnętrznych struktur plików PE, obsługująca takie formaty jak PE32, PE32+, COFF oraz różnorakie architektury procesorów, dla których zostały stworzone obrazy PE.

Przeglądarka struktur formatu PE PEAnatomist
Rysunek 31.Przeglądarka struktur formatu PE - PEAnatomist
Strona https://rammerlabs.alidml.ru/peanatomist-eng.html
Licencja Freeware
Zalety
  • Obsługa formatów PE32, PE32+, COFF, MSVC CxxIL, ExtendedObj
  • Obsługa różnych architektur procesorów Intel x86, AMD64, ARM7, ARM7 Thumb, ARM8-64, Intel IA64, Hybrid (CHPE, ARM64X, ARM64EC)
Wady
  • To jedynie przeglądarka bez możliwości edycji

Recaf nowość

Recaf jest open-source'owym edytorem bytecode'u Javy, który upraszcza proces edycji skompilowanych aplikacji Java. Aby ułatwić pracę, Recaf wprowadza liczne abstrakcje wielu wewnętrznych formatów. Skomplikowane zadania, takie jak aktualizacja ramek stosu, są wykonywane automatycznie. Wraz z dodatkowymi funkcjami wspomagającymi proces edycji klas, Recaf jest najbardziej bogatym w funkcje darmowym edytorem kodu bajtowego.

Recaf edytor dla bytecode Java
Rysunek 34.Recaf edytor dla bytecode Java
Strona https://www.coley.software/Recaf/
Źródła https://github.com/Col-E/Recaf
Licencja MIT
Zalety
  • Prosta manipulacja bytecodem Javay z wysokiego poziomu kodu
  • Wewnętrzna obsługa trzech silników dekompilujących dla Javy - CFR, Fernflower, Procyon
Wady
  • Brak instalatora, jedynie surowy plik JAR

dirtyJOE

Zaawansowany edytor dla skompilowany plików Java. Unikalne narzędzie polskiego autora do modyfikacji kodu z wbudowanym deasemblerem oraz assemblerem, edytor pozwala również na modyfikację wszelkich struktur w skompilowanych plikach *.class. dirtyJOE przydaje się w przypadku, gdy chcemy zmodyfikować zabezpieczone pliki (po użyciu obfuscatora dla Java), gdy tradycyjne metody dekompilacji, modyfikacji i rekompilacji zawiodą, dirtyJOE okazuje się niezastąpiony.

Edytor dla plików Java - dirtyJOE
Rysunek 20.Edytor dla plików Java - dirtyJOE
Strona http://dirty-joe.com
Licencja Darmowa do niekomercyjnego użytku.
Zalety
  • Deasembler i assembler instrukcji JVM
  • Dodawanie i edycja pól takich jak np. ciągi tekstowe
  • Wersja 32 i 64 bitowa
  • Wtyczka dla Total Commander
Wady
  • Surowy interfejs
  • Niewygodny edytor kodu

Ekstraktory i rippery

Pliki aplikacji jak i same paczki aplikacji potrafią kryć dodatkowe informacje, jak np. ukryte ikony, obrazki, pliki dźwiękowe, biblioteki etc. Jeśli chcemy szybko sprawdzić co znajduje się wewnątrz aplikacji lub np. w całym katalogu instalacyjnym oprogramowania, musimy posłużyć się odpowiednim ekstraktorem lub ripperem.

Universal Extractor

Oprogramowanie pozwala na ekstrakcję plików z archiwów, samorozpakowujących się archiwów oraz instalatorów. Niezwykle przydatne, jeśli chcemy bez przeprowadzania instalacji dowiedzieć się, co znajduje się w paczce instalatora, gdzie często znajdują się jakieś dodatkowe skrypty instalacyjne czy pomocnicze biblioteki.

Universal Extractor
Rysunek 21.Universal Extractor
Strona https://www.legroom.net/software/uniextract
Licencja Freeware
Zalety
  • Obsługa archiwów (w tym samorozpakowujących)
  • Ekstrakcja plików z popularnych systemów instalacyjnych
Wady
  • Dawno nie było aktualizacji
  • Czasami trzeba skorzystać z alternatywnych rozwiązań dla nowszych wersji systemów instalacyjnych
Alternatywy

MultiExtractor

Ekstraktor wszelkiego rodzaju plików multimedialnych jak pliki graficzne, ikony, pliki dźwiękowe, filmy, modele 3D, animacje Flash, fonty etc. z dowolnych plików binarnych. Wbudowane unpakery dla prezentacji multimedialnych, dynamiczne rozpakowywanie danych z pamięci procesów, prosta przeglądarka czynią z tego oprogramowania ciekawe narzędzie, jeśli chcemy szybko podejrzeć, co skrywa się w plikach aplikacji.

Ekstraktor MultiExtractor
Rysunek 22.Ekstraktor MultiExtractor
Strona https://www.multiextractor.com
Licencja Komercyjna od 19 USD oraz wersja demonstracyjna.
Zalety
  • Ekstrakcja wielu formatów plików graficznych
  • Ekstrakcja z pamięci procesów
  • Rozpoznawanie popularnych formatów kontenerów
Wady
  • Od dłuższego czasu nie było dodanych nowych formatów plików
  • Czasami potrafi się zawiesić, zwłaszcza przy dużej ilości plików
Alternatywy

Wirtualne środowiska

Analiza nieznanego oprogramowania może być ryzykowna, zwłaszcza, jeśli musimy uruchomić oprogramowanie i nawet wykonanie tej czynności pod debuggerem może się dla nas źle skończyć, jeśli oprogramowanie gdzieś po drodze uruchomi w tle wątek, a ten zainstaluje nam jakiegoś rootkita lub inne złośliwe oprogramowanie. Warto zabezpieczyć się przed takimi przypadkami i uruchamiać takie podejrzane oprogramowanie pod nadzorem wirtualnej maszyny.

VMware

Najbardziej znane oprogramowanie tworzące wirtualne środowisko, gdzie możemy zainstalować dowolny system operacyjny i bez zbędnego ryzyka testować oprogramowanie.

Środowisko wirtualne VMware Workstation
Rysunek 23.Środowisko wirtualne VMware Workstation
Strona https://www.vmware.com/products/workstation-pro.html
Licencja Komercyjna od 225 EUR oraz darmowa wersja testowa.
Zalety
  • Kompatybilność z wieloma systemami operacyjnymi
  • Wykorzystanie wirtualizacji sprzętowej do poprawy wydajności
Wady
  • Wymaga sporych zasobów sprzętowych i na wolniejszych maszynach potrafi zawiesić cały system
Alternatywy

Sandboxie porzucony

Oprogramowanie tworzące wirtualną piaskownicę dla uruchamianych aplikacji. Wszelkie operacje wykonywanie w wirtualnej piaskownicy nie mają wpływu na system, gdzie uruchamiane są tak odizolowane aplikacje. Idealne rozwiązanie do debugowania lub szybkiego sprawdzenia poprawności działania aplikacji bez konieczności obawy o skutki uboczne.

Wirtualna piaskownica Sandboxie
Rysunek 24.Wirtualna piaskownica Sandboxie
Strona https://www.sandboxie.com
Licencja Komercyjna od 15 EUR oraz darmowa wersja testowa.
Zalety
  • Doskonała izolacja uruchamianych aplikacji bez konieczności stosowania dedykowanych wirtualnych środowisk
Wady
  • Troszkę przestarzały interfejs użytkownika
Alternatywy

Sandboxie Plus i Classic nowość

Sandboxie to oprogramowanie izolujące oparte na piaskownicy dla 32 i 64-bitowych systemów operacyjnych opartych na Windows NT. Jest rozwijany przez Davida Xanatosa od czasu, gdy stał się open source, wcześniej był rozwijany przez firmę Sophos (która nabyła go od firmy Invincea, która nabyła go wcześniej od oryginalnego autora Ronena Tzura). Tworzy on przypominające piaskownicę izolowane środowisko operacyjne, w którym aplikacje mogą być uruchamiane lub instalowane bez trwałej modyfikacji lokalnego lub zmapowanego dysku. Odizolowane środowisko wirtualne pozwala na kontrolowane testowanie niezaufanych programów i przeglądanie stron internetowych.

Wirtualna piaskownica Sandboxie Plus
Rysunek 32.Wirtualna piaskownica Sandboxie Plus
Strona https://sandboxie-plus.com/
Źródła https://github.com/sandboxie-plus/Sandboxie
Licencja GPL 3.0
Zalety
  • Doskonała izolacja uruchamianych aplikacji bez konieczności stosowania dedykowanych wirtualnych środowisk
  • Zaktualizowany interfejs bazujący na Qt
  • Dodatkowe funkcje względem oryginału
Wady
  • Niby open source GPL 3.0, ale nachalnie wciskają komercyjne klucze aktywacyjne
Alternatywy

To nie koniec, a dopiero początek...

Zaprezentowane narzędzia to jedynie skrawek tego, co można znaleźć na rynku, istnieje wiele innych darmowych czy eksperymentalnych projektów oraz takich, które zostały w pewnym momencie porzucone, ale są warte zainteresowania. Zachęcam Was do odkrywania tajników reverse engineeringu, a jeśli znajdziecie coś interesującego – napiszcie maila.

O Autorze

— autor interesuje się filozofią zachodu, posiada czarny pas w jodze, pomiędzy oglądaniem Futuramy i South Park spędza czas na nie wiadomo czym, poza tym jest zwolennikiem zamkniętego oprogramowania i zagorzałym aktywistą działającym na rzecz diety wysokoglutenowej.