Szkolenie: Inżynieria odwrotna kodu w systemach Windows i Linux oraz metody zabezpieczania programów
Szkolenie reverse engineering kodu w Windows i Linux uczy analizy, zabezpieczania i ochrony aplikacji przed inżynierią odwrotną, obejmuje praktyczne warsztaty z użyciem narzędzi takich jak IDA Pro, Ghidra, x64dbg, GDB, Radare2 oraz metody obfuskacji, detekcji i rekonstrukcji kodu
Inżynieria odwrotna kodu w systemach Windows i Linux oraz metody zabezpieczania programów
Cele szkolenia
Szkolenie przygotowuje do samodzielnego analizowania i rozpoznawania technik inżynierii odwrotnej stosowanych w aplikacjach desktopowych na platformach Windows i Linux
Szkolenie uczy stosowania narzędzi do deasemblacji, debugowania, dekompilacji oraz monitorowania działania programów w celu identyfikacji algorytmów i formatów plików
Szkolenie rozwija umiejętność zabezpieczania własnych aplikacji przed reverse engineeringiem poprzez wdrażanie technik obfuskacji, antydebugowania i wykrywania modyfikacji
Szkolenie pokazuje, jak analizować i rekonstruować kod źródłowy oraz identyfikować podatności i mechanizmy zabezpieczeń w oprogramowaniu
Szkolenie omawia etapy procesu reverse engineeringu, od identyfikacji celu po rekonstrukcję kodu, przygotowując do dalszych szkoleń z zakresu bezpieczeństwa IT
Dla kogo?
Szkolenie adresowane jest do programistów, testerów oraz specjalistów ds. bezpieczeństwa aplikacji z doświadczeniem w pracy z systemami Windows lub Linux
Przeznaczone dla osób posiadających podstawową znajomość języków C/C++, Java lub .NET oraz rozumiejących architekturę komputerów
Efekty kształcenia
Uczestnik analizuje kod maszynowy i pliki wykonywalne na różnych platformach
Uczestnik stosuje narzędzia do deasemblacji, debugowania i dekompilacji
Uczestnik identyfikuje i omija zabezpieczenia programów
Uczestnik wdraża techniki obfuskacji i antydebugowania
Uczestnik rozpoznaje algorytmy i formaty plików
Uczestnik monitoruje i rekonstruuje działanie 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
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
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)
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
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
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
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
Otwieranie plików i ścieżek rejestru
Komunikacja sieciowa
Narzędzia: Process Monitor (Regmon+Filemon)
Ręczne i automatyczne usuwanie pakerów i protektorów
Manualna rekonstrukcja plików wykonywalnych
Narzędzia: Scylla, OllyDumpEx
Techniki debugowania
Używanie debuggera
Narzędzia: x64dbg
Wykorzystanie w celu śledzenia pokrycia kodu i przeprowadzania obserwacji typu Side-Channel
Narzędzia: PIN Framework
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
Pliki natywne (.exe - PE i PE64)
Visual Basic i języki posługujące się bytecode (p-code)
Delphi i C++ Builder
Pliki natywne - ELF
Dedykowane narzędzia Linux: EDB, GDB+GEF, Radare
automatyzacja zadań w debuggerach z użyciem skryptów
Użycie dekompilatorów Java - JD
Zabezpieczanie i utrudnianie reverse engineeringu kodu Java
Użycie dekompilatorów - dnSpyEx
Zabezpieczanie i utrudnianie reverse engineeringu kodu .NET
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++
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)
Wykorzystanie snifferów
Typowe zagadnienia spotykane w plikach: sygnatury, sumy kontrolne, kompresja
Użycie hexedytora, wzorców (Templates) i skryptów
Narzędzia: MultiExtractor, 010editor
Autorem szkolenia jest Sebastian Chmielewski
Ekspert QA z ponad 12-letnim doświadczeniem, specjalizujący się w zapewnianiu bezpieczeństwa produktów oraz szeroko pojętym zapewnieniu jakości oprogramowania. Moje kompetencje obejmują automatyzację testów funkcjonalnych i wydajnościowych, testy penetracyjne, a także przeglądy kodu, co pozwala na identyfikację i eliminację potencjalnych zagrożeń już na najwcześniejszych etapach cyklu życia aplikacji.
W trakcie mojej kariery osiągnąłem znaczące sukcesy w dziedzinie bug bounty – zgłosiłem 48 podatności…
Szkolenie poprowadzi jego autor Sebastian Chmielewski
Ekspert QA z ponad 12-letnim doświadczeniem, specjalizujący się w zapewnianiu bezpieczeństwa produktów oraz szeroko pojętym zapewnieniu jakości oprogramowania. Moje kompetencje obejmują automatyzację testów funkcjonalnych i wydajnościowych, testy penetracyjne, a także przeglądy kodu, co pozwala na identyfikację i eliminację potencjalnych zagrożeń już na najwcześniejszych etapach cyklu życia aplikacji.
W trakcie mojej kariery osiągnąłem znaczące sukcesy w dziedzinie bug bounty – zgłosiłem 48 podatności…
Wybrane opinie
Przeczytaj pozytywne opinie pochodzące z ankiet satysfakcji z naszych szkoleń wypełnianych wyłącznie przez ich uczestników po realizacji usługi