Dekompilator

https://chacker.pl/

Funkcja Decompile zapewnia reprezentację zdezasemblowanego kodu w języku C, jak pokazano poniżej:

Chociaż skompilowanego kodu binarnego nie można przywrócić do źródła, dekompilator zapewnia dobrą rekonstrukcję logiki wyrażonej przez kod programu. Ta funkcja jest bardzo przydatna zarówno dla początkujących, jak i doświadczonych inżynierów wstecznych, ponieważ zmniejsza złożoność i poprawia czytelność programu.

Szukaj

https://chacker.pl/

Ghidra zapewnia funkcję wyszukiwania, która umożliwia wyszukiwanie określonych wzorców binarnych, tekstu w kodzie programu, symboli, nazw funkcji, komentarzy i innych. Oferuje także inteligentne wyszukiwanie określonych wzorców instrukcji, skalarów i ciągów znaków (niezależnie od ich kodowania)

Przeglądarka kodów

https://chacker.pl/

Przeglądarka kodów zapewnia intuicyjny interfejs użytkownika do podstawowych funkcjonalności i nawigacji Ghidry. Większość czasu spędzonego na pracy z Ghidrą spędzisz w tym widoku, ponieważ zawiera on menu i paski narzędzi do najpopularniejszych zadań. Domyślny układ pokazano na rysunku  i opisano w dalszej części.

(1) Menu główne W tym menu dostępne są wszystkie główne opcje.

(2) Pasek narzędzi Tutaj znajdziesz grupę ikon przycisków, których możesz używać jako skrótów do typowych funkcji.

(3) Drzewa programów Zawiera listę drzewiastą wszystkich segmentów pamięci zdefiniowanych przez plik binarny i będzie się różnić w zależności od formatu binarnego i programu ładującego.

(4) Drzewo symboli Tutaj możesz szybko poruszać się po wszystkich symbolach zdefiniowanych w informacjach debugowania lub rozwiązanych przez wstępną analizę. Symbole te są oddzielone typem: import, eksport, funkcje, etykiety, klasy i przestrzenie nazw

(5) Menedżer typów danych Wbudowane, ogólne, dostarczane binarnie i zdefiniowane przez użytkownika typy danych będą dostępne tutaj. Możesz łatwo przechodzić do operacji na wartościach i referencjach według ich typu danych.

(6) Listing Tutaj wymieniono dezasemblację kodu programu i odniesienia do danych. Możesz łatwo eksplorować logikę programu, odniesienia i przesunięcia adresów. Wyświetlane są tutaj również specjalne komentarze i nazwane wartości wygenerowane przez moduł ładujący i analizator Ghidra.

(7) Dekompiluj To okno wyświetla reprezentację funkcji wybranej w oknie Listing w języku C. Ta dekompilacja ułatwia proces analizowania dużych i złożonych bloków kodu asemblera.

(8) Konsola – Skrypty Tutaj pokazane są wyniki i dane wyjściowe skryptów i wtyczek.

Jeśli przejdziesz do Drzew programów i klikniesz dwukrotnie segment pamięci .text, okno Listing przejdzie na początek kodu wykonywalnego programu i wyświetli kod deasemblujący wzbogacony o zmianę nazwy i komentarze powstałe w wyniku poprzedniej analizy. Zawiera także intuicyjne informacje umożliwiające eksplorację i zrozumienie kodu, takie jak adresowanie, kod bajtowy instrukcji, operandy danych z komentarzami, etykiety, informacje o przepływie rozgałęzień warunkowych i odniesienia.

W drzewie symboli przejdź do pola Filtruj tekst i wpisz LoadStudents, aby wyszukać tę funkcję. Kliknij, aby wyświetlić funkcję w oknie Lista:

Okno Listing posiada wzbogacony widok zdezasemblowanego kodu programu:

(1) Pasek narzędzi Listing zapewnia szybki dostęp do funkcji kopiowania i wklejania, podglądu podpowiedzi, edytora pól list, widoku różnic dla porównań programów, migawek i przełączania wyświetlania marginesów. Możesz kliknąć przycisk Edytuj pola aukcji na pasku narzędzi, aby dostosować domyślny układ aukcji.

(2) Komentarze ułatwiają śledzenie Twojej pracy. Czasami są one dostarczane w wyniku analizy wartości i argumentów różnych symboli, ale możesz dodać własne, naciskając ; (średnik) lub klikając prawym przyciskiem myszy wybrany adres i przechodząc do wyskakującego menu Komentarze.

(3) Strzałki przepływu pokazują miejsce docelowe skoków warunkowych i bezwarunkowych.

