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