takže pánové je čas na další přednášku a já se zeptám víte jak získat trávu

hamburgeru

to nám přišel vysvětlit petr zemek který tady studuje na sítku nad prvkem studiu zároveň

proces a tak je technolo číst a tady na fickou je členem skupiny která dohromady

a belgickém pracují na

generickém by kompilátoru

já si to co dělá tu krávu sto hamburgrů že jo

no a jejich cíli my vytvořit generické řeším pro ty kompilace binárního kódu pro rozličné

platformy já to chápu tak že chtějí něco aby mohli s původní krávy získat jaký

ne

původní krát získat jakýkoli ho model

řekli restauraci

možná

a to především za účelem analýzy škodlivého softwaru kterými spíš veřejnýho more

jeho přednášky letím úvodem do tématu rekompilace popisem strastí a proto si tohoto přístupu a

představení vyvíjeného nástroje tříd se prosím potvrzenka

takže děkuju závod

jak je odpoledne pojmenuj je už bylo řečeno je teprve make a já vlastní tam

máme prezentaci teda bude plná kraviček

a něco málo už nebylo řečeno tady kterého zmiňovaný že mu nebo na orientace tím

se zabýváme matematika potom programování zpětné inženýrství a jako paní řadě také operační systémy

a co se týče kompilátoru to je to očima dneska budu povídat ta tím se

zabývá mušce tím rokem

ta nás teda dneska čeká anemie tak prvé řadě si se podíváme aby se sjednotily

terminologií foto tady kompilace vlastně

další částí se podíváme k čemu to je dobre

a následně abychom pochopili všechny strasti a propastí tohoto postupu tak se musíme podíváte funguje

překlad a to za informace při něm ztrácíme

následně se seznámíme se kompilátorem který vyvíjíme a formy nám vyjde část se mrkneme normálně

kompilační službu vy si můžete nesem prohlížečích rekompilaci zkoušet na vlastní kůži

a to patrna je tady kompilace zrušte se určitě všichni setkali s pojmem překlad neboli

kompilace vy máte zdrojový kód chcete z něho vytvořit soubor který je pochopitelný pro danou

architekturu

to znamená například máte céčkový zdra a vytvoříte toho překladem binárku pro architekturu intel I

zase metače kterou si potom můžete pouště na vaše věta disku distribuovaly mezi vaše kamarády

případě fí prodávat

kde kompilace neboli zpětný překlad to je postup opačný to znamená my na vstupu nemáme

ten zdroják ale máme tu vypočtenou binárku

a co my se snažíme je získá toho zdrojový kód který se blíží tomu původnímu

ze kterého ta binar sazba

se tady důležité si uvědomit tak je fakt že téměř nikdy nejste schopni získat ten

původní zdra

protože těch informací které tam ztratíte během překladu je opravdu mnoho

takže to co vy získáte se to může podobat

ale nebude to téměř nikdy to stejné že to je třeba v radovan těmi se

nesnažíme získat úplně ten původní brát tady možné naprosto

ale snažíme získat něco co je ekvivalentní původnímu drát

tak čemu to je dobude

jo

záleží na tom kolik bity s tím se teda práce

polka mototechnu dívat pokuď to chcete pouze použít jako pomůcku pro analýzu tak je tam

práce ale pokud tím chcete udělat něco dalšího tak bude třeba nějaké manuální činností které

mám ten výstup stačí

pokud se týče analýzy tak tam je

klasický zpětné inženýrství to znamená máte nějaký program třeba konkurence a se běžící tak to

dělají že sou tak rychlí tak je tam používají algoritmy a tak dále tomu se

může hodit rekompilace

další co je možné pro vazby kompilací tak jeho daní chyba zranitelnost

když sice můžete si chyby hledat na úrovni bráchu máte třeba nějaký opensource projekt

ale silnými nezatančíte žiješ cenzura opravdu je to co je potom tedy na nebo chování

totiž překlad vám to může optimalizovat může vám tam vyhodí nějaké volání tady důležité z

hlediska vašeho algoritmu a ten překladač to vyhodnotí že tam úplně k ničemu ale můžete

mi vranickou třeba že generujete vítězně jasnějším tak entropii nebo něco podobného

řekli že potom byste tam intenzitu bylo zpětně přeložitelný tak se to dá využít co

může máte program který to by si napsaný a ztratili sto něho strach

kdybyste chtěli na tento pro program nějak namazat a rozšířit o takže můžete použít kompilaci

získáte zdra ten si upravíte aby byl přeložitelný a můžete do něho přidávat nové vlastnosti

nebo se to může hodit portování znát máte aplikační pro nějakou architekturu aby byste to

chtěli rozjet třeba na vaše mobilním telefonu na ten běží ano

tak to můžete rekompilovat upravit toto nebude přeložitelné přeloží do pro R a můžete teče

a ke všemu tomuto se hodí rekompilace

jo někdo by mohl namítnout ale že to bylo řešeno složenou podobě takzvaného bit asembleru

který mám toho binárního souboru získá textový výstup bitu textově instrukce které se mně nachází

a jakási určitě tušíte tak ten výstup z asembleru je to podle jen mi

