Поднятие двоичного кода в LLVM IR
Задача декомпилирования двоичного кода играет важную роль в задачах анализа кода, повторной оптимизации, деобфускации, рекомпиляции и многих других. В этой области существует несколько инструментов с открытым исходным кодом, обладающих разными возможностями, поддержкой разных платформ и языков, уровнем поддержки и т.п. Одним из популярных целевых языков для декомпилирования является LLVM IR, поэтому данная практика будет ограничена именно этим языком.
В данной работе требуется провести обзор современных технологий и инструментов для решения задачи поднятия. Это подразумевает не только изучение описаний проектов и статей, но и запуск каждого инструмента на отдельно подобранном наборе тестов на разных платформах. Затем предлагается подгружение в один или несколько выбранных инструментов и улучшение их показателей.
- Устаревшая табличка с инструментами: https://github.com/lifting-bits/mcsema
- Один из проектов: https://github.com/aengelke/rellume
- Еще один проект: https://github.com/aengelke/instrew
- И еще один проект: https://github.com/Microsoft/llvm-mctoll
- Статья для погружения https://monkbai.github.io/files/sp-22.pdf
Требования к студенту
Знание ассемблера любой архитектуры, знакомство с LLVM IR будет большим плюсом
Уровень
2 курс, 3 курс
Руководитель
Смирнов Кирилл Константинович
Консультант
Смирнов Кирилл Константинович
Источник
YADRO