|
Detekce použitého překladače
Kostka, Michal ; Ďurfina, Lukáš (oponent) ; Křoustek, Jakub (vedoucí práce)
Cílem této práce je vytvoření detektoru překladače. Tento program umí rozpoznat překladač nebo modifikátor použitý k vytvoření aplikace. Podporovány jsou formáty spustitelných souborů PE a ELF. Úkol je řešen hledáním signatury překladače, která reprezentuje startovací rutinu v souboru, jejíž podoba závisí na použitém překladači. Tato práce je vytvořena jako součást projektu Lissom.
|
|
Zadní část zpětného překladače produkující kód v jazyce C
Urban, Martin ; Ďurfina, Lukáš (oponent) ; Zemek, Petr (vedoucí práce)
Práce popisuje implementaci zadní části zpětného překladače produkujícího kód v jazyce C. Obsahuje základní informace o principech a využití reverzního inženýrství v oblasti informačních technologií i mimo něj. Hlavním cílem je vytvořit zadní část zpětného překladače, která bude generovat kód ekvivalentní vůči vstupu, který bude opět přeložitelný do binární formy se zachováním stejné funkčnosti jako zdrojový binární kód. Výstupem je implementace tříd v jazyce C++, vykonávající popisovanou činnost jako součást obecného dekompilátoru, který je vyvíjený v rámci projektu Lissom.
|
|
Optimalizace přední části zpětného překladače
Odaloš, Matej ; Ďurfina, Lukáš (oponent) ; Křoustek, Jakub (vedoucí práce)
Zpětný překladač je nástroj reverzního inženýrství umožňující rekonstrukci strojového kódu na některý z vyšších programovacích jazyků. Tato práce se zaobírá popisem tohoto nástroje, přičemž se soustředí hlavně na zpětný překladač projektu Lissom. Je tu navrhnutých několik technik pro optimalizaci překladu jako statická interpretace LLVM IR kódu a paměť pro výsledky interpretace. Další optimalizace se týkají rozšíření funkcionality přední části překladače, podporu delay slotů a detekci rozložení paměti a endianity. Implementované techniky jsou nakonec demonstrované na generovaném kódu.
|
|
Optimalizace výsledků zpětného překladu pomocí dodatečných informací
Končický, Jaromír ; Ďurfina, Lukáš (oponent) ; Křoustek, Jakub (vedoucí práce)
V rámci projektu Lissom je vyvíjen rekonfigurovatelný zpětný překladač, jehož cílem je umožnit zpětný překlad programů, určených pro libovolnou platformu, do libovolného vyššího programovacího jazyka. V době počátku řešení této práce nejsou jeho výsledky ideální, neboť v něm, mimo jiné, nejsou implementovány techniky využívající dodatečné informace o programu. V rámci této práce je popsáno zpětné inženýrství a zpětný překladač projektu Lissom. Jsou zde navrženy techniky využití dodatečných informací ke zlepšení a optimalizaci jeho výsledků, konkrétně se jedná o analýzu datových sekcí a získávání ladicích informací z formátu PDB. Součástí práce je zkoumání struktury a obsahu formátu PDB. Implementace analýzy datových sekcí a použití ladicích informací je zde dále popsána a na závěr jsou zhodnoceny výsledky zpětného překladu při využití těchto technik.
|
|
Optimalizace v zadní části zpětného překladače
Kollár, Jaroslav ; Ďurfina, Lukáš (oponent) ; Zemek, Petr (vedoucí práce)
Tato práce se zabývá návrhem a tvorbou optimalizací v zadní části zpětného překladače. Úlohou těchto optimalizací je vylepšit čitelnost produkovaného zdrojového kódu. V úvodu jsou poskytnuty základní informace o reverzním inženýrství a zpětných překladačích, které slouží pro účel uvedení do dané problematiky. Poté následuje analýza produkovaného kódu zpětným překladačem s cílem obeznámit čtenáře s navrženými optimalizacemi pomocí názorných ukázek. Dále následuje hlavní část této práce, která se věnuje popisu návrhu a implementace jednotlivých navržených optimalizací. Poté následuje popis technik, které byly využity při testování. V závěru práce jsou shrnuty dosažené výsledky a jejich přínos.
|
|
Rekonstrukce instrukčních idiomů v rekonfigurovatelném zpětném překladači
Pokorný, Fridolín ; Ďurfina, Lukáš (oponent) ; Křoustek, Jakub (vedoucí práce)
Cílem této práce je detekce a následná transformace instrukčních idiomů využívaných v moderních překladačích. Instrukční idiomy jsou používané pro optimalizaci kódu produkovaného překladačem kvůli tvorbě rychlejších, případně menších spustitelných souborů. Při zpětném překladu však instrukční idiomy zatemňují zpětně přeložený kód. Rekonstrukce instrukčních idiomů proto vede k čitelnějšímu zdrojovému kódu, který je výstupem zpětného překladu.
|
|
Generická obfuskace na úrovni bajtkódu
Kollát, Samuel ; Křoustek, Jakub (oponent) ; Ďurfina, Lukáš (vedoucí práce)
V této práci je popsána definice obfuskace a metody její realizace. Následuje popis projektu LLVM a možnosti jeho využití při vytváření obfuskace na úrovni bajtkódu se zaměřením na generickost vzhledem k cílové architektuře. Jádro práce tvoří podrobný návrh metod obfuskace s cílem jejich implementace v zadní části překladače LLVM. Závěrečná sekce se věnuje ověření funkčnosti na různých architekturách pomocí automatizovaných testů.
|
|
Editor pasportizace VUT
Bierza, Daniel ; Kolář, Dušan (oponent) ; Marušinec, Jaromír (vedoucí práce)
V této práci budu prezentovat problematiku pasportizace. Provedu analýzu současného stavu u budov VUT. Popíši možná řešení pasportizace VUT v budoucnosti. Zaměřím se na analýzu formátu "obr" pomocí reverzního inženýrství. Provedu analýzu získaných dat. Popíši způsoby uložení pasportizačních dat. Navrhnu grafický prohlížeč a editor pasportizace.
|
|
Analýza a převod kódů do vyššího programovacího jazyka
Křoustek, Jakub ; Masařík, Karel (oponent) ; Meduna, Alexandr (vedoucí práce)
Práce popisuje metody a postupy používané k analýze a transformaci kódů. Obsahuje základní informace o vědním oboru reverzní inženýrství a jeho užití ve výpočetní technice i mimo ni. Hlavním cílem je vytvoření obecného zpětného překladače neboli dekompilátoru, tj. prostředku pro zpětný překlad z binární formy (případně jazyka symbolických instrukcí) do vyššího programovacího jazyka. Zmíněná činnost je silně závislá na konkrétní instrukční sadě a architektuře procesoru. Tento problém je řešen pomocí popisu sémantiky jednotlivých instrukcí jazykem navrženým pro tento účel. Výstupem je program napsaný ve vyšším programovacím jazyku, funkčně ekvivalentní vstupu. Program je tedy schopen pracovat s jakoukoliv instrukční sadou a kód v ní napsaný pak převést do zvoleného vyššího programovacího jazyku. Tento návrh je v praxi implementován jako součást projektu Lissom. Obecný dekompilátor je zcela nový pojem a pro jeho vytvoření byly autorem navrženy doposud nepublikované techniky z oblastí teorie překladačů a optimalizací.
|
| |