Inżynieria odwrotna kodu w systemach Windows i Linux oraz metody zabezpieczania programów

4950 PLN+23% VAT (6088 PLN brutto / 1 os.)

Czas trwania szkolenia:5 dni (40h)

Kod kursu:RE

Poziom zaawansowania:
reverse-engineering

Dostępne terminy

  • Termin
  • Trener
  • Cena
  • Zapis
  • Lokalizacja

Termin:

29 maja
Trwają zapisy na szkolenie
-

Cena:

4950 PLN netto+23% VAT

Lokalizacja:

Lokalizacja:

ZdalneWarszawaŁódźPoznańKrakówWrocławGdańskKatowiceBydgoszczGdynia

Nie odpowiada Ci żaden z dostępnych terminów?

Zapytaj o szkolenie

O szkoleniu Inżynieria odwrotna kodu w systemach Windows i Linux oraz metody zabezpieczania programów

W cenie otrzymasz:

  • Materiały szkoleniowe
  • Certyfikat ukończenia szkolenia
  • W przypadku szkolenia w trybie stacjonarnym zapewnimy Ci również lunch oraz sprzęt niezbędny do nauki

Dla kogo?

  • Szkolenie Inżynieria odwrotna kodu jest adresowane do programistów, testerów oraz specjalistów z zakresu bezpieczeństwa aplikacji

Wymagania

  • Znajomość podstaw działania komputera na poziomie architektury
  • Umiejętność rozumienia kodu napisanego w językach typu C/C++, Java i .NET
  • Biegłe posługiwanie się wybranym systemem operacyjnym: Windows lub Linux
  • Wskazana jest znajomość jednego z popularnych języków skryptowych a także algorytmów i struktur danych

Zalety

  • Podczas szkolenia Inżynieria odwrotna uczestnicy poznają metody reverse engineeringu oraz zabezpieczania oprogramowania przed inżynierią odwrotną pod opieką doświadczonego trenera
  • Przykłady zostały dobrane tak by mogły się na nim odnaleźć osoby o różnym poziomie doświadczenia
  • Praktyka przed teorią - wszystkie szkolenia technologiczne prowadzone są w formie warsztatowej. Konieczna teoria jest wyjaśniana na przykładzie praktycznych zadań
  • Konkretne umiejętności - w ramach każdego szkolenia rozwijamy praktyczne umiejętności związane z daną technologią i tematyką
  • Nauka z praktykami - wszyscy trenerzy na co dzień pracują w projektach, gwarantuje to dostęp do eksperckiej wiedzy i praktycznego know-how

Cele szkolenia

  • Przedstawienie technik inżynierii odwrotnej (ang. reverse engineering, RE) aplikacji, protokołów i formatów plików na platformach typu desktop (x86, x86-64, Java, .NET)
  • Przećwiczenie poznanych technik w formie warsztatu na praktycznych przykładach używając wiodących w branży narzędzi takich jak IDA Pro, Ghidra, x64dbg, GDB, Radare2 i inne
  • Pozwoli na lepszą ochronę tworzonych aplikacji przed stosowaniem inżynierii odwrotnej przez atakujących jak również na obchodzenie niektórych z zabezpieczeń dzięki zdobytej wiedzy
  • Nauka identyfikowania formatów plików, algorytmów (w tym algorytmy kryptograficzne) oraz monitorowania działania aplikacji
  • Zapewnienie podstawy dla kolejnych szkoleń zakresu bezpieczeństwa dotyczących testowania bezpieczeństwa i wyszukiwania podatności, inżynierii odwrotnej na platformach mobilnych oraz technik informatyki śledczej i analizy powłamaniowej

Program

Wprowadzenie do tematyki reverse engineering

  • Co może podlegać inżynierii wstecznej
  • Czym jest inżynieria odwrotna oprogramowania
  • Legalność inżynierii wstecznej
  • Jakie są etapy procesu reverse engineering?
  • Zastosowania reverse engineering: kompatybilność, wyszukiwanie błędów, analiza złośliwego kodu, łamanie zabezpieczeń, odzyskiwanie kodu źródłowego, modyfikacja i poprawianie oprogramowania (reengineering)

Podstawy asemblera

  • Działanie procesora
  • Instrukcje
  • Proste programy w asemblerze
  • Różnice pomiędzy platformami x86 a x86-64
  • Asemblery NASM i FASM
  • Kompilacja programów w assemblerze
  • Śledzenie programów z użyciem debuggera: x64dbg