za druhé přenositelný to znamená když máte asembler proud osumdesát česku tak nárnímu tím od

zahrajete

opakující se že jo to tam vidíte na silných i mám jo může to tam

provést nějakou úpravu allen opačném to že se splaťte té protože to je opravdu nízká

úroveň a vyžaduje to speciální znalosti o té dané architektuře a instrukční sadě nula u

se mužští říkal že se to opakuje všechno

i když teda je fakt že někteří ten asembler milují ale tady na něho dopustit

my se ovšem budeme pohybovat na daleko vyšší úrovni ne že právě tento asembler a

by se budeme pohybovat na úrovni

vysoké úrovně na úrovni céčka řekněme

a my se kouknem na to jak funguje překlad a to za informace se něco

týkají a operacím takže na začátku máme nějaký práh můžeme si představit že to je

soubor modul teďka se ve kterém je jedna funkce která vrací odpověď na víte to

a von ten překladač tím udělat tak prvé řadě tam dojde k nějakému procesy ten

procesor vezme a třeba když máte include i tak nahradí obsah těch souborů zapíchnu kdy

zbavíte tom drátu komentářů odstraní zbytečná prázdná místa a tak dále aby ulehčilo tím další

částem práci

jo takže už na této úrovni ztrácíme komentáře pracuje další věci

dále následuje tak zvaná lexikální analýza která má za úkol ten zdrojový kód rozkouskována ná

tak zvané s okny které reprezentují lexikální jednotky tom program takže když se mrkneme na

tu ukázku tak tam máme třeba token integer i to že klíčové slovo pak tam

máme koupím I D který má sobě atribut že jednal identifikátor o tom na to

naše funkce

dalo tamto závorky a tak dále

takže to má za úkol lexikální analýza a produkuje právě seznam tyto tu

následovat nejdůležitější část to je syntaktická a sémantická analýza

její úkoly je zjistit zda ten seznam kouknu který máte je správný z hlediska struktury

a ta tam sedí typy

to znamená například céčku že když máte if a potom musí být otevírací závorka podmínka

ukončující závorka a tak dále

také se tam kontroluje jestli všechny proměnné které sme použili byly deklarované a ta tam

sedí typy operací nejsou tam třeba nějak explicitní přetypování

jo to je výsledkem tak je vnitřní reprezentace je kterou to bude dále pracovat to

může být nějaký tříadresový kód nebo jak to máme tady tak abstraktní syntaktický strom

potom se vezme tento abstraktní syntaktický strom a pro že nesou optimalizátor

to znamená ten provede takové optimalizace které jsou většinou jazykově nezávislé jako v tomto případě

když máme sčítání čtyrycet a dva to můžeme provést a překlad moc za překladu bychom

to nemuseli pořád vyhodnocovat protože odpověď bude pořád ta stejná čtyrycet dva

tak ten optimalizátor to vezme asi malíře to a dostaneme toto máme tady

no poslední část následujícího domanického obchodu vezmeme se to vnitřní reprezentaci a získáme zní binar

schválně si poznáte

o to tam mám těch čísílek toto je záporná souboru

která vás

jo výborně spešov on tady L D to poznat těch prvních čísel sedum sto čtyrycet

čtyry to čtyři šest kdy to je takle nemanické číslo tohoto formátu souboru když se

podíváte do vlastně tabulky tak čtyrycet pět je F čtyrycet čtyry fail čtyři že je

pouze hexadecimálně

tak když se na to podíváme přesně jak říkám zná získáme si toho jsem byl

disku v asembleru tak tam vidíme je tam ten překladač přeložil to znamená je tam

nějak pro o tom tyto registrů nahrajeme tu tíhovou hodnotu a vrátili

tímto způsobem sme si získali tak zvaný objektový soubor po provedeme pro všechny naše ztráty

a to potom my musíme vzít tak je všechny ty soubory seskupí dohromady případě k

tomu při linkovat další knihovnice matematickou knihovnu a tak dále

a získáme spustitelný program

tady sem dokázal kousek bit asembleru kde takže vynechány asi osumdesát řádku a on se

dobře sledovali tak tam můžete rozpozná že se tam nachází ta naše funkce a od

není je main který volat o funkci

jo takže je vidět že už tam nevidíme kde tam ty funkce začínají kde tam

končí jo toto informaci tam nemáme

a spoustu dalších jo to byla samozřejmě nově ducha ukázka abyste věděli co to

jak to funguje

a teď se podíváme protože to taková složka prekompilace a proč stojí za to

protože to opravdu marcela nič takzvaně

a že zaprvé ztrácíme tak důležité informace

jo už tam nemáme komentáře direktivy a tak dále

když tamchyna musí být typy jo strukturu tam neuvidíte a my se tam uvidíte takto

pouze čísla jo číslo a je tam někde nerozeznáte do ukazatele se číslo

konstanta lechtivý takto vysokoúrovňové konstrukce ten for cyklus který se říká napsali je rozdělen do

nějakých porovnání adam

jo ten taktéž i příkazy nebo switche ty můžou být taky do generovány do nějaký

posloupností porovnání adámků

a samozřejmě sázíme jména proměnných můžeme ztratíme na funkcí symbolických konstant

