Čtení: 40 minHodnotí se: Crackme, zkouška

4 Disassembling a obfuskace

Po přečtení umíš
  • porovnat lineární a rekurzivní disassembling
  • definovat obfuskaci a její metriky
  • vysvětlit neprůhledné predikáty a zploštění toku
  • zdůvodnit, proč je odstranění obfuskace legitimní

4.1 Ukázka: skok, který nikdy nenastane

xor  eax, eax
jz   dal         ; vždy skočí
db   0E8h        ; bajt navíc
dal:
...

Lineární disassembler vezme E8 jako začátek call a rozsype další instrukce. Program přitom běží správně. Podmínka je vždy pravdivá a bajt je tam jen pro zmatení.

4.2 Disassembling

4.3 Obfuskace

Definice 4.2 (Obfuskace)

Změna programu tak, aby mu bylo obtížné rozumět, a přitom zůstala zachovaná funkce.

Metriky: potence (jak moc ztíží čtení člověku), odolnost (proti deobfuskátoru), cena (režie) a utajení.

Definice 4.3 (Neprůhledný predikát)

Hodnota je známá obfuskátoru při vytváření, ale pro analýzu je těžké ji určit.

Technika Princip
neprůhledné predikáty falešné větve
mrtvý kód instrukce bez vlivu
nereducibilní CFG skoky do smyček, ruší dekompilaci
tabulková interpretace smyčka se switchem, vlastní bytecode
inlining, outlining mění hranice funkcí
redundantní argumenty maskují rozhraní
Varování 4.4 (Legitimita úpravy)

U Crackme musíš vysvětlit, proč odstranění obfuskace nezmění chování. Třeba že skok je vždy proveden, takže přemostění na nop je ekvivalentní.

4.4 Kvíz

Kvíz

1. Co rozhodí lineární průchod?
2. Které metriky hodnotí obfuskaci? Může být správně více možností, ale také žádná.
3. Jak funguje tabulková interpretace a proč je odolná?
Ukázat řešeníKód se rozdělí na kusy spouštěné ve smyčce přes přepínač. Tok je skrytý v datech, proto je drahá na provedení i analýzu.

4.5 Tahák

Tahák
  • Lineární: data rozhodí. Rekurzivní: nepřímé skoky a predikáty.
  • Obfuskace = stejná funkce, horší čitelnost.
  • Potence, odolnost, cena.
  • U Crackme vysvětli, proč je odstranění legitimní.

Zdroje

  • rev04cz: lineární průchod strany 5–8, rekurzivní 9–12, rozšířený 13–16, obfuskace 19–24, neprůhledné predikáty 28–37, transformace výpočtu 38–66, agregace 67–73
  • NI-REV cvičení 8 a 9