Inżynieria odwrotna kodu w systemach Windows i Linux oraz metody zabezpieczania programów
Szkolenie "Inżynieria odwrotna kodu w systemach Windows i Linux oraz metody zabezpieczania programów" wprowadzi Cię w zagadanienia inżynierii odwrotnej. Sprawdź program.
3950 PLN+23% VAT (4858 PLN brutto / 1 os.)Czas trwania szkolenia:5 dni (40h)
Kod kursu:RE
Inżynieria odwrotna kodu w systemach Windows i Linux oraz metody zabezpieczania programów
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
Dla kogo?
Szkolenie Inżynieria odwrotna kodu jest adresowane do programistów, testerów oraz specjalistów z zakresu bezpieczeństwa aplikacji
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
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
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
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