Čtení: 60 minHodnotí se: zkouška (prezenční i distanční)

6 Otázky ke zkoušce

Po přečtení umíš
  • odpovědět nahlas bez přípravy na okruhy distanční zkoušky
  • napsat stručnou odpověď na otevřenou otázku

Distanční zkouška má dva okruhy, nejvýš 20 minut a bez času na přípravu. Stačí zodpovědět aspoň polovinu dohromady. Prezenční má šest otevřených otázek za 75 minut a žádné pomůcky.

Na každou otázku odpověz nahlas, až pak si ji rozklikni a ohodnoť se.

Kvíz

1. Jaký je rozdíl mezi __cdecl a __stdcall a jak je poznáš v kódu?
Ukázat řešeníObě předávají parametry na zásobníku zprava. U cdecl uklízí volající, po volání je add esp, n. U stdcall uklízí volaný přes ret n.

2. Popiš prolog, epilog a rámec zásobníku.
Ukázat řešeníProlog uloží EBP, nastaví nový rámec a odečte místo. Parametry jsou na kladných offsetech od EBP, lokální proměnné na záporných. Epilog to vrátí a RET vezme adresu.

3. Jak funguje SEH v 32bitovém kódu?
Ukázat řešeníNa zásobníku je spojový seznam registrací, hlava ve FS:[0]. Při výjimce OS prochází handlery. MSVC přidává scopetable a trylevel pro try bloky.

4. Jak překladač přeloží switch a jak ho poznáš?
Ukázat řešeníHustý switch je tabulka skoků s kontrolou rozsahu před jmp [reg*4+tabulka]. Řídký bývá řada porovnání nebo binární strom.

5. Co se děje od vstupního bodu programu po main?
Ukázat řešeníEP ukazuje na CRT start: bezpečnostní cookie, inicializace haldy a argumentů, statické konstruktory přes initterm, volání main a exit.

6. Vysvětli strukturu importů a co je IAT.
Ukázat řešeníImportní adresář má deskriptor pro každou DLL. OriginalFirstThunk drží jména, FirstThunk po načtení adresy. Volání jde nepřímo přes IAT.

7. Jak odchytíš volání API přepisem IAT?
Ukázat řešeníNajdeš položku funkce, přes VirtualProtect odemkneš stránku, zapíšeš vlastní adresu a původní si uložíš pro volání dál.

8. Jak vypadá objekt s virtuálními metodami a virtuální volání?
Ukázat řešeníPrvní je pVMT. Volání načte this, z něj VMT a volá přes offset. Konstruktor přiřazuje VMT do [this].

9. Jak RTTI pomůže rekonstruovat hierarchii tříd?
Ukázat řešeníNa vfptr[-1] je CompleteObjectLocator, odkazuje na popis typu se jménem a na popis hierarchie s předky.

10. Porovnej lineární a rekurzivní průchod disassembleru.
Ukázat řešeníLineární čte po bajtech a data ho rozhodí. Rekurzivní sleduje tok, ale neprůhledné predikáty a nepřímé skoky mu kód schovají.

11. Co je neprůhledný predikát? Uveď příklad.
Ukázat řešeníVýraz s hodnotou známou tvůrci, ale těžko zjistitelnou analýzou. Třeba x * (x + 1) je vždy sudé, takže větev je jen zdánlivá.

12. Co jsou metriky obfuskace?
Ukázat řešeníPotence pro člověka, odolnost proti deobfuskátoru a cena za běhu.

13. Jak funguje softwarový a hardwarový breakpoint?
Ukázat řešeníSoftwarový přepíše bajt na INT3 a debugger pak vrátí instrukci a EIP. Hardwarový používá DR0 až DR3 a nemění kód, je jich jen čtyři.

14. Vyjmenuj tři anti-debugging techniky a jejich obranu.
Ukázat řešeníBeingDebugged v PEB: vynulovat. NTGlobalFlag: připojit se později. Časování: nekrokovat nebo upravit čas. Výjimky: předat programu.

15. Popiš ruční rozbalení programu.
Ukázat řešeníV debuggeru najdi OEP, zastav se, udělej dump, oprav sekce a importy, například Scyllou, a ověř běh.

16. Popiš injekci DLL.
Ukázat řešeníOpenProcess, VirtualAllocEx na cestu, WriteProcessMemory, CreateRemoteThread se startem v LoadLibrary. DllMain běží v cíli.

6.1 Tahák

Tahák
  • Mluv v bodech: pojem, jak to vypadá v kódu, příklad.
  • Distanční je binární, stačí polovina dohromady.
  • Prezenční je bez pomůcek, na otázku 12 minut.

Zdroje

  • NI-REV, Hodnocení: forma zkoušky
  • rev01cz až rev06cz. Otázky jsou vlastní, vzorová písemka v materiálech zatím chybí.