(4) Linki odsyłające dostarczają informacji o tym, gdzie w programie wartości są odczytywane i zapisywane oraz gdzie wywoływane są funkcje lub do których odwołują się. Dwukrotne kliknięcie tych linków przeniesie widok Listy na wskazany adres. Odniesienia można także znaleźć pod dowolnym adresem lub symbolem, naciskając klawisze CTRL-SHIFT-F.

(5) Adres pamięci pokazuje bezwzględne odniesienie numeryczne do dowolnego kodu lub wartości przeglądanej w oknie Lista. Możesz przejść do dowolnego adresu w otwartym pliku, naciskając G.

(6) Bajty kodu to binarna reprezentacja bieżącej instrukcji zakodowana w formacie szesnastkowym.

(7) Kod demontażu to miejsce, w którym znajdują się zdezasemblowane i przeanalizowane instrukcje wraz z ich mnemonikami i argumentami. Możesz poprawiać i zmieniać te instrukcje, naciskając CTRL-SHIFT-G.

(8) Paski boczne Legenda Entropii i Legenda przeglądu pomagają szybko przeglądać i poruszać się po różnych częściach programu poprzez kodowanie kolorami w skali szarości binarnej wariancji i kodowanie entropii oraz poprzez udostępnianie bloków oznaczonych jako Funkcja, Niezainicjowane, Odniesienie zewnętrzne, Instrukcja, Dane i Niezdefiniowane . Odniesienia oznaczone kolorami można wyświetlić, klikając prawym przyciskiem myszy pasek boczny i wybierając opcję Pokaż legendę.

Przegląd funkcjonalności

https://chacker.pl/

Chociaż Ghidra oferuje wiele funkcji i funkcjonalności, dla uproszczenia skupimy się tylko na najbardziej podstawowych i korzystnych funkcjach.

Okno projektu

Okno projektu jest głównym oknem dostępnym po załadowaniu Ghidry; zapewnia funkcje zarządzania projektami, pliki docelowe aktywnego projektu, skrzynki narzędziowe i ogólną definicję obszaru roboczego. Stwórzmy nasz projekt i rozpocznijmy pracę z wcześniej skompilowanymi plikami docelowymi. Uruchom Ghidrę, jeśli jeszcze tego nie zrobiłeś, a następnie wykonaj następujące kroki:

  1. Utwórz nowy projekt klikając Plik | Nowy lub naciskając CTRL-N. Ustawimy ten projekt jako prywatny (czyli projekt niewspółdzielony), a także ustalimy nazwę projektu i folder, w którym będzie się on znajdować.
  2. Dołącz ucznia i pliki binarne z poprawkami do projektu, klikając Plik | Importuj lub naciskając I dla każdego z nich. Spowoduje to wykrycie formatu i języka pliku binarnego (w tym przypadku ELF skompilowany z x86:LE:64:default:gcc), jak pokazano poniżej.

  1. Kliknij przycisk OK. Zostanie wyświetlone podsumowanie wyników importu z metadanymi pliku i właściwościami nagłówka.
  2. Kliknij dwukrotnie plik docelowy uczniów, aby uruchomić przeglądarkę kodów i rozpocząć analizę.

Analiza

Gdy tylko Ghidra załaduje program, sugeruje analizę programu, jeśli nie zostało to już wcześniej zrobione:

Analizator wykonuje wiele zadań, ale najważniejsze z nich zostały pokazane tutaj i opisane poniżej:

  • Analizator funkcji Przypisuje adresy i nazwy funkcjom na podstawie ich symboli lub poprzez wykrywanie prologów i epilogów funkcji podczas deasemblacji kodu.
  • Analizator stosu Wnioskuje o rozmiarach zmiennych stosu i odniesieniach w oparciu o operacje na podstawie stosu i wskaźniku na początku funkcji.
  • Analizator argumentów Przypisuje i rozwiązuje odniesienia do adresów i symboli w oparciu o operandy skalarne.
  • Analizator odwołań do danych Rozpoznaje adresy i odniesienia do wartości danych i oczywistych typów danych w oparciu o lokalizację sekcji pamięci i argumenty w kodzie.

Analiza | Podmenu One-Shot umożliwia uruchomienie wielu lub wszystkich różnych zadań analitycznych na wybranym bloku kodu.

Ustawianie obszaru roboczego projektu

https://chacker.pl/

Pierwszą rzeczą, którą zobaczysz po uruchomieniu Ghidry, jest okno projektu i wyskakujące okienko „Wskazówka dnia” (które zalecamy sprawdzać od czasu do czasu). Możesz zamknąć to wyskakujące okienko, aby wyświetlić okno projektu. W oknie projektu możesz zarządzać swoimi projektami, obszarem roboczym i narzędziami. Domyślnie Ghidra jest dostarczana z przeglądarką kodu i narzędziami do śledzenia wersji. Pod koniec przeprowadzimy Cię przez proces instalacji narzędzia Debugger.

