Reverse Engineering
Co je reverse engineering?
Reverse engineering (zpětné inženýrství) je proces analýzy již existujícího programu s cílem porozumět jeho vnitřnímu fungování. V praxi často pracujeme se zkompilovanými binárními soubory bez dostupného zdrojového kódu; pokud je však zdrojový kód k dispozici, lze jej při analýze využít.
V rámci analýzy se snažíme odhalit například:
- funkce programu a jejich chování
- konstanty a statické hodnoty
- strukturu a obsah datových segmentů
- případné ladicí (debug) informace
Kde se reverse engineering používá?
Reverse engineering se uplatňuje především v oblasti kybernetické bezpečnosti, kde slouží k analýze škodlivého kódu (malware) a k identifikaci zranitelností v programech. Dále se využívá v herním průmyslu (modding, analýza herních mechanik) a v softwarovém vývoji, například při porozumění legacy kódu bez dokumentace.
Capture the Flag
Významné zastoupení má reverse engineering v CTF (Capture The Flag) soutěžích, kde tvoří jednu ze základních kategorií. Úlohy typicky spočívají v analýze poskytnuté binárky s cílem získat flag, například obejitím autentizační logiky nebo pochopením mechanismu generování klíče a jeho reprodukcí na vzdálené instanci.
Nástroje
K reverse engineeringu se používá řada specializovaných nástrojů. Základní dělení je následující:
Dekompilátory (a disassemblery)
Tyto nástroje slouží ke statické analýze binárního kódu. Disassembler převádí strojový kód na instrukce v assembly, zatímco dekompilátor se snaží rekonstruovat kód na vyšší úrovni abstrakce (typicky pseudokód podobný jazyku C).
Zde je seznam často využívaných nástrojů:
- Ghidra
- Binary Ninja
- IDA
Debugger
Debugger umožňuje dynamickou analýzu programu – připojí se k běžícímu procesu a umožňuje řídit jeho vykonávání (execution), například krokovat instrukce, nastavovat breakpointy a inspektovat paměť a registry.
Známé debuggery:
- GDB (GNU Debugger)
- GEF (GDB Enhanced Features)
- pwndbg