dále no problém které se tam objevují je nerozhodnutelný

to znamená dejme tomu že já bych vám know how ucho vytvořte i program kterému

když předhodím binárku

tak jezdí získal informaci která část sou data a která časy kout

tak bylo matematicky dokázané že takovýto programy sestrojit

ne jako ne že by se to nebyly třeba schopni nebo jako teď se na

to byly hloupý a za deset let jo to někdo dokáže ale bylo matematicky dokázáno

že takový program nikdo nikdy ne sestrojí

ale ti co zmást viděli teoretickou informatiku neboj měli ten předmět tak se asi slyšeli

o problému nastavení turingova stroje a lze ukázat že ten problém je ekvivalentní tomuto problém

proč protože abyste získali opravdu správnou odpověď takto případy kdy ten program prostě musíte spustit

ani vacek samotná paměti a jestli to interpretuje jako data nebo jako ale pak ten

program nemusí nikdy skončit a třeba neudržíte výsledek

ale my třeba nevíte jestli program opravdu něco počítá nebo za to cykly

takže tom je ten problém

jsou tam různé nízkoúrovňové operace

třeba registr příznaků který modifikují rozplyne operace nebo když máte na šedesáti čtyřbytovém systému registr

ráj tak ten je složen z mnoha pod registru jo je I a tak dále

co tam nepříme skoky je taky problém se ten se třeba vypořádat

ten zdrojový kód mohou by obtiskovány

jak

právě na úrovni toho zdrojového kódu nebo tak potom na úrovni binárního kódu váš mohou

tam být přidá nějakým geekovo

o změněno chování a tak dále takže směsi taky třeba vypořádat

naší problém může být tak zvaný peking dinárech

kdy vy vezmete vaši binárku

vezmete jiný program který vám komprimuje přidá na začátek té komprimované verze nějakou rutinu která

vám spuštění dekom P

D a F depku je opakuje ten binárku a potom místností takže by potom nechcete

rekompilovat tady ten tady ten zabalený kotálí chcete ten rozbalený takže vy musíte zjistit co

to bylo za pater a komatu

no a pak kategorie sama o sobě je škodlivý software neboli narrower který nedodržuje žádné

konvence které souběžnému se dělal opravdu to chce a velmi málo informací něm o poskytnuto

když potom na to půjdeme z ne úrovně tak pokud bychom chtěli dělat generickou rekompilaci

znamená nebyly bychom zaměření třeba je najít osumdesát šest úkoly chtěli jiné architektury

tak potom nastane problém z těch architektury hrozně moc

dále i mají různé instrukční sady můžou mít divnou to by tomu šířku nám to

tam i celého třiceti dvou bitové registry šedesáti čtyř bitové různá indiánech a tady to

by floating point a může tam být nemusí být

jsou samozřejmě různé verze rozšíření třeba access vemem X nejsme skáčete a tak dále

tím jdou spolu i různá rozhraní na například volací konvence

jak předáváte parametry do funkce žena máte tři zásobník nebo jinde před paměť nebo přes

registry teď předá máte zleva doprava nebo zprava doleva do je potom toho zásobník uvolňuje

volající volaný jak vracíte výsledky funkce to se mnou novější a může to být různým

způsobem a také je tam mnoho způsobuje něco udělat se podíváte na ten na tu

ukázku tak je to asi kdo knesla česky intelovská syntaxe

a je tam ukázáno se způsobuje vynulovat registr

samozřejmě toto je triviální ukázka ale těch různým způsobem něco udělá to její u jiných

jo a celým tím volání funkcí a tak dále

no a samozřejmě máme tady různé souborové formáty a ukousne viděli atom téčko to je

na windowsech anebo macho námitku

dále máme acho programovacích jazyků jo nejenom céčko nejenom teďka můžete překládat novinářky ale můžete

říkali z jiných jazyků

teď pro každý ten překládáš máme různé typy optimalizací tady je třeba vidím něco pro

vědce teďko

a to jsou pouze parametry které má specifikují které přesně optimalizace se mají provést vy

si můžete připravit máš vlastním X optimalizací a ten může být něčem unikátní

a každý z nich může vyprodukovat naprosto jiný binární o

to je dále zajímavého takto instrukcí idiom i ten překladač

aby například ten výstup byl rychlejší se může provést některé úpravy na úrovni instrukcí

to co by asi všichni znáte z asembleru je že když máte tady násobení čtyřkou

takto můžete transformována bitový posuv logický doleva o dva bity

to že zajímavější je třeba když máte modul o tak překládky můžou dělat něco takového

tam vidíte a kdyby se ukázaly tu pravou stranu uživatel internetu bude koukat jak se

to má být jo přitom je to jednoduchému důvodem

takže s tím že se třeba vypořádávat tu pravou stranou korektně nahradit zpátky za to

co to bylo

bohužel to není všechno a je tam daleko více problémů a nezbývá mi už na

ně moc času takže bude muset signál

tak teď nastává teda otázka jestli je to opravdu tak jako bychom měli získávat krámů

z hovězího hamburgrů jo tam máte kousek masíčka ten kousek masíčka mohl odpovídá tisícům různých

důkaz

no ale kdybychom tady kdybych když tady dneska se mužstev to asi tak nebude takže

