Wstęp do inżynierii wstecznej

Zadania kwalifikacyjne są tutaj.

Opis

Założmy że posiadasz grę komputerową na CD z ery zanim stał się powszechnie popularny internet, przeważnie przy jej uruchomieniu będziesz musiał podać klucz licencyjny z opakowania płyty. Lubisz wracać do pewnego starego tytułu i pech chciał że dzisiaj po wielu latach płyta CD pęka - szukasz więc na internecie zamiennika aby móc zagrać w tą grę. Istnieje niezerowa szansa że wersja pobrana z internetu nie będzie wymagała klucza licencyjnego a tym bardziej będzie posiadała generator poprawnych kluczy licencyjnych. Jak to jest możliwe? Czy nie posiadając kodu źródłowego, oprogramowanie można modyfikować i poznać jak ono dokładnie działa? Skąd program wie że klucz licencyjny jest poprawny? Czy dla każdej starej gry można wykonać keygena? Dlaczego cracki do niektórych nowych tytułów wychodzą po długim czasie po premierze?

Na te i na inne pytania odpowiemy sobie podczas warsztatów. Zgłębimy się w czeluścia inżynierii wstecznej - procesu odwrotnego do standardowego tworzenia oprogramowania komputerowego. Kod źródłowy programu określa dokładnie co dany program komputerowy robi. Po jego kompilacji kod źródłowy jest tracony, ale czy na pewno? Okazuje się że posiadając odpowiednią ilość czasu, umiejętności oraz cierpliwości jesteśmy w stanie odzyskać kod źródłowy programu a nawet wykonywać jego modyfikację. Zrozumienie tego procesu pozwoli nam też na stosowanie odpowiednich technik służących przeciwdziałaniu analizie wykonywanej przez inżynierów wstecznych. Dzięki temu możemy zyskać trochę czasu zanim program zostanie wpełni zrozumiały - przykładowo twórcy wirusów komputerowych starają się jak najbardziej utrudnić ich analizę aby jak najdłużej trwało sporządzenie obrony przeciwko niemu, czy game developerzy którzy chcą aby ich dzieło nad którym długo i ciężko pracowali nie zaczeło być piracone na następny dzień po premierze tytułu.

Skupimy się na analizie programów napisanych pod system operacyjny Linux. W ramach warsztatu poznasz podstawy assemblera Intel x86_64 i x86, napiszesz proste programy w assemblerze, zaczniesz swą przygodę z inżynierią wsteczną poprzez analizę programów o wzrastającym poziomie trudności. Poznasz w jaki sposób języki takie jak C++ implemenują obiektowość oraz nauczysz korzystać się z przydatnych w inżynierii wstecznej narzędzi.

Wymagania

Koniecznie należy posiadać własny komputer, najlepiej z systemem operacyjnym Linux. Znajomość komplilowanych języków programowania może okazać się przydatna podczas warsztatów.