Instalacja i Szybki Start

https://chacker.pl/

Zacznijmy od zainstalowania zależności wykonawczej Java 11 dla Ghidry w domyślnym systemie Kali:

Następnie pobierz pakiet wersji v9.2.3 Ghidry z oficjalnej strony internetowej Ghidra (https://ghidra-sre.org) i rozpakuj go do swojego katalogu domowego:

Następnie pobierz pakiet wersji v9.2.3 Ghidry z oficjalnej strony internetowej Ghidra (https://ghidra-sre.org) i rozpakuj go do swojego katalogu domowego:

Powinno to uruchomić Ghidrę po raz pierwszy i wyświetlić umowę użytkownika końcowego.

Tworzenie naszego pierwszego projektu

https://chacker.pl/

Skompilujemy przykładowy program odpowiedni do zaprezentowania cech i funkcjonalności Ghidry. Ten przykładowy program to narzędzie do zarządzania ocenami uczniów, które ładuje plik CSV i zawiera lukę w zabezpieczeniach naszych zadań związanych z analizą praktyczną. Udostępniane są pliki studenci.c, studenci-patched.c i studenci.csv w folderze ~/GHHv6/ch04, pod warunkiem, że wcześniej sklonowałeś repozytorium Git Gray Hat Hacking 6th Edition. Uruchom następujące polecenia w oknie terminala, aby skompilować dwie wersje programu (domyślną wersję zawierającą lukę i wersję poprawioną):

Teraz, gdy mamy gotowe programy docelowe, możemy stworzyć projekt do pracy z nimi i zapoznać się z funkcjami i funkcjonalnością Ghidry.

Wprowadzenie do Ghidry

https://chacker.pl/

Ghidra to zestaw narzędzi do inżynierii wstecznej oprogramowania (SRE) opracowany i utrzymywany przez Dyrekcję ds. Badań Agencji Bezpieczeństwa Narodowego w celu wsparcia jej misji w zakresie cyberbezpieczeństwa. Ghidra została udostępniona publicznie i otwarta w okresie od marca do kwietnia 2019 r., ale została przetestowana w walce prywatnie przez agencję. Można go używać do analizy złośliwego oprogramowania, badania podatności, opracowywania exploitów, a także wielu innych zadań związanych z inżynierią wsteczną systemów wbudowanych i oprogramowania sprzętowego. Ghidra obsługuje różne architektury, platformy i formaty binarne, zapewniając bardzo interesujący zestaw funkcji. Ponadto jego społeczność szybko rośnie, ponieważ Ghidra zapewniła doskonałą, bezpłatną i otwartą alternatywę dla innych świetnych narzędzi, takich jak IDA Pro.

heapme_demo.c

https://chacker.pl/

Na początek utwórz i skompiluj następujący program:

Następnie wykonaj następujące kroki (które zawierają odniesienia do kodu

poniżej), aby zobaczyć HeapME w akcji:

  1. Użyj gdb do debugowania programu heapme_demo (1).
  2. Wykonaj polecenie gdb start (2).
  3. Uruchom wtyczkę pomocniczą do analizy sterty Gef (3).
  4. Przejdź do strony internetowej HeapME (https://heapme.f2tc.com/).
  5. Zarejestruj się i zaloguj.
  6. Utwórz i skopiuj nowy adres URL i klucz HeapME.
  7. Po skopiowaniu kliknij przycisk Dalej.
  8. Wróć do gdb i wklej linię heapme init

https://heapme.f2tc.com/ <id> <klucz> (4) .

  1. Będziemy używać heapme watch malloc (5) i heapme watch free (6), aby zaktualizować informacje o wszystkich fragmentach sterty i wolnych pojemnikach, ilekroć te

trafione zostaną punkty przerwania.

  1. Wykonaj c lub kontynuuj (7) . Powinieneś zobaczyć adres URL HeapME

aktualizowane w czasie rzeczywistym. Jest to także dobra okazja, aby pobawić się poleceniami sterty Gef (pojemniki sterty, fragmenty sterty itd.).

Przedstawiliśmy listę przydatnych narzędzi, które znacząco usprawnią proces analizy dynamicznej. Omówiliśmy także sposoby rozszerzenia i automatyzacji procesu debugowania za pomocą gdb. Przyjrzeliśmy się podatnemu na ataki kodowi sprawdzającemu koncepcję z exploitem napisanym w Pythonie przy użyciu środowiska programistycznego pwntools. Na koniec zbadaliśmy narzędzie do analizy i współpracy sterty HeapME (Heap Made Easy).