možná přece jenom bude nějaká naděje proto získat a budu zpátky tu krabičku

a nejede si způsobem se podíváme

a já jsem člen týmu který se zabývá vývojem se kompilátoru je to projekt lissom

a naším cílem je vytvořit tak zvaný generický zpětný překladač

poznamenám se nepodporovat různé architektury různé souborové formáty různé programovací jazyky různé překladače a tak

dále

a naším cílem je aby ten výstup bylo pro uživatele uniformní to znamená aniž to

bylo by nastavení intel I osumdesát šest nebo pro R o bude mít výstup céčku

které většinou do března a jestli seznámen a nebude sem se zabývá technickými detaily

a na vstupu co my budeme ni a budeme mít binárku

a o to je P teda nebo formy

co se týče tady nároky tak mi aktuálně podporujeme architekturu intel osumdesát šest ve třiceti

dvou bitové verzi R oběma nízkosti rozšířeními tam jedna dva a potom bit

co se týče souborových formátů traktory podporujeme alfa a péčko služ je většina

a podchodem na aplikace napsané sečku případně asembleru

co se týče té druhé části teďka o tom budu mluvit chvilku ale je potřeba

fráze kompilátor specifikovat detaily teda ne architektury abychom tím byli schopni pracovat

no a na výstupu máme za prvé uniformy výstup

buď tečku nebo v jakémsi jazyce který se podobá faníku

dále máme jako by výstupy z asembleru

do podobné ste viděli kázané grafické reprezentace například graf volání nebo graf toku řízení jak

tam probublává to programu a různé statistiky

načti vývojářů je veden obecnou a jsem kolářem jádro našeho týmu tvoří jakou koutek takže

ty na ja a zejtra na dále máme ve skupině mnoho diplomant voba plánů právě

z naší fakulty kteří nám pomáhají realizovat tento cíl a vypracovávají mám otázka oulet

poďme se ten omrknou na to jak vypadá ten funkce toho našeho chcete o překladače

neboj udělat

takže na vstupu jak sem říkal a ne binárku

sami si uděláme mít detekujeme co to je formát o jestli to je gauss nebo

je to péčku a snažíme se taky detekovat použity překladač

protože tím že my známe použity při koláž taková mnoho řekne

například kde ste vynásobíte potom entry point kam se při zavedení bude skákat abychom začali

proto vykonávat tělo toho programu a další informace

pátku my uděláme je že to zkonvertuje menu naše uniformního formátu znamená mise nebudem se

zabývat že péčku mainu babičku neříkal ale budeme mínus uniformní formát pro všechny souborové formáty

to je jedna strana

ta druhá strana jemuž sem zmiňoval my musíme mít popis teda ne architektury

to se provede existujícím jazyce isac který je vyvíjený právě v rámci projektu lissom kde

vy si popíšete co tam soud architektury za registry jak se tam pracuje s pamětí

jaká tam instrukční sada jaké má zakódování a co je nejpodstatnější tak jak se která

instrukce chová

to znamená že například tam instrukce jako sčítání

tak to mě jazyce by namodelujete že se jedná opravdu odčítání klasickém úsečkovém smyslu

a tak to by to můžete namodelovat i pro jiné architektury takže co my potom

víme je že když se tam to může použít tady to instrukce tak že se

jedná se odčítání teď kolem osy

takže milušce nemusíme zabývat že se ty instrukce mohou jmenovaní na ty prostě víme jak

se chovají se pro nás podstatné

a sumy generujem instrukční dekodér který nám schopný zjistím že tato binární data se tato

instrukce tato binární data tato instrukce tyto operandy a tak dále

a teď už následuje nutilo toho samotného de kompilátoru které ještě navíc může být na

vstupu se doplňující informace které pro nás sem něco podstatné

to nejprve řadě uděláme je že si to konvertujeme do úrovně nižší reprezentace

to si můžete představit jako by výstup by z asembleru podobně jak sem tam ukazoval

to znamená my tam máme jednotlivé instrukce a my víme co ty instrukce dělají díme

jak jsou za sebou víme jaké tam jsou mezi skoky a to je všechno

co myslel toho snažíme získat potom je rozdělení funkcí to znamená například tento bylo instrukcí

patří této funkci tento blok instrukci patřičné funkci

a tak dále

co my následně uděláme je a to za použití systému halovém který možná znáte protože

na něm postaven trekovací lan

tak využitím tady tohoto systému a jejich vnitřní reprezentace provedeme optimalizaci

ta nás to dostaneme se to první části je značně neoptimalizovány tam pro jednu instrukci

může být může to být nahrazeno spoustu jiný instrukcí takže co my chceme dělat ten

výstup čitelnější kratší

takže to uděláme právě této fázi ale pořád sme ještě na velmi nízké úrovni

na úrovni toho asembleru

a následující fázi které ze označena jako převod do vysokoúrovňové reprezentace a různých detekujeme například

furt cykly mail cykly konstrukce i a o i L switche a tak dále

a zase spolu snažíme získat něco co bude jazykově nezávisle a už to bude podobnější

tom úsečku

až to po uděláme tak jsou tam třeba provést další optimalizace