Utrudnianie inżynierii odwrotnej - jak się zabezpieczyć?

  • Sztuczki „antydebug”: wykrywanie śledzenia i piaskownicy (sandbox)
  • Wykrywanie maszyn wirtualnych
  • Zaciemnianie znaczenia kodu asemblera (obfuskacja kodu)
  • Optymalizacja kodu kompilowanego
  • Wykrywanie modyfikacji i pułapek
  • Zabezpieczenia warstwowe i emulacja kodu
  • Użycie protektorów i pakerów
  • rekonstrukcja spakowanych plików
  • Zaciemnianie kodu w językach opartych o maszyny wirtualne, stworzenie modułu disassemblera i emulatora dla maszyny wirtualnej

Etapy procesu RE

  • Identyfikacja celu
  • Monitorowanie celu
  • Usunięcie utrudnień
  • Deasemblacja
  • Identyfikacja algorytmów i bloków budujących np. funkcji bibliotecznych
  • Dekompilacja i rekonstrukcja kodu źródłowego
  • Wykorzystanie instrumentacji i profilowania

Identyfikacja celu

  • Detekcja formatów pliku wykonywalnego
  • Detekcja pakerów i protektorów
  • Identyfikacja ciągów znaków, w tym ukrytych ścieżek
  • Narzędzia: PEiD, PEbear

Monitorowanie celu

  • Otwieranie plików i ścieżek rejestru
  • Komunikacja sieciowa
  • Narzędzia: Process Monitor (Regmon+Filemon)

Usuwanie utrudnień w reverse engineering

  • Ręczne i automatyczne usuwanie pakerów i protektorów
  • Manualna rekonstrukcja plików wykonywalnych
  • Narzędzia: Scylla, OllyDumpEx

Debugowanie

  • Techniki debugowania
  • Używanie debuggera
  • Narzędzia: x64dbg

Instrumentacja i profilowanie

  • Wykorzystanie w celu śledzenia pokrycia kodu i przeprowadzania obserwacji typu Side-Channel
  • Narzędzia: PIN Framework

Deasemblacja kodu

  • Co to jest deasemblacja, trudności deasemblacji
  • Proces deasemblacji: IDA Pro i Ghidra
  • Identyfikacja funkcji bibliotecznych
  • Zastosowania skryptów IDC w IDA Pro
  • Skrypty w IDAPython
  • Debugger i emulator IDA Pro

Dekompilacja kodu za pomocą Ghidra

Postępowanie z typowymi celami na platformie Windows

  • Pliki natywne (.exe - PE i PE64)
  • Visual Basic i języki posługujące się bytecode (p-code)
  • Delphi i C++ Builder

Postępowanie z typowymi celami na platformie Linux

  • Pliki natywne - ELF
  • Dedykowane narzędzia Linux: EDB, GDB+GEF, Radare
  • automatyzacja zadań w debuggerach z użyciem skryptów

Postępowanie z programami Java

  • Użycie dekompilatorów Java - JD
  • Zabezpieczanie i utrudnianie reverse engineeringu kodu Java

Postępowanie z programami .NET

  • Użycie dekompilatorów - dnSpyEx
  • Zabezpieczanie i utrudnianie reverse engineeringu kodu .NET

Charakterystyczne cechy języków C i C++

  • Tablice metod wirtualnych
  • Mangling
  • Konstruktory i destruktory
  • Argumenty funkcji i metod
  • Zmienne i zmienne rejestrowe
  • Informacje symboliczne (symbole debugowania)
  • Przykłady dla Visual C++, GCC, Clang, Borland C/C++

Reversing algorytmów

  • Obserwacja symptomów działania
  • Identyfikacja przepływu danych
  • Wyodrębnianie bloków składowych
  • Metody identyfikacji: magiczne ciągi, sygnatury metod bibliotecznych, metody heurystyczne
  • Identyfikacja algorytmów kryptograficznych
  • Identyfikacja algorytmów z pomocą kodu źródłowego
  • Identyfikacja zmienionych części kodu za pomocą porównania plików (patch-diffing)

Reversing protokołów komunikacyjnych

  • Wykorzystanie snifferów

Reversing formatów plików

  • Typowe zagadnienia spotykane w plikach: sygnatury, sumy kontrolne, kompresja
  • Użycie hexedytora, wzorców (Templates) i skryptów
  • Narzędzia: MultiExtractor, 010editor

Przykłady uzycia narzędzi Symbolic Execution (angr, manticore)

Podobne szkolenia