0:00:20takže pánové je čas na další přednášku a já se zeptám víte jak získat trávu
0:00:26hamburgeru
0:00:28to nám přišel vysvětlit petr zemek který tady studuje na sítku nad prvkem studiu zároveň
0:00:34proces a tak je technolo číst a tady na fickou je členem skupiny která dohromady
0:00:40a belgickém pracují na
0:00:43generickém by kompilátoru
0:00:45já si to co dělá tu krávu sto hamburgrů že jo
0:00:48no a jejich cíli my vytvořit generické řeším pro ty kompilace binárního kódu pro rozličné
0:00:53platformy já to chápu tak že chtějí něco aby mohli s původní krávy získat jaký
0:01:00ne
0:01:00původní krát získat jakýkoli ho model
0:01:04řekli restauraci
0:01:06možná
0:01:07a to především za účelem analýzy škodlivého softwaru kterými spíš veřejnýho more
0:01:12jeho přednášky letím úvodem do tématu rekompilace popisem strastí a proto si tohoto přístupu a
0:01:18představení vyvíjeného nástroje tříd se prosím potvrzenka
0:01:30takže děkuju závod
0:01:32jak je odpoledne pojmenuj je už bylo řečeno je teprve make a já vlastní tam
0:01:36máme prezentaci teda bude plná kraviček
0:01:40a něco málo už nebylo řečeno tady kterého zmiňovaný že mu nebo na orientace tím
0:01:46se zabýváme matematika potom programování zpětné inženýrství a jako paní řadě také operační systémy
0:01:53a co se týče kompilátoru to je to očima dneska budu povídat ta tím se
0:01:57zabývá mušce tím rokem
0:02:00ta nás teda dneska čeká anemie tak prvé řadě si se podíváme aby se sjednotily
0:02:04terminologií foto tady kompilace vlastně
0:02:07další částí se podíváme k čemu to je dobre
0:02:10a následně abychom pochopili všechny strasti a propastí tohoto postupu tak se musíme podíváte funguje
0:02:17překlad a to za informace při něm ztrácíme
0:02:20následně se seznámíme se kompilátorem který vyvíjíme a formy nám vyjde část se mrkneme normálně
0:02:25kompilační službu vy si můžete nesem prohlížečích rekompilaci zkoušet na vlastní kůži
0:02:31a to patrna je tady kompilace zrušte se určitě všichni setkali s pojmem překlad neboli
0:02:36kompilace vy máte zdrojový kód chcete z něho vytvořit soubor který je pochopitelný pro danou
0:02:42architekturu
0:02:43to znamená například máte céčkový zdra a vytvoříte toho překladem binárku pro architekturu intel I
0:02:49zase metače kterou si potom můžete pouště na vaše věta disku distribuovaly mezi vaše kamarády
0:02:55případě fí prodávat
0:02:57kde kompilace neboli zpětný překlad to je postup opačný to znamená my na vstupu nemáme
0:03:02ten zdroják ale máme tu vypočtenou binárku
0:03:05a co my se snažíme je získá toho zdrojový kód který se blíží tomu původnímu
0:03:11ze kterého ta binar sazba
0:03:13se tady důležité si uvědomit tak je fakt že téměř nikdy nejste schopni získat ten
0:03:18původní zdra
0:03:19protože těch informací které tam ztratíte během překladu je opravdu mnoho
0:03:23takže to co vy získáte se to může podobat
0:03:26ale nebude to téměř nikdy to stejné že to je třeba v radovan těmi se
0:03:31nesnažíme získat úplně ten původní brát tady možné naprosto
0:03:34ale snažíme získat něco co je ekvivalentní původnímu drát
0:03:40tak čemu to je dobude
0:03:42jo
0:03:43záleží na tom kolik bity s tím se teda práce
0:03:47polka mototechnu dívat pokuď to chcete pouze použít jako pomůcku pro analýzu tak je tam
0:03:52práce ale pokud tím chcete udělat něco dalšího tak bude třeba nějaké manuální činností které
0:03:57mám ten výstup stačí
0:03:59pokud se týče analýzy tak tam je
0:04:03klasický zpětné inženýrství to znamená máte nějaký program třeba konkurence a se běžící tak to
0:04:08dělají že sou tak rychlí tak je tam používají algoritmy a tak dále tomu se
0:04:12může hodit rekompilace
0:04:14další co je možné pro vazby kompilací tak jeho daní chyba zranitelnost
0:04:18když sice můžete si chyby hledat na úrovni bráchu máte třeba nějaký opensource projekt
0:04:23ale silnými nezatančíte žiješ cenzura opravdu je to co je potom tedy na nebo chování
0:04:29totiž překlad vám to může optimalizovat může vám tam vyhodí nějaké volání tady důležité z
0:04:34hlediska vašeho algoritmu a ten překladač to vyhodnotí že tam úplně k ničemu ale můžete
0:04:38mi vranickou třeba že generujete vítězně jasnějším tak entropii nebo něco podobného
0:04:44řekli že potom byste tam intenzitu bylo zpětně přeložitelný tak se to dá využít co
0:04:49může máte program který to by si napsaný a ztratili sto něho strach
0:04:53kdybyste chtěli na tento pro program nějak namazat a rozšířit o takže můžete použít kompilaci
0:04:59získáte zdra ten si upravíte aby byl přeložitelný a můžete do něho přidávat nové vlastnosti
0:05:06nebo se to může hodit portování znát máte aplikační pro nějakou architekturu aby byste to
0:05:11chtěli rozjet třeba na vaše mobilním telefonu na ten běží ano
0:05:14tak to můžete rekompilovat upravit toto nebude přeložitelné přeloží do pro R a můžete teče
0:05:20a ke všemu tomuto se hodí rekompilace
0:05:25jo někdo by mohl namítnout ale že to bylo řešeno složenou podobě takzvaného bit asembleru
0:05:30který mám toho binárního souboru získá textový výstup bitu textově instrukce které se mně nachází
0:05:37a jakási určitě tušíte tak ten výstup z asembleru je to podle jen mi
0:05:41za druhé přenositelný to znamená když máte asembler proud osumdesát česku tak nárnímu tím od
0:05:46zahrajete
0:05:47opakující se že jo to tam vidíte na silných i mám jo může to tam
0:05:52provést nějakou úpravu allen opačném to že se splaťte té protože to je opravdu nízká
0:05:56úroveň a vyžaduje to speciální znalosti o té dané architektuře a instrukční sadě nula u
0:06:01se mužští říkal že se to opakuje všechno
0:06:03i když teda je fakt že někteří ten asembler milují ale tady na něho dopustit
0:06:08my se ovšem budeme pohybovat na daleko vyšší úrovni ne že právě tento asembler a
0:06:13by se budeme pohybovat na úrovni
0:06:15vysoké úrovně na úrovni céčka řekněme
0:06:20a my se kouknem na to jak funguje překlad a to za informace se něco
0:06:24týkají a operacím takže na začátku máme nějaký práh můžeme si představit že to je
0:06:30soubor modul teďka se ve kterém je jedna funkce která vrací odpověď na víte to
0:06:37a von ten překladač tím udělat tak prvé řadě tam dojde k nějakému procesy ten
0:06:43procesor vezme a třeba když máte include i tak nahradí obsah těch souborů zapíchnu kdy
0:06:49zbavíte tom drátu komentářů odstraní zbytečná prázdná místa a tak dále aby ulehčilo tím další
0:06:56částem práci
0:06:57jo takže už na této úrovni ztrácíme komentáře pracuje další věci
0:07:02dále následuje tak zvaná lexikální analýza která má za úkol ten zdrojový kód rozkouskována ná
0:07:09tak zvané s okny které reprezentují lexikální jednotky tom program takže když se mrkneme na
0:07:14tu ukázku tak tam máme třeba token integer i to že klíčové slovo pak tam
0:07:19máme koupím I D který má sobě atribut že jednal identifikátor o tom na to
0:07:25naše funkce
0:07:26dalo tamto závorky a tak dále
0:07:28takže to má za úkol lexikální analýza a produkuje právě seznam tyto tu
0:07:33následovat nejdůležitější část to je syntaktická a sémantická analýza
0:07:37její úkoly je zjistit zda ten seznam kouknu který máte je správný z hlediska struktury
0:07:44a ta tam sedí typy
0:07:46to znamená například céčku že když máte if a potom musí být otevírací závorka podmínka
0:07:51ukončující závorka a tak dále
0:07:54také se tam kontroluje jestli všechny proměnné které sme použili byly deklarované a ta tam
0:07:59sedí typy operací nejsou tam třeba nějak explicitní přetypování
0:08:03jo to je výsledkem tak je vnitřní reprezentace je kterou to bude dále pracovat to
0:08:08může být nějaký tříadresový kód nebo jak to máme tady tak abstraktní syntaktický strom
0:08:16potom se vezme tento abstraktní syntaktický strom a pro že nesou optimalizátor
0:08:22to znamená ten provede takové optimalizace které jsou většinou jazykově nezávislé jako v tomto případě
0:08:28když máme sčítání čtyrycet a dva to můžeme provést a překlad moc za překladu bychom
0:08:33to nemuseli pořád vyhodnocovat protože odpověď bude pořád ta stejná čtyrycet dva
0:08:37tak ten optimalizátor to vezme asi malíře to a dostaneme toto máme tady
0:08:42no poslední část následujícího domanického obchodu vezmeme se to vnitřní reprezentaci a získáme zní binar
0:08:50schválně si poznáte
0:08:51o to tam mám těch čísílek toto je záporná souboru
0:08:57která vás
0:09:00jo výborně spešov on tady L D to poznat těch prvních čísel sedum sto čtyrycet
0:09:05čtyry to čtyři šest kdy to je takle nemanické číslo tohoto formátu souboru když se
0:09:09podíváte do vlastně tabulky tak čtyrycet pět je F čtyrycet čtyry fail čtyři že je
0:09:14pouze hexadecimálně
0:09:17tak když se na to podíváme přesně jak říkám zná získáme si toho jsem byl
0:09:22disku v asembleru tak tam vidíme je tam ten překladač přeložil to znamená je tam
0:09:26nějak pro o tom tyto registrů nahrajeme tu tíhovou hodnotu a vrátili
0:09:33tímto způsobem sme si získali tak zvaný objektový soubor po provedeme pro všechny naše ztráty
0:09:39a to potom my musíme vzít tak je všechny ty soubory seskupí dohromady případě k
0:09:43tomu při linkovat další knihovnice matematickou knihovnu a tak dále
0:09:47a získáme spustitelný program
0:09:49tady sem dokázal kousek bit asembleru kde takže vynechány asi osumdesát řádku a on se
0:09:56dobře sledovali tak tam můžete rozpozná že se tam nachází ta naše funkce a od
0:10:01není je main který volat o funkci
0:10:03jo takže je vidět že už tam nevidíme kde tam ty funkce začínají kde tam
0:10:07končí jo toto informaci tam nemáme
0:10:11a spoustu dalších jo to byla samozřejmě nově ducha ukázka abyste věděli co to
0:10:15jak to funguje
0:10:17a teď se podíváme protože to taková složka prekompilace a proč stojí za to
0:10:22protože to opravdu marcela nič takzvaně
0:10:24a že zaprvé ztrácíme tak důležité informace
0:10:27jo už tam nemáme komentáře direktivy a tak dále
0:10:31když tamchyna musí být typy jo strukturu tam neuvidíte a my se tam uvidíte takto
0:10:35pouze čísla jo číslo a je tam někde nerozeznáte do ukazatele se číslo
0:10:42konstanta lechtivý takto vysokoúrovňové konstrukce ten for cyklus který se říká napsali je rozdělen do
0:10:48nějakých porovnání adam
0:10:49jo ten taktéž i příkazy nebo switche ty můžou být taky do generovány do nějaký
0:10:54posloupností porovnání adámků
0:10:57a samozřejmě sázíme jména proměnných můžeme ztratíme na funkcí symbolických konstant
0:11:03dále no problém které se tam objevují je nerozhodnutelný
0:11:07to znamená dejme tomu že já bych vám know how ucho vytvořte i program kterému
0:11:11když předhodím binárku
0:11:13tak jezdí získal informaci která část sou data a která časy kout
0:11:18tak bylo matematicky dokázané že takovýto programy sestrojit
0:11:22ne jako ne že by se to nebyly třeba schopni nebo jako teď se na
0:11:26to byly hloupý a za deset let jo to někdo dokáže ale bylo matematicky dokázáno
0:11:30že takový program nikdo nikdy ne sestrojí
0:11:33ale ti co zmást viděli teoretickou informatiku neboj měli ten předmět tak se asi slyšeli
0:11:37o problému nastavení turingova stroje a lze ukázat že ten problém je ekvivalentní tomuto problém
0:11:43proč protože abyste získali opravdu správnou odpověď takto případy kdy ten program prostě musíte spustit
0:11:48ani vacek samotná paměti a jestli to interpretuje jako data nebo jako ale pak ten
0:11:53program nemusí nikdy skončit a třeba neudržíte výsledek
0:11:57ale my třeba nevíte jestli program opravdu něco počítá nebo za to cykly
0:12:01takže tom je ten problém
0:12:03jsou tam různé nízkoúrovňové operace
0:12:06třeba registr příznaků který modifikují rozplyne operace nebo když máte na šedesáti čtyřbytovém systému registr
0:12:12ráj tak ten je složen z mnoha pod registru jo je I a tak dále
0:12:17co tam nepříme skoky je taky problém se ten se třeba vypořádat
0:12:22ten zdrojový kód mohou by obtiskovány
0:12:25jak
0:12:26právě na úrovni toho zdrojového kódu nebo tak potom na úrovni binárního kódu váš mohou
0:12:30tam být přidá nějakým geekovo
0:12:32o změněno chování a tak dále takže směsi taky třeba vypořádat
0:12:37naší problém může být tak zvaný peking dinárech
0:12:40kdy vy vezmete vaši binárku
0:12:44vezmete jiný program který vám komprimuje přidá na začátek té komprimované verze nějakou rutinu která
0:12:50vám spuštění dekom P
0:12:52D a F depku je opakuje ten binárku a potom místností takže by potom nechcete
0:12:58rekompilovat tady ten tady ten zabalený kotálí chcete ten rozbalený takže vy musíte zjistit co
0:13:04to bylo za pater a komatu
0:13:08no a pak kategorie sama o sobě je škodlivý software neboli narrower který nedodržuje žádné
0:13:12konvence které souběžnému se dělal opravdu to chce a velmi málo informací něm o poskytnuto
0:13:20když potom na to půjdeme z ne úrovně tak pokud bychom chtěli dělat generickou rekompilaci
0:13:25znamená nebyly bychom zaměření třeba je najít osumdesát šest úkoly chtěli jiné architektury
0:13:30tak potom nastane problém z těch architektury hrozně moc
0:13:33dále i mají různé instrukční sady můžou mít divnou to by tomu šířku nám to
0:13:40tam i celého třiceti dvou bitové registry šedesáti čtyř bitové různá indiánech a tady to
0:13:45by floating point a může tam být nemusí být
0:13:48jsou samozřejmě různé verze rozšíření třeba access vemem X nejsme skáčete a tak dále
0:13:55tím jdou spolu i různá rozhraní na například volací konvence
0:13:59jak předáváte parametry do funkce žena máte tři zásobník nebo jinde před paměť nebo přes
0:14:04registry teď předá máte zleva doprava nebo zprava doleva do je potom toho zásobník uvolňuje
0:14:10volající volaný jak vracíte výsledky funkce to se mnou novější a může to být různým
0:14:15způsobem a také je tam mnoho způsobuje něco udělat se podíváte na ten na tu
0:14:20ukázku tak je to asi kdo knesla česky intelovská syntaxe
0:14:24a je tam ukázáno se způsobuje vynulovat registr
0:14:28samozřejmě toto je triviální ukázka ale těch různým způsobem něco udělá to její u jiných
0:14:33jo a celým tím volání funkcí a tak dále
0:14:39no a samozřejmě máme tady různé souborové formáty a ukousne viděli atom téčko to je
0:14:44na windowsech anebo macho námitku
0:14:49dále máme acho programovacích jazyků jo nejenom céčko nejenom teďka můžete překládat novinářky ale můžete
0:14:56říkali z jiných jazyků
0:14:58teď pro každý ten překládáš máme různé typy optimalizací tady je třeba vidím něco pro
0:15:03vědce teďko
0:15:04a to jsou pouze parametry které má specifikují které přesně optimalizace se mají provést vy
0:15:09si můžete připravit máš vlastním X optimalizací a ten může být něčem unikátní
0:15:14a každý z nich může vyprodukovat naprosto jiný binární o
0:15:19to je dále zajímavého takto instrukcí idiom i ten překladač
0:15:23aby například ten výstup byl rychlejší se může provést některé úpravy na úrovni instrukcí
0:15:28to co by asi všichni znáte z asembleru je že když máte tady násobení čtyřkou
0:15:32takto můžete transformována bitový posuv logický doleva o dva bity
0:15:36to že zajímavější je třeba když máte modul o tak překládky můžou dělat něco takového
0:15:41tam vidíte a kdyby se ukázaly tu pravou stranu uživatel internetu bude koukat jak se
0:15:46to má být jo přitom je to jednoduchému důvodem
0:15:49takže s tím že se třeba vypořádávat tu pravou stranou korektně nahradit zpátky za to
0:15:53co to bylo
0:15:55bohužel to není všechno a je tam daleko více problémů a nezbývá mi už na
0:15:59ně moc času takže bude muset signál
0:16:02tak teď nastává teda otázka jestli je to opravdu tak jako bychom měli získávat krámů
0:16:08z hovězího hamburgrů jo tam máte kousek masíčka ten kousek masíčka mohl odpovídá tisícům různých
0:16:14důkaz
0:16:16no ale kdybychom tady kdybych když tady dneska se mužstev to asi tak nebude takže
0:16:21možná přece jenom bude nějaká naděje proto získat a budu zpátky tu krabičku
0:16:26a nejede si způsobem se podíváme
0:16:29a já jsem člen týmu který se zabývá vývojem se kompilátoru je to projekt lissom
0:16:34a naším cílem je vytvořit tak zvaný generický zpětný překladač
0:16:38poznamenám se nepodporovat různé architektury různé souborové formáty různé programovací jazyky různé překladače a tak
0:16:45dále
0:16:46a naším cílem je aby ten výstup bylo pro uživatele uniformní to znamená aniž to
0:16:51bylo by nastavení intel I osumdesát šest nebo pro R o bude mít výstup céčku
0:16:56které většinou do března a jestli seznámen a nebude sem se zabývá technickými detaily
0:17:02a na vstupu co my budeme ni a budeme mít binárku
0:17:06a o to je P teda nebo formy
0:17:10co se týče tady nároky tak mi aktuálně podporujeme architekturu intel osumdesát šest ve třiceti
0:17:14dvou bitové verzi R oběma nízkosti rozšířeními tam jedna dva a potom bit
0:17:21co se týče souborových formátů traktory podporujeme alfa a péčko služ je většina
0:17:27a podchodem na aplikace napsané sečku případně asembleru
0:17:32co se týče té druhé části teďka o tom budu mluvit chvilku ale je potřeba
0:17:36fráze kompilátor specifikovat detaily teda ne architektury abychom tím byli schopni pracovat
0:17:42no a na výstupu máme za prvé uniformy výstup
0:17:45buď tečku nebo v jakémsi jazyce který se podobá faníku
0:17:49dále máme jako by výstupy z asembleru
0:17:52do podobné ste viděli kázané grafické reprezentace například graf volání nebo graf toku řízení jak
0:17:59tam probublává to programu a různé statistiky
0:18:05načti vývojářů je veden obecnou a jsem kolářem jádro našeho týmu tvoří jakou koutek takže
0:18:12ty na ja a zejtra na dále máme ve skupině mnoho diplomant voba plánů právě
0:18:19z naší fakulty kteří nám pomáhají realizovat tento cíl a vypracovávají mám otázka oulet
0:18:27poďme se ten omrknou na to jak vypadá ten funkce toho našeho chcete o překladače
0:18:31neboj udělat
0:18:32takže na vstupu jak sem říkal a ne binárku
0:18:36sami si uděláme mít detekujeme co to je formát o jestli to je gauss nebo
0:18:40je to péčku a snažíme se taky detekovat použity překladač
0:18:44protože tím že my známe použity při koláž taková mnoho řekne
0:18:48například kde ste vynásobíte potom entry point kam se při zavedení bude skákat abychom začali
0:18:53proto vykonávat tělo toho programu a další informace
0:18:59pátku my uděláme je že to zkonvertuje menu naše uniformního formátu znamená mise nebudem se
0:19:04zabývat že péčku mainu babičku neříkal ale budeme mínus uniformní formát pro všechny souborové formáty
0:19:11to je jedna strana
0:19:13ta druhá strana jemuž sem zmiňoval my musíme mít popis teda ne architektury
0:19:18to se provede existujícím jazyce isac který je vyvíjený právě v rámci projektu lissom kde
0:19:23vy si popíšete co tam soud architektury za registry jak se tam pracuje s pamětí
0:19:28jaká tam instrukční sada jaké má zakódování a co je nejpodstatnější tak jak se která
0:19:34instrukce chová
0:19:36to znamená že například tam instrukce jako sčítání
0:19:40tak to mě jazyce by namodelujete že se jedná opravdu odčítání klasickém úsečkovém smyslu
0:19:46a tak to by to můžete namodelovat i pro jiné architektury takže co my potom
0:19:49víme je že když se tam to může použít tady to instrukce tak že se
0:19:54jedná se odčítání teď kolem osy
0:19:57takže milušce nemusíme zabývat že se ty instrukce mohou jmenovaní na ty prostě víme jak
0:20:02se chovají se pro nás podstatné
0:20:04a sumy generujem instrukční dekodér který nám schopný zjistím že tato binární data se tato
0:20:09instrukce tato binární data tato instrukce tyto operandy a tak dále
0:20:15a teď už následuje nutilo toho samotného de kompilátoru které ještě navíc může být na
0:20:20vstupu se doplňující informace které pro nás sem něco podstatné
0:20:24to nejprve řadě uděláme je že si to konvertujeme do úrovně nižší reprezentace
0:20:29to si můžete představit jako by výstup by z asembleru podobně jak sem tam ukazoval
0:20:34to znamená my tam máme jednotlivé instrukce a my víme co ty instrukce dělají díme
0:20:38jak jsou za sebou víme jaké tam jsou mezi skoky a to je všechno
0:20:44co myslel toho snažíme získat potom je rozdělení funkcí to znamená například tento bylo instrukcí
0:20:50patří této funkci tento blok instrukci patřičné funkci
0:20:55a tak dále
0:20:57co my následně uděláme je a to za použití systému halovém který možná znáte protože
0:21:02na něm postaven trekovací lan
0:21:05tak využitím tady tohoto systému a jejich vnitřní reprezentace provedeme optimalizaci
0:21:12ta nás to dostaneme se to první části je značně neoptimalizovány tam pro jednu instrukci
0:21:18může být může to být nahrazeno spoustu jiný instrukcí takže co my chceme dělat ten
0:21:23výstup čitelnější kratší
0:21:26takže to uděláme právě této fázi ale pořád sme ještě na velmi nízké úrovni
0:21:31na úrovni toho asembleru
0:21:33a následující fázi které ze označena jako převod do vysokoúrovňové reprezentace a různých detekujeme například
0:21:39furt cykly mail cykly konstrukce i a o i L switche a tak dále
0:21:46a zase spolu snažíme získat něco co bude jazykově nezávisle a už to bude podobnější
0:21:52tom úsečku
0:21:54až to po uděláme tak jsou tam třeba provést další optimalizace
0:21:58tam může být spoustu výrazů ktery nouze jo zkrátit a tak dále
0:22:03a následně dojde k tomu že se viděli výstup znamená tato vnitřní reprezentace se zkonvertuje
0:22:08například teďko nebo na té modifikovaný pak
0:22:12a dostaneme další výstupy
0:22:15tak to bylo ve zkratce řečeno jak to teda jak to funguje
0:22:19poďme se podívat na nějaké příklady že to já si to na čem to pěkně
0:22:22uvidíte ta na jedné straně máme voni kotel na té druhé rekonstruovaný
0:22:27je to jednoduchý příklad protože to bylo toto sem nevlezla slajd
0:22:31takže máme tam jednu funkci která provádí jakési podivné sčítání na zavolaj se tam funkce
0:22:36ransom získáme si dvě čísla a provede tam potom aritmetiku nastane funkce main že si
0:22:42taky získáme kde náhodná čísla podíváme se jestli ačkoli větší byl pokuď ano vidíte metru
0:22:48vypočítáme to naší sumu jak vytiskneme folku počítáme suma vracíme výsledek
0:22:53takže v našem ve kompilovaném kódu tam přibylo tak jen hlavičkový soubor se tady tečka
0:22:58a protože my víme že sme to překládali pro třiceti dvou bitovou architekturu to znamená
0:23:03používáme tam třiceti ubytoven těžili to in třicet dva pro ty roste
0:23:08o těm u té funkce mají sám není mi název tak sme tam dali adresu
0:23:12na které se nachází teda neznáte
0:23:15ty názvy proměnných X Y ty sme tam na generovali proto protože to ohraničitelnější než
0:23:20kdybychom family v R podtržítko petr čtyři dva osum a v R type čtyry šest
0:23:24osum jo to X Y N ohraničitelnější ale neodpovídá to tomu co bylo voni by
0:23:29nás
0:23:30protože to my nevíme o to bylo ztracené
0:23:32no a co se týče mainu tak se na to podíváte ten kód je sice
0:23:35trošičku jiný ale funkčně ekvivalentní s tou k tomu co bylo na vstupu
0:23:42tady ukázka další to jen až osumdesát šest se pro péčku a je to bez
0:23:46optimalizací a tentokrát tam máme k dispozici o nic informace
0:23:50eroze zapnou je že normální pomocí přepínače pomlčka mě minimálně urgence teďka no atomickou sme
0:23:56schopni zjistit a jsme schopni zjistit přesně jméno funkcí
0:24:01kde se ty jsem se nacházely jaké modu v na tomto případě to všechno z
0:24:05modulu test žasl
0:24:07jaký adresový rozsah a jaký je rozsah řádek na kterém se nacházely tom původním zdroják
0:24:13takže mi to sme potom třeba schopni seskupit tak aby to odpovídalo tomu pořadí které
0:24:17bylo buď intra
0:24:18jo toto sme schopni větší
0:24:20dále vidíte že u toho faktoriálu tam máme název parametrů
0:24:24ten se taky výčet vadit informaci
0:24:28potom u té funkce kalkuly taky Á B sme výčet v ladicích informací a mnoho
0:24:33dalších věcí že pokuď se tom výstupu nahází ty ladicí informace tak je neprázdný voda
0:24:38protože my můžeme využít abychom generovali přesnějšího přehlednější po
0:24:44dále co generujeme tam může být graf to řízení ste zase jiný příklad který nám
0:24:50ukazuje jak je tam sou základní bloky a jak mezi nima o se předává řízení
0:24:57další ukázka teďka volání za máme tam musím A a vidíme že unavovat chcete jaké
0:25:05mají stodole a mají slad a ta funkce se volá funkci enum teda není naši
0:25:11finance ale zřejmě je se standardní céčkové knihovny a dále funkci print spol kterou platí
0:25:16totéž takže můžete vidět které tam jsou funkce a jak se mezi sebou navzájem provolávají
0:25:21to může být dobré prohnaný
0:25:26pokuď máme k dispozici ladicí informace tak jsme schopni ten výstup dělat či
0:25:31že my nabízíme které ty funkce byli ve stejné modulu znamená byly na začátku tom
0:25:36drátu propojené
0:25:38a toto zobrazit hodně tomu uživateli aby se to mohou lépe orientovat
0:25:45tak to smetena skončili zkratkami a mrkneme se na to by mohlo zajímat todleto maily
0:25:50kompilační služba
0:25:54no
0:25:56zmrazen
0:25:59a jo fajn vypadá to že to bude fungovat
0:26:01tak
0:26:02to je to naše stránka
0:26:04a my adrese viděli tedy compiler byl cz
0:26:08o to tady máme tak sou novinky se můžete podívat se tam nového který kompilačních
0:26:14pozdě a příští týden připravujeme novou verzi takže tady to byly určitě další novinky
0:26:19kde mám potom zajímaly detaily takto učte podívejte sem D seznam článků které sme publikovali
0:26:24souvislosti jo výzkumem této oblasti
0:26:28kdy vlastně to zaujalo zase neváhejte usmát a případně kdybyste nebyli schopni se na to
0:26:32pdf pro se můžeme domluvit
0:26:34o partnery kontaktu nás zajímá to nás zajímá tak je tady tato stránka si můžete
0:26:39vyzkoušet rekompilaci
0:26:42máte tři možnosti
0:26:43buď si můžete vyzkoušet rekompilovat přímo váš binární soubor tím že ho tam hrajete
0:26:49případně pokuď máte céčkový zdroják slepota můžete nahrát jeho za masce uložíme a ten výstup
0:26:54budeme dekomprimovat
0:26:56no a nejednodušší v našem případě bude když si tady můžete vytvořit vlastní céčkový teďko
0:27:02geekovo tak já tady tam třeba zdar
0:27:05karle
0:27:08můžete si zvolit proto to chcete přeložit jo tady máme třeba L mi sečku úroveň
0:27:13optimalizace při překladu
0:27:15jestli tam cena ladicí informace jestli tam chceme zachovat symboly a pak pouze kliknete na
0:27:20tlačítko rtmp mail
0:27:21tady se vám průběžně ukazuje fáze kterými ten překlad prochází máte tady probes v R
0:27:27vidíte
0:27:28jak daleko to ještě zbývá do cíle
0:27:32a následně tady to výsledky už víme že rekompilace proběhla úspěšně
0:27:36vy si můžete ty výsledky obrazy
0:27:39tady na pravé straně vidíte ten výstup céčku tady vlevo je korespondující výstupy z asembleru
0:27:45když se třeba kliknete na tu funkci main vám to automaticky skočí zde kde jsme
0:27:50identifikovali že my tady vidíte to komentáři a tady máte instrukce které tam byly použijte
0:27:57jo to může sloužit tomu analytikovi taky na příklady sem tam něco nezdá nebo by
0:28:01takto podívat jak to bylo opravdu tom asembleru tak si může přeskočit sem
0:28:06takže vidíme že sme korektně rekultivovali jo ten program čeho si můžete všimnout že jste
0:28:12tam líp info
0:28:13a nám se to stalo nějaké
0:28:15by nám mohlo působit zvláštně ale je to tím že ten překladač který vyděluje a
0:28:20vstupu tam byl řetězec a neměl žádné formátovací značky na to procentíčko D a tak
0:28:26dále a tak to nahradil zapnu C
0:28:28které pouze vezmete řetězec aby slyšel
0:28:31a může to být rychlejší než doplňku
0:28:35tak to tam dále máme tak tady je von graf tam jenom vidět že mi
0:28:41vo typu C zajímavého on trochu brát tady taky nic zajímavého a tady si můžete
0:28:47stáhnout binárku kterou jsme používali
0:28:52tak komisi můžete zkusit pak je tam dál vlastně céčkový to já nebo případně si
0:28:56tady můžete nagenerovat nějaké a vyzkoušet si i rekompilaci
0:29:03tak já teda přepnu se pokusím přepnu zpátky na tu prezentaci
0:29:08takže tohle byla ta našli bychom vloží dva
0:29:11určitě stranickostem mrknout případně na napište co si myslíte jestli vám jestli dva zaujala nebo
0:29:17bychom tam měli něco zlepšit
0:29:22tady přikládám kontakt pro zájemce především za studentů kteří přemýšlí o tom jak obviňovali u
0:29:28bakalářskou nebo diplomovou práci
0:29:30to mi mám nabízíme tak je velmi zajímavé téma
0:29:34velmi obtížné téma a velice perspektivní téma
0:29:38jo takže nečekejte že by se na dělali shop na obchod potom kam a to
0:29:42ne jo bude to náročné od bude to tam za to
0:29:45takže pokuď máte zájem dělal něco zajímavého určitě se nám ozvěte a kontakt byly na
0:29:50slajdu domluvíme se
0:29:56a to by bylo v mojí takže já mám velmi děkuju za pozornost a jsem
0:29:59odráží se tady dneska přišli hojném počtu
0:30:02díky
0:30:12tak já se zeptám aténami otázky ano
0:30:26a takže z drátky k tomu zveřejněny nejsou ten vývoj probíhá zavřeně je to k
0:30:31dispozici pouze přes tu webovou službu
0:30:34podívám zajímaly důvody a tak dále ten můžete na nasát a určitě se mám dostane
0:30:38odpověď zní hodně kompetitivnějšího nejsem v tomhle ohledu je a
0:30:57já bohužel nejsem ve vedení takže nevím jaké mají představy jasny E na řízení
0:31:03ale co se týče třeba studentů tak tam není vůbec žádný problém jsou práci vypracujete
0:31:08odevzdáte ale zveřejňuje se pouze upravená verze
0:31:12kde nejsou řečené některé implementační detaily
0:31:15no ale tohoto pohledu není vůbec žádný problém s tím že byste měli nějaké komplikace
0:31:19případně bakalářskym unk i
0:31:22ano dotaz
0:31:24jako máte úspěšnost řekl registrových kódu X přeložit dekódujete úplně všechno nebo jsou z už
0:31:30nějaký čas které se de kupovat momentálně nedají tak jako moc děkuju za otázku a
0:31:36je to tak záleží na složitosti jo záleží na složitosti a zase tam používají konstrukce
0:31:41které souběžné nebo se něčím vymykají
0:31:43samozřejmě pochodě kombinujeme škodlivý software tak tam se vymyká většinou naprosto všecko protože tvůrci toho
0:31:49škodlivého softwaru vyloženě chtějí abychom nebyli úspěšný tak že se o to snaží všemožnými ochrana
0:31:54mi
0:31:55pokuď ten soubor vyleze překladače který je známý například dětem tečka tak pak máme dost
0:31:59velkou úspěšnost protože se tam používají klasickým konstrukce klasické konvence
0:32:04a tak dále
0:32:08ano
0:32:08že bych hotels když vlastně budu mít nějakou binárku který nebudu nic vědět do se
0:32:13nějak třeba automatizovaně zjistit pro jako Ú podporu může přeloženej
0:32:19tak jdeme řadě třeba bude určitě zajímat tady jaký tam je F souborový formát použity
0:32:24na to můžete na linuxu použít například čili to file
0:32:28nebo případně můžete použít na windows u no tuším prý se to menuje případně další
0:32:34utility které mám zjistí co to je za souborový formát jestli to je teda L
0:32:39nebo jestli to je téčko případně jestli to je úplně nějaký nesmysl načítal audio
0:32:44té první věc která má zajímá poté když víte co to je za souborový formát
0:32:48tak se můžete podívat pomocí utilit typu od těch dám který vám je schopný zase
0:32:54milovat ten výstup a zjistíte si teda jestli se opravdu natolik vektor Á nebo není
0:32:59jo žid architekturu tak pak samozřejmě můžete se pídili po dalších věcech je tam byl
0:33:03použitý překládáš a tak dále jo to všechno řešíme právě našem projektu by se tam
0:33:09používají různé heuristiky a díky který mi to jsme schopni ti jo některých případech pokud
0:33:15si ten uživatel na práci s tím aby toho nečitelné tak je třeba uspoří něco
0:33:20dynamičtější jo
0:33:24já bych hodnot asku na začátku bylo pohoda ne že mě možná by se program
0:33:30a úplně možnost vyšší data úvod
0:33:33pohodu potom sjednané podoby milostiplnostem protože pro bytě po taky ne statickou analyzovat po statický
0:33:40prostě ten binární cot na načtena
0:33:43ten k o na ty slušný program tak šaky sposobom osoby šlechtice data a
0:33:49ten půl překot pět podstatě plně možné
0:33:53tak já možná děkuji za znaku
0:33:56a co bych chtěl a osvětlit tak je že tam musíme tento přitom není možný
0:34:00ve všech případech udělat jo to bylo to co sem říkal že neexistuje program který
0:34:04by vám to zjistil ve všech případech
0:34:06ale dejme tomu že třeba devadesáti procentech nebo devadesáti pěti procentech případů můžete být úspěšný
0:34:12klasickou statickou analýzou
0:34:14jo to zná zjistíte si například je tam jen připojení na kam se skáče po
0:34:18nahrání to program do paměti a odtud můžete začít dekódovat
0:34:22jo a to může třeba fungovat devadesáti pěti procentech případů ani zpět na ten případu
0:34:27bohužel třeba nigin epopeje se
0:34:29jo takže tam je to mi to riziko ale v běžných případů to je možné
0:34:33si to jenom tím způsobem
0:34:41ano některé obchodní případy tímto způsobem nejsou mu není mi není možné dekomprimovat
0:34:49no
0:34:50eště počkejte vám přinesu mikro force slyšet na slidu
0:35:05že krnáč nějaký houfu skovanej zdrojový kód dokáže čeho pro vložit na sprostotu binárku získat
0:35:11P trojku nějaké optimalizovány po to bude
0:35:15a E u té obfuskace tam se většinou mění řekněme třeba identifikátory nebo konstrukce použít
0:35:22nebo se tam vkládá něco navíc nebo se něco mění takže my to budeme schopni
0:35:27získat je zpátky toto skovaný o
0:35:30ale jsou potom potřeba další analýzy které by nám sto kostkované hospodu získali něco třeba
0:35:36ještě před tou tiskací jo protože to obfuskaci vy tam zahnete jako by další úroveň
0:35:41do toho protože vy získat evropu skovaný to ale ještě potom potřeba další analýzy které
0:35:46mám otestované ho kódů jsou schopni získat zpátky ten skovaný o
0:35:51jo i odpověděls na naši otázku
0:35:56ano
0:36:04A abys třeba zatahuje si stanoví kolik céčku S třeba když to napíšu já nevím
0:36:09byli zvykli v něčem jiném stuze taky pěkně do toho céčka třeba dostat
0:36:14jo s tím rizikem sice nejsem jist jestli není interpretovaný ale to je celkem nepodstatném
0:36:19naštípat
0:36:22samozřejmě můžete mít jiné jazyky které mám generují ten asembler
0:36:25a ten sem tady může být velmi podobný pro to co ste dostali teďka to
0:36:29třeba když si přeložíte fortran doby náký
0:36:32a samozřejmě mohou tam být nějaké rozděle věcí ale pokuď se ten potom a podobně
0:36:37tak měl jsme schopni stejně dobře rekompilovat jako kdyby vyšel někoho jiného rovnosti o jazyku
0:36:44jo ale to tam sou tam odlišnosti samozřejmě
0:36:59já bych se zeptal jestli takováto teprv kompilace může být efektivní tři it
0:37:03při když mám
0:37:06k o nějakém jiném jazyce a si ho získat do céčka S této efektivní dělat
0:37:12tuhle cestu
0:37:14nebo ty jakémkoliv
0:37:16jazyce kterým si vymyslí matici jasné do céčka
0:37:20tak se mi to velice zajímavá otázka souvisí to tak zvanou migraci kódu
0:37:24za na vy máte zdrojový kód v jednom jazyce třeba sečku a chtěli by se
0:37:29to v něčem jiném já ze fortran no ale obvykla todle naopak že jo máte
0:37:32něco ve fortranu se nejřaditelnějšího takto byste konverzovali úsečka tak jedna možnost je vždy ten
0:37:38původní zdroje a konvertováno přímo
0:37:41další možnosti ho přeloží potom kdy kompilovat následně to dekódovat do toho vašeho výstupního jazyka
0:37:49pokud to provedete přímo tak tam máte výhodu že tam máte zachované všechny informace
0:37:53to znamená máte tam všechna jména proměnných všechny komentáře je ty komentáře můžete vzít a
0:37:58promítnout do toho výstupu
0:38:01takže to co tam všechno máte to sou teda výhody toho přístupu přímo ze zdrojáku
0:38:05dobré
0:38:06co se týče toho přístup dobře ten binární kód tak tam ztrácíte informaci je to
0:38:11náročnější a zase na druhou stranu tam můžete mít v něco co by se mám
0:38:15na úrovni toho tečkového arrow toho patnáctého korun neprojevilo jo může to v nějaké specialisty
0:38:20co ten překladač optimalizuje a učte neobjeví tom výstupu
0:38:24takže potom když to budete rekompilovat tak to může být v některých případech to může
0:38:28být přesnější protože tam máte vyloženě ten výstup jo a s tím souvisí ještě tak
0:38:33zvaná migrace binárního kódu to znamená vy máte probrán který mám běží třeba nádobu
0:38:38chtěl by se mělo dopad program který běží najít osumdesát čase
0:38:41a pokud tam nemáte zdroják tak už vám nepomůže ten přístup hazdra zdrojáku ale musíte
0:38:47ten kód rekompilovat
0:38:49nechcete jinou cestou difundovat do nějakou jazyk to přeložit pro tu danou cílovou architekturu
0:38:55takže tady kompilace je využita má především právě případě tady migrace tohoto binárního kódu
0:39:01jak bych navázal strana předchozí dotaz
0:39:04řekněme že bych
0:39:05opravdu si lumírova třeba ten port rovno céčka a nechtěl B C tou to verzí
0:39:10a úplně novinářky na konkrétní architekturu ale zastavil bych se někde na úrovni jako to
0:39:15univerzálního kódu na tom L lvem N Ú je to možný
0:39:20je to určitě možné my sme právě o tomto přístupu na tady článek
0:39:24vize zabijeme zabýváme to mít já sem nouzového kódu kdy přitom je možný ten že
0:39:29vy vezmete ten původní teda
0:39:31pak použijete sílám který je mám odklopený vygenerovat onen měr ten je prezentace která se
0:39:37nepoužívá a můžete využít zadní část našeho překladače
0:39:41která vám je schopná sou evolventní R získat zpátky tento
0:39:45jo ta webová služba to zatím nepodporuje
0:39:49takže tam si to ještě nevyzkoušíte ale prakticky nebo teoretický takto teoreticky to možné je
0:39:54a případně za ní můžu poslat ten článek který se o tomto tématu napsaný
0:40:01příliš nějaký dotaz
0:40:11já bych se k že bych se chtěl zeptat jestli plánujete podporu nějakých vyšších jazyků
0:40:17přesně C plus třeba jestli dekódujete nebo to vždycky hodláte nechat na úrovni céčka
0:40:25případně jaké úspěchy máte skok zakompilováním složitějšího programu protože vy ste říkal že se zaměřuje
0:40:32ten a nějaký málo vektory předpokládám bývá spíš jednodušší
0:40:36a jak vypadá potom kotel nějakého programu který má třeba já nevím čtyřicet mega tak
0:40:42začít
0:40:43tak jo děkuju tak mi propojena tu první otázku co se týče rekompilace něco složitějšího
0:40:48tak to mám určitě napadne tak je zmiňované se plus tesco mi tady toto malé
0:40:52plánů ale zase C plus použije o něco vyšší level když právě to céčko že
0:40:57u se plus potká tam musíte rekonstruovat třídní hierarchie
0:41:03musíte tam rekonstruovat práci s výjimkami rose třeba neobjevil koutečku a má to ještě další
0:41:08specifika
0:41:09takže současné době nejde kompilaci C plus podprogram nepodporujeme respektive kde kopírujeme tak pěkně jak
0:41:16byste si představoval ale určitě právě toto je plánů protože dost velká část škodlivého softwaru
0:41:22je napsáno právě C plus ku a příklad více zvyšoval studio
0:41:26takže tímto směrem součtem M seznam zem zabírat nebo
0:41:29jak
0:41:31a co se týče toho tvého dotazu tak samozřejmě když máte větší binární soubor tak
0:41:38tady kompilace může být pomalejší to bude
0:41:41a bude to vody kompilovaného hodně takže bude třeba problém se tom vyznat
0:41:46že s tím souvisí třeba jim přístup že výsledek usilovali pouze část
0:41:50toho binárního souboru kterou by ten analytik chtěl jo třeba může tuším že na tady
0:41:55těchto adres se nachází něco podezřelého takže by si rekompilovat jenom část toho a podívat
0:42:00jestli opravdu ten něco protřelého nebo ne
0:42:03jo zase je to možnost na budoucí rozšíření
0:42:07no jestli chtěl zeptat jestli takový projekt jako kdy kompilátor nepřestavuje nějaký problém z hlediska
0:42:13licencí nějaký program je záměrně distribuovaný jakobín ark a
0:42:19jestli
0:42:21některé větší společností ne nepředstavují nějaké problémy a se týče kdy kompilaci jejích uzavřených programů
0:42:30a modifikacích kódu
0:42:33děkuji za otázku tady narážíme na problém autorského práva který je řešen různých zemí jinak
0:42:40jo co se týče české republiky tak poplivat o zajímalo tak náhodně ten autorského zákona
0:42:45té zakončí foto dvacet jedna lomeno dva tisíce sbírky především do paragraf šedesát šest který
0:42:50říká se vy můžete dělá na to nemůžete dělat
0:42:53jo takže opravdu pro tu pokuď byste měli mysli dělat něco o čem tušíte že
0:42:57nelegální mrkněte se do toho autorského zákona a ještě letech konzultujte to z vaší právníkem
0:43:03jo
0:43:04samozřejmě některé záležitosti jsou povolené ve většině zemí může být třeba případě rekompilace
0:43:11za účelem interoperability jo že máte nějaký binární formát kterého nejsou k dispozici stránky a
0:43:17vy byste chtěli to dělá si váš program který umístím formátem pracovat
0:43:22tak tam je to mnoha případech povolené a to ještě jiné situace kdy to může
0:43:25být povolené josef konzultujte autorský zákon teda ne které zemi
0:43:32jak se zase hospitace že a Q na tom konkurenci a
0:43:36co dokazuju
0:43:39tak co se týče konkurence tak já bych zmínil asi dva největší komponenty momentálně kteří
0:43:44jsou aktivně vyvíjený to je X riziko mail R cože plodin do disassembler lída
0:43:50ti podporují i za sedmdesát česku adam a zjis prostě to něco jiného a tím
0:43:57mají velmi pěkné výstupy
0:43:59Ú sto often projekt funguje se nule
0:44:02je to po taky komerční projekt to place nejsou tam pomine za to by to
0:44:05té části a my se snažíme právě
0:44:08konkurovat tady tomuto projektu některých částech konkuren úspěšně některých méně úspěšněji
0:44:14takže to takový boj co se týče toho dalšího tak to je si kdy kompilátor
0:44:19z ruska vynese zmatek
0:44:21ti kluci se zaměřují na rekompilaci C plus prvkového kódu pro platformu intel X osumdesát
0:44:28šest
0:44:30a zase mají zajímavé důsledky některé některých případech nelepší některých horší například právě rekompilaci toho
0:44:37C plus podkova obchodu jo info schopni a měli kontrolovat výraz je tří joyce maticemi
0:44:42virtuální činnost a tak dále což mi momentálně schopni nejsme
0:44:47takže to by asi tak zvaný větší konkurentní kteří svatyně vybíjení
0:44:52asi všechno
0:44:57tak jo
0:44:58žádné další dotazy mockrát děkuji za přednášku za vaše dotazy za disku vypnu zatleskat