tam může být spoustu výrazů ktery nouze jo zkrátit a tak dále

a následně dojde k tomu že se viděli výstup znamená tato vnitřní reprezentace se zkonvertuje

například teďko nebo na té modifikovaný pak

a dostaneme další výstupy

tak to bylo ve zkratce řečeno jak to teda jak to funguje

poďme se podívat na nějaké příklady že to já si to na čem to pěkně

uvidíte ta na jedné straně máme voni kotel na té druhé rekonstruovaný

je to jednoduchý příklad protože to bylo toto sem nevlezla slajd

takže máme tam jednu funkci která provádí jakési podivné sčítání na zavolaj se tam funkce

ransom získáme si dvě čísla a provede tam potom aritmetiku nastane funkce main že si

taky získáme kde náhodná čísla podíváme se jestli ačkoli větší byl pokuď ano vidíte metru

vypočítáme to naší sumu jak vytiskneme folku počítáme suma vracíme výsledek

takže v našem ve kompilovaném kódu tam přibylo tak jen hlavičkový soubor se tady tečka

a protože my víme že sme to překládali pro třiceti dvou bitovou architekturu to znamená

používáme tam třiceti ubytoven těžili to in třicet dva pro ty roste

o těm u té funkce mají sám není mi název tak sme tam dali adresu

na které se nachází teda neznáte

ty názvy proměnných X Y ty sme tam na generovali proto protože to ohraničitelnější než

kdybychom family v R podtržítko petr čtyři dva osum a v R type čtyry šest

osum jo to X Y N ohraničitelnější ale neodpovídá to tomu co bylo voni by

nás

protože to my nevíme o to bylo ztracené

no a co se týče mainu tak se na to podíváte ten kód je sice

trošičku jiný ale funkčně ekvivalentní s tou k tomu co bylo na vstupu

tady ukázka další to jen až osumdesát šest se pro péčku a je to bez

optimalizací a tentokrát tam máme k dispozici o nic informace

eroze zapnou je že normální pomocí přepínače pomlčka mě minimálně urgence teďka no atomickou sme

schopni zjistit a jsme schopni zjistit přesně jméno funkcí

kde se ty jsem se nacházely jaké modu v na tomto případě to všechno z

modulu test žasl

jaký adresový rozsah a jaký je rozsah řádek na kterém se nacházely tom původním zdroják

takže mi to sme potom třeba schopni seskupit tak aby to odpovídalo tomu pořadí které

bylo buď intra

jo toto sme schopni větší

dále vidíte že u toho faktoriálu tam máme název parametrů

ten se taky výčet vadit informaci

potom u té funkce kalkuly taky Á B sme výčet v ladicích informací a mnoho

dalších věcí že pokuď se tom výstupu nahází ty ladicí informace tak je neprázdný voda

protože my můžeme využít abychom generovali přesnějšího přehlednější po

dále co generujeme tam může být graf to řízení ste zase jiný příklad který nám

ukazuje jak je tam sou základní bloky a jak mezi nima o se předává řízení

další ukázka teďka volání za máme tam musím A a vidíme že unavovat chcete jaké

mají stodole a mají slad a ta funkce se volá funkci enum teda není naši

finance ale zřejmě je se standardní céčkové knihovny a dále funkci print spol kterou platí

totéž takže můžete vidět které tam jsou funkce a jak se mezi sebou navzájem provolávají

to může být dobré prohnaný

pokuď máme k dispozici ladicí informace tak jsme schopni ten výstup dělat či

že my nabízíme které ty funkce byli ve stejné modulu znamená byly na začátku tom

drátu propojené

a toto zobrazit hodně tomu uživateli aby se to mohou lépe orientovat

tak to smetena skončili zkratkami a mrkneme se na to by mohlo zajímat todleto maily

kompilační služba

no

zmrazen

a jo fajn vypadá to že to bude fungovat

tak

to je to naše stránka

a my adrese viděli tedy compiler byl cz

o to tady máme tak sou novinky se můžete podívat se tam nového který kompilačních

pozdě a příští týden připravujeme novou verzi takže tady to byly určitě další novinky

kde mám potom zajímaly detaily takto učte podívejte sem D seznam článků které sme publikovali

souvislosti jo výzkumem této oblasti

kdy vlastně to zaujalo zase neváhejte usmát a případně kdybyste nebyli schopni se na to

pdf pro se můžeme domluvit

o partnery kontaktu nás zajímá to nás zajímá tak je tady tato stránka si můžete

vyzkoušet rekompilaci

máte tři možnosti

buď si můžete vyzkoušet rekompilovat přímo váš binární soubor tím že ho tam hrajete

případně pokuď máte céčkový zdroják slepota můžete nahrát jeho za masce uložíme a ten výstup

budeme dekomprimovat

no a nejednodušší v našem případě bude když si tady můžete vytvořit vlastní céčkový teďko

geekovo tak já tady tam třeba zdar

karle

můžete si zvolit proto to chcete přeložit jo tady máme třeba L mi sečku úroveň

optimalizace při překladu

jestli tam cena ladicí informace jestli tam chceme zachovat symboly a pak pouze kliknete na

tlačítko rtmp mail

tady se vám průběžně ukazuje fáze kterými ten překlad prochází máte tady probes v R

vidíte

jak daleko to ještě zbývá do cíle

a následně tady to výsledky už víme že rekompilace proběhla úspěšně

vy si můžete ty výsledky obrazy

tady na pravé straně vidíte ten výstup céčku tady vlevo je korespondující výstupy z asembleru

když se třeba kliknete na tu funkci main vám to automaticky skočí zde kde jsme

identifikovali že my tady vidíte to komentáři a tady máte instrukce které tam byly použijte

jo to může sloužit tomu analytikovi taky na příklady sem tam něco nezdá nebo by

takto podívat jak to bylo opravdu tom asembleru tak si může přeskočit sem

takže vidíme že sme korektně rekultivovali jo ten program čeho si můžete všimnout že jste

tam líp info

a nám se to stalo nějaké

by nám mohlo působit zvláštně ale je to tím že ten překladač který vyděluje a

vstupu tam byl řetězec a neměl žádné formátovací značky na to procentíčko D a tak

dále a tak to nahradil zapnu C

které pouze vezmete řetězec aby slyšel

a může to být rychlejší než doplňku

tak to tam dále máme tak tady je von graf tam jenom vidět že mi

vo typu C zajímavého on trochu brát tady taky nic zajímavého a tady si můžete

stáhnout binárku kterou jsme používali

tak komisi můžete zkusit pak je tam dál vlastně céčkový to já nebo případně si

tady můžete nagenerovat nějaké a vyzkoušet si i rekompilaci

tak já teda přepnu se pokusím přepnu zpátky na tu prezentaci

takže tohle byla ta našli bychom vloží dva

určitě stranickostem mrknout případně na napište co si myslíte jestli vám jestli dva zaujala nebo

bychom tam měli něco zlepšit

tady přikládám kontakt pro zájemce především za studentů kteří přemýšlí o tom jak obviňovali u

bakalářskou nebo diplomovou práci

to mi mám nabízíme tak je velmi zajímavé téma

velmi obtížné téma a velice perspektivní téma

jo takže nečekejte že by se na dělali shop na obchod potom kam a to

ne jo bude to náročné od bude to tam za to

takže pokuď máte zájem dělal něco zajímavého určitě se nám ozvěte a kontakt byly na

slajdu domluvíme se

a to by bylo v mojí takže já mám velmi děkuju za pozornost a jsem

odráží se tady dneska přišli hojném počtu

díky

tak já se zeptám aténami otázky ano

a takže z drátky k tomu zveřejněny nejsou ten vývoj probíhá zavřeně je to k

dispozici pouze přes tu webovou službu

podívám zajímaly důvody a tak dále ten můžete na nasát a určitě se mám dostane

odpověď zní hodně kompetitivnějšího nejsem v tomhle ohledu je a

já bohužel nejsem ve vedení takže nevím jaké mají představy jasny E na řízení

ale co se týče třeba studentů tak tam není vůbec žádný problém jsou práci vypracujete

odevzdáte ale zveřejňuje se pouze upravená verze

kde nejsou řečené některé implementační detaily

no ale tohoto pohledu není vůbec žádný problém s tím že byste měli nějaké komplikace

případně bakalářskym unk i

ano dotaz

jako máte úspěšnost řekl registrových kódu X přeložit dekódujete úplně všechno nebo jsou z už

nějaký čas které se de kupovat momentálně nedají tak jako moc děkuju za otázku a

je to tak záleží na složitosti jo záleží na složitosti a zase tam používají konstrukce

které souběžné nebo se něčím vymykají

samozřejmě pochodě kombinujeme škodlivý software tak tam se vymyká většinou naprosto všecko protože tvůrci toho

škodlivého softwaru vyloženě chtějí abychom nebyli úspěšný tak že se o to snaží všemožnými ochrana

mi

pokuď ten soubor vyleze překladače který je známý například dětem tečka tak pak máme dost

velkou úspěšnost protože se tam používají klasickým konstrukce klasické konvence

a tak dále

ano

že bych hotels když vlastně budu mít nějakou binárku který nebudu nic vědět do se

nějak třeba automatizovaně zjistit pro jako Ú podporu může přeloženej

tak jdeme řadě třeba bude určitě zajímat tady jaký tam je F souborový formát použity

na to můžete na linuxu použít například čili to file

nebo případně můžete použít na windows u no tuším prý se to menuje případně další

utility které mám zjistí co to je za souborový formát jestli to je teda L

nebo jestli to je téčko případně jestli to je úplně nějaký nesmysl načítal audio

té první věc která má zajímá poté když víte co to je za souborový formát

tak se můžete podívat pomocí utilit typu od těch dám který vám je schopný zase

milovat ten výstup a zjistíte si teda jestli se opravdu natolik vektor Á nebo není

jo žid architekturu tak pak samozřejmě můžete se pídili po dalších věcech je tam byl

použitý překládáš a tak dále jo to všechno řešíme právě našem projektu by se tam

používají různé heuristiky a díky který mi to jsme schopni ti jo některých případech pokud

si ten uživatel na práci s tím aby toho nečitelné tak je třeba uspoří něco

dynamičtější jo

já bych hodnot asku na začátku bylo pohoda ne že mě možná by se program

a úplně možnost vyšší data úvod

pohodu potom sjednané podoby milostiplnostem protože pro bytě po taky ne statickou analyzovat po statický

prostě ten binární cot na načtena

ten k o na ty slušný program tak šaky sposobom osoby šlechtice data a

ten půl překot pět podstatě plně možné

tak já možná děkuji za znaku

a co bych chtěl a osvětlit tak je že tam musíme tento přitom není možný

ve všech případech udělat jo to bylo to co sem říkal že neexistuje program který

by vám to zjistil ve všech případech

ale dejme tomu že třeba devadesáti procentech nebo devadesáti pěti procentech případů můžete být úspěšný

klasickou statickou analýzou

jo to zná zjistíte si například je tam jen připojení na kam se skáče po

nahrání to program do paměti a odtud můžete začít dekódovat

jo a to může třeba fungovat devadesáti pěti procentech případů ani zpět na ten případu

bohužel třeba nigin epopeje se

jo takže tam je to mi to riziko ale v běžných případů to je možné

si to jenom tím způsobem

ano některé obchodní případy tímto způsobem nejsou mu není mi není možné dekomprimovat

no

eště počkejte vám přinesu mikro force slyšet na slidu

že krnáč nějaký houfu skovanej zdrojový kód dokáže čeho pro vložit na sprostotu binárku získat

P trojku nějaké optimalizovány po to bude

a E u té obfuskace tam se většinou mění řekněme třeba identifikátory nebo konstrukce použít

nebo se tam vkládá něco navíc nebo se něco mění takže my to budeme schopni

získat je zpátky toto skovaný o

ale jsou potom potřeba další analýzy které by nám sto kostkované hospodu získali něco třeba

ještě před tou tiskací jo protože to obfuskaci vy tam zahnete jako by další úroveň

do toho protože vy získat evropu skovaný to ale ještě potom potřeba další analýzy které

mám otestované ho kódů jsou schopni získat zpátky ten skovaný o

jo i odpověděls na naši otázku

ano

A abys třeba zatahuje si stanoví kolik céčku S třeba když to napíšu já nevím

byli zvykli v něčem jiném stuze taky pěkně do toho céčka třeba dostat

jo s tím rizikem sice nejsem jist jestli není interpretovaný ale to je celkem nepodstatném

naštípat

samozřejmě můžete mít jiné jazyky které mám generují ten asembler

a ten sem tady může být velmi podobný pro to co ste dostali teďka to

třeba když si přeložíte fortran doby náký

a samozřejmě mohou tam být nějaké rozděle věcí ale pokuď se ten potom a podobně

tak měl jsme schopni stejně dobře rekompilovat jako kdyby vyšel někoho jiného rovnosti o jazyku

jo ale to tam sou tam odlišnosti samozřejmě

já bych se zeptal jestli takováto teprv kompilace může být efektivní tři it

při když mám

k o nějakém jiném jazyce a si ho získat do céčka S této efektivní dělat

tuhle cestu

nebo ty jakémkoliv

jazyce kterým si vymyslí matici jasné do céčka

tak se mi to velice zajímavá otázka souvisí to tak zvanou migraci kódu

za na vy máte zdrojový kód v jednom jazyce třeba sečku a chtěli by se

to v něčem jiném já ze fortran no ale obvykla todle naopak že jo máte

něco ve fortranu se nejřaditelnějšího takto byste konverzovali úsečka tak jedna možnost je vždy ten

původní zdroje a konvertováno přímo

další možnosti ho přeloží potom kdy kompilovat následně to dekódovat do toho vašeho výstupního jazyka

pokud to provedete přímo tak tam máte výhodu že tam máte zachované všechny informace

to znamená máte tam všechna jména proměnných všechny komentáře je ty komentáře můžete vzít a

promítnout do toho výstupu

takže to co tam všechno máte to sou teda výhody toho přístupu přímo ze zdrojáku

dobré

co se týče toho přístup dobře ten binární kód tak tam ztrácíte informaci je to

náročnější a zase na druhou stranu tam můžete mít v něco co by se mám

na úrovni toho tečkového arrow toho patnáctého korun neprojevilo jo může to v nějaké specialisty

co ten překladač optimalizuje a učte neobjeví tom výstupu

takže potom když to budete rekompilovat tak to může být v některých případech to může

být přesnější protože tam máte vyloženě ten výstup jo a s tím souvisí ještě tak

zvaná migrace binárního kódu to znamená vy máte probrán který mám běží třeba nádobu

chtěl by se mělo dopad program který běží najít osumdesát čase

a pokud tam nemáte zdroják tak už vám nepomůže ten přístup hazdra zdrojáku ale musíte

ten kód rekompilovat

nechcete jinou cestou difundovat do nějakou jazyk to přeložit pro tu danou cílovou architekturu

takže tady kompilace je využita má především právě případě tady migrace tohoto binárního kódu

jak bych navázal strana předchozí dotaz

řekněme že bych

opravdu si lumírova třeba ten port rovno céčka a nechtěl B C tou to verzí

a úplně novinářky na konkrétní architekturu ale zastavil bych se někde na úrovni jako to

univerzálního kódu na tom L lvem N Ú je to možný

je to určitě možné my sme právě o tomto přístupu na tady článek

vize zabijeme zabýváme to mít já sem nouzového kódu kdy přitom je možný ten že

vy vezmete ten původní teda

pak použijete sílám který je mám odklopený vygenerovat onen měr ten je prezentace která se

nepoužívá a můžete využít zadní část našeho překladače

která vám je schopná sou evolventní R získat zpátky tento

jo ta webová služba to zatím nepodporuje

takže tam si to ještě nevyzkoušíte ale prakticky nebo teoretický takto teoreticky to možné je

a případně za ní můžu poslat ten článek který se o tomto tématu napsaný

příliš nějaký dotaz

já bych se k že bych se chtěl zeptat jestli plánujete podporu nějakých vyšších jazyků

přesně C plus třeba jestli dekódujete nebo to vždycky hodláte nechat na úrovni céčka

případně jaké úspěchy máte skok zakompilováním složitějšího programu protože vy ste říkal že se zaměřuje

ten a nějaký málo vektory předpokládám bývá spíš jednodušší

a jak vypadá potom kotel nějakého programu který má třeba já nevím čtyřicet mega tak

začít

tak jo děkuju tak mi propojena tu první otázku co se týče rekompilace něco složitějšího

tak to mám určitě napadne tak je zmiňované se plus tesco mi tady toto malé

plánů ale zase C plus použije o něco vyšší level když právě to céčko že

u se plus potká tam musíte rekonstruovat třídní hierarchie

musíte tam rekonstruovat práci s výjimkami rose třeba neobjevil koutečku a má to ještě další

specifika

takže současné době nejde kompilaci C plus podprogram nepodporujeme respektive kde kopírujeme tak pěkně jak

byste si představoval ale určitě právě toto je plánů protože dost velká část škodlivého softwaru

je napsáno právě C plus ku a příklad více zvyšoval studio

takže tímto směrem součtem M seznam zem zabírat nebo

jak

a co se týče toho tvého dotazu tak samozřejmě když máte větší binární soubor tak

tady kompilace může být pomalejší to bude

a bude to vody kompilovaného hodně takže bude třeba problém se tom vyznat

že s tím souvisí třeba jim přístup že výsledek usilovali pouze část

toho binárního souboru kterou by ten analytik chtěl jo třeba může tuším že na tady

těchto adres se nachází něco podezřelého takže by si rekompilovat jenom část toho a podívat

jestli opravdu ten něco protřelého nebo ne

jo zase je to možnost na budoucí rozšíření

no jestli chtěl zeptat jestli takový projekt jako kdy kompilátor nepřestavuje nějaký problém z hlediska

licencí nějaký program je záměrně distribuovaný jakobín ark a

jestli

některé větší společností ne nepředstavují nějaké problémy a se týče kdy kompilaci jejích uzavřených programů

a modifikacích kódu

děkuji za otázku tady narážíme na problém autorského práva který je řešen různých zemí jinak

jo co se týče české republiky tak poplivat o zajímalo tak náhodně ten autorského zákona

té zakončí foto dvacet jedna lomeno dva tisíce sbírky především do paragraf šedesát šest který

říká se vy můžete dělá na to nemůžete dělat

jo takže opravdu pro tu pokuď byste měli mysli dělat něco o čem tušíte že

nelegální mrkněte se do toho autorského zákona a ještě letech konzultujte to z vaší právníkem

jo

samozřejmě některé záležitosti jsou povolené ve většině zemí může být třeba případě rekompilace

za účelem interoperability jo že máte nějaký binární formát kterého nejsou k dispozici stránky a

vy byste chtěli to dělá si váš program který umístím formátem pracovat

tak tam je to mnoha případech povolené a to ještě jiné situace kdy to může

být povolené josef konzultujte autorský zákon teda ne které zemi

jak se zase hospitace že a Q na tom konkurenci a

co dokazuju

tak co se týče konkurence tak já bych zmínil asi dva největší komponenty momentálně kteří

jsou aktivně vyvíjený to je X riziko mail R cože plodin do disassembler lída

ti podporují i za sedmdesát česku adam a zjis prostě to něco jiného a tím

mají velmi pěkné výstupy

Ú sto often projekt funguje se nule

je to po taky komerční projekt to place nejsou tam pomine za to by to

té části a my se snažíme právě

konkurovat tady tomuto projektu některých částech konkuren úspěšně některých méně úspěšněji

takže to takový boj co se týče toho dalšího tak to je si kdy kompilátor

z ruska vynese zmatek

ti kluci se zaměřují na rekompilaci C plus prvkového kódu pro platformu intel X osumdesát

šest

a zase mají zajímavé důsledky některé některých případech nelepší některých horší například právě rekompilaci toho

C plus podkova obchodu jo info schopni a měli kontrolovat výraz je tří joyce maticemi

virtuální činnost a tak dále což mi momentálně schopni nejsme

takže to by asi tak zvaný větší konkurentní kteří svatyně vybíjení

asi všechno

tak jo

žádné další dotazy mockrát děkuji za přednášku za vaše dotazy za disku vypnu zatleskat