Spis treści
O autorce
Podziękowania
Wprowadzenie
Część I. Asembler procesora Arm
Rozdział 1. Wprowadzenie do inżynierii wstecznej
Wprowadzenie do asemblera
Bity i bajty
Kodowanie znaków
Kod maszynowy i asembler
Asemblacja
Języki wysokiego poziomu
Dezasemblacja
Dekompilacja
Rozdział 2. Właściwości formatu plików ELF
Struktura programu
Języki wysokiego poziomu a języki niskiego poziomu
Proces kompilacji
Kompilacja pod kątem różnych architektur
Asemblacja i linkowanie
Struktura pliku ELF
Nagłówek pliku ELF
Pola informacyjne nagłówka pliku ELF
Pola platformy docelowej
Pole punktu wejściowego
Pola lokalizacji tabel
Nagłówki programu ELF
Nagłówek programu PHDR
Nagłówek programu INTERP
Nagłówki programu LOAD
Nagłówek programu DYNAMIC
Nagłówek programu NOTE
Nagłówek programu TLS
Nagłówek programu GNU_EH_FRAME
Nagłówek programu GNU_STACK
Nagłówek programu GNU_RELRO
Nagłówki sekcji pliku ELF
Metasekcje pliku ELF
Główne sekcje pliku ELF
Symbole
Sekcja dynamiczna i ładowanie dynamiczne
Ładowanie zależności (NEEDED)
Relokacje programu
Sekcje inicjalizacji i terminacji programu
Pamięć lokalna wątków
Model dostępu local-exec
Model dostępu TLS initial-exec
Model dostępu TLS general-dynamic
Model dostępu TLS local-dynamic
Rozdział 3. Podstawy systemu operacyjnego
Ogólna architektura systemu operacyjnego
Tryb użytkownika a tryb jądra
Procesy
Wywołania systemowe
Wątki
Zarządzanie pamięcią procesu
Strony pamięci
Zabezpieczenia pamięci
Pamięć anonimowa i mapowana
Randomizacja układu przestrzeni adresowej
Implementacje stosu
Pamięć współdzielona
Rozdział 4. Architektura Arm
Architektury i profile
Architektura Armv8-A
Poziomy wyjątków
Stany wykonywania Armv8-A
Stan wykonywania AArch64
Zestaw rozkazów A64
Rejestry AArch64
PSTATE
Stan wykonywania AArch32
Zestawy rozkazów A32 i T32
Rejestry AArch32
Rejestr bieżącego stanu programu
Rejestry stanu wykonywania
Rozdział 5. Rozkazy przetwarzania danych
Operacje przesunięcia i obrotu
Przesunięcie logiczne w lewo
Przesunięcie logiczne w prawo
Przesunięcie arytmetyczne w prawo
Obrót w prawo
Obrót w prawo z przeniesieniem
Formy rozkazów
Operacje manipulacji bitami
Operacje logiczne
Binarna operacja AND
Binarna operacja OR
Binarna operacja OR wykluczającego
Operacje arytmetyczne
Dodawanie i odejmowanie
Porównywanie
Operacje mnożenia
Operacje mnożenia w zestawie A64
Operacje mnożenia w zestawach A32/T32
Operacje dzielenia
Operacje przeniesienia
Przeniesienie stałej wartości bezpośredniej
Przeniesienie rejestru
Przeniesienie z negacją
Rozdział 6. Rozkazy dostępu do pamięci
Podstawowe informacje
Tryby adresowania i formy offsetu
Adresowanie z offsetem
Tryb preindeksowany
Adresowanie postindeksowane
Adresowanie literałowe (względem PC)
Rozkazy ładowania i zapisu
Ładowanie i zapis słów i podwójnych słów
Ładowanie i zapis półsłów lub bajtów
Ładowanie i zapis wielu wartości (A32)
Ładowanie i zapis par (A64)
Rozdział 7. Wykonywanie warunkowe
Wykonywanie warunkowe – informacje ogólne
Kody warunkowe
Flagi warunkowe NZCV
Kody warunkowe
Rozkazy warunkowe
Rozkaz IT w Thumb
Rozkazy ustawiające flagi
Przyrostek rozkazu S
Rozkazy testowania i porównywania
Rozkazy wyboru warunkowego
Rozkazy porównywania warunkowego
Operacje warunkowe z logicznym AND i rozkazem CCMP
Operacje warunkowe z logicznym OR i rozkazem CCMP
Rozdział 8. Kontrola przepływu sterowania
Rozkazy rozgałęziające
Rozgałęzienia warunkowe i pętle
Rozgałęzienia z testem i porównaniem
Rozgałęzienia tabelowe
Rozgałęzienie i zamiana
Rozgałęzienia do podprocedur
Funkcje i podprocedury
Standard wywoływania procedur
Rejestry ulotne i nieulotne
Argumenty i wartości zwrotne
Przekazywanie większych wartości
Funkcje liście i funkcje niebędące liśćmi
Część II. Inżynieria wsteczna
Rozdział 9. Środowiska Arm
Płytki Arm
Emulator QEMU
Emulacja w trybie użytkownika QEMU
Pełna emulacja systemu w QEMU
Rozdział 10. Analiza statyczna
Narzędzia do analizy statycznej
Narzędzia wiersza poleceń
Dezasemblery i dekompilatory
Binary Ninja Cloud
Przykład analizy wywołania przez referencję
Analiza przepływu sterowania
Funkcja main
Podprocedura
Konwersja na char
Instrukcja if
Dzielenie współczynnika
Pętla for
Analiza algorytmu
Rozdział 11. Analiza dynamiczna
Debugowanie w wierszu poleceń
Polecenia GDB
Konfiguracja GDB
Rozszerzenie GEF debugera GDB
Radare2
Debugowanie zdalne
Radare2
IDA Pro
Debugowanie błędu pamięci
Debugowanie procesu w GDB
Rozdział 12. Inżynieria wsteczna programów arm64 w systemie macOS
Podstawowe informacje
Pliki binarne arm64 dla systemu macOS
Program powitalny dla systemu macOS (arm64)
Polowanie na złośliwe pliki binarne arm64
Analiza złośliwego oprogramowania arm64
Techniki utrudniające analizę
Logika utrudniająca debugowanie (przez ptrace)
Logika utrudniająca debugowanie (przez sysctl)
Zabezpieczenie przed maszynami wirtualnymi (stan SIP i wykrywanie artefaktów maszyny wirtualnej)
Podsumowanie
Skorowidz
Opinie
Na razie nie ma opinii o